Autor
|
Thema: Automatisierung eines einfachen Workflows (1193 mal gelesen)
|
LittleJohn10 Mitglied
Beiträge: 3 Registriert: 11.08.2014 Win 7 Prof 64bit CATIA V5 R20
|
erstellt am: 11. Aug. 2014 18:02 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich muss zur Zeit für die Uni einen Workflow erarbeiten, um STL-Files einzulesen, diese mit wenigen Funktionen weiterzuverarbeiten und abschließend wieder zu exportieren. Sehr elegant wäre natürlich, das ganze so in ein Makro zu verpacken, dass außer der Auswahl der einzulesenden Datei keine Eingaben nötig sind. Die STL-Dateien sind natürlich unterschiedlich, aber prinzipiell so ähnlich, dass der Ablauf jedesmal der gleiche ist: 1. Importieren, Mesh Cleaner, Mesh Smoothing 2. Automatic Surface, Fläche schließen 3. Schritt 2 nochmal wiederholen, aber vorher Rough Offset anwenden 4. Körper "2." aus Körper "3." entfernen, so dass aus dem Positivmodell ein Negativmodell mit Wandstärke wird. Erst in Schritt 5 kommt es wirklich auf die Form des eingelesenen Modells an, das muss sowieso von Hand gemacht werden. Schritt 6 wäre exportieren. Ich habe schon ein bischen mit einzelnen Codeschnipseln an einem CATScript gebastelt, aber ehrlich gesagt noch kein vorzeigbares Resultat erzielt. Ist das generell machbar? Bisher scheiterts an den speziellen Funktionen. CATIA.startcommand ist ja anscheinend etwas schwierig weil man das Makro irgendwie anhalten muss während man auf Eingaben wartet? Außerdem könnte ich mich dann ja auch von Hand durchklicken, wenn ich eh jedes Fenster einzeln zu Gesicht bekomme. Weil es ja eigentlich wirklich nur Arbeitsschritte sind, könnte man das mit einem Powercopy realisieren? Meine Programmiererfahrung hält sich leider in Grenzen, ich kenn zwar die Grundlagen aus einem Uni-Kurs aber habe noch nie mit VB gearbeitet. Danke und Grüße John
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 12. Aug. 2014 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für LittleJohn10
Servus Willkommen im Forum. Ich befürchte dass diese Funktionen die du benötigst nicht direkt per Makro angesprochen werden können. Über StartCommadn die Funtkonen starten (im speziellen wenn noch Usereingaben gemacht werden müssen) wird komplexer, da du wahrscheinlich dann von "außen" (VB) auf die Anwendung zugreifen musst. Hast du mal probiert (ich kenne leider dir entsprechende Workbench nicht genau), eine "Vorlage zu erstellen", dann das neue Mesh einladen und ersetzen? Gruß Bernd Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
LittleJohn10 Mitglied
Beiträge: 3 Registriert: 11.08.2014 Win 7 Prof 64bit CATIA V5 R20
|
erstellt am: 12. Aug. 2014 13:17 <-- editieren / zitieren --> Unities abgeben:
Hallo, das hatte ich schon befürchtet... Was ist denn der Unterschied zwischen den verschiedenen "Wissensvorlagen"? Für den Ablauf muss ich mehrmals zwischen verschiedenen Workbenches wechseln, für Schritt 1 brauche ich "Digitized Shape Editor", 2 und 3 "Quick Surface Reconstruction" und "Part Design". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
LittleJohn10 Mitglied
Beiträge: 3 Registriert: 11.08.2014 Win 7 Prof 64bit CATIA V5 R20
|
erstellt am: 12. Aug. 2014 15:47 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe nochmal mit startcommand rumprobiert, aber die Fenster der Funktionen die ich brauche ploppen immer erst ganz am Ende des Makros auf. Habe verschiedene Sachen probiert, z.B. MsgBox die man erst wegklicken muss, InputBox die einen speziellen Wert braucht um aus der Schleife rauszukommen, die Codeschnipsel die man hier im Forum findet wo man ebenfalls in einer Schleife steckt bis sich das spezielle Fenster öffnet / schließt... alles nutzlos, das Fenster geht immer erst am Ende auf bzw. Catia ist in der Schleife gefangen weil die Bedingung (das Fenster soll sich öffnen) gar nie erfüllt wird. Hat jemand noch Ideen für mich? Danke! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 12. Aug. 2014 16:19 <-- editieren / zitieren --> Unities abgeben: Nur für LittleJohn10
Hallo John, ich kann dir nur sagen, dass da einiges geht. Sauber ist die Verwendung von StartCommand allerdings nur kaum zu bekommen. Ich habe wenige Programme, die allerdings soviel Ersparnis bringen, dass sich die Umsetzung trotzdem lohnt. Meist sind aber einige auch außenstehende Faktoren wichtig, denn zum Beispiel bei der Ermittlung wo geklickt werden soll, muss auch vorher erst ermittelt werden, welche Auflösung hat der Bildschirm, ist CATIA maximier bzw. auf welchem Bereich ist CATIA, wo öffnet sich das Fenster usw. . Das heist, um derartige Funktionen annähernd sauber zu bekommen, muss man auch irgendwie für klar Verhältnisse sorgen. z.B. muss der Treiber der Grafikkarte so eingestellt werden, dass ein Fenster mittig öffnet uvm. je nach Umsetzung bzw. Anforderung! Hier mal ein Ausschnitt:
Code: Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As LongConst MOUSEEVENTF_LEFTDOWN = &H2 Const MOUSEEVENTF_LEFTUP = &H4 Public Sub LeftClick() LeftDown LeftUp End Sub Public Sub LeftDown() mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 End Sub Public Sub LeftUp() mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 End Sub Sub CATMain() Dim CutFunc As String Dim FuncTitle As String Dim CurPosActivateX As Integer Dim CurPosActivateY As Integer Dim hWndTmp1 As Long Dim hWndTmp2 As Long Dim ErrorList() As String Dim ErrorOcc As Boolean CutFunc = "CATCsdShePocketHdr" SMDFuncTitle = "Pocket Definition" CurPosActivateX = 370 CurPosActivateY = 540 'startet SheetmetalPocket CATIA.StartCommand (CutFunc) 'Wiederholt solange bis das gesuchte Fenster geöffnet ist Do 'such das Fenster mit der Überschrift "Pocket Definition" hWndTmp1 = FindWindow(vbNullString, FuncTitle) 'wenn dieses geöffnet ist wird ein Mausklick ausgeführt If hWndTmp1 <> 0 Then SetCursorPos CurPosActivateX, CurPosActivateY LeftClick DoEvents End If 'Sehr wichtig, damit das Programm nicht die CPU 100% auslastet und CATIA Rechenleistung zum reagieren hat! DoEvents Wait (100) Loop Until hWndTmp1 <> 0 'Wiederholt solange, bis das Fenster wieder geschlossen ist Do hWndTmp1 = FindWindow(vbNullString, FuncTitle) DoEvents Loop Until hWndTmp1 = 0 End Sub
Das sind ein paar Zeilen, aus einem Tausendzeiler, und macht sicherlich noch lange nicht das was du möchtest oder was es bei mir macht. Es soll dir aber mal ein Prinzip erklären. Man muss bei solchen Sachen um die Ecke denken und das auch können. Voraussetzung ist erstmal, dass man das Einmaleins der Programmierung kann und das Datensystem von CATIA kennt. Anders formuliert, dass was du da machen möchtest, benötigt schon eine Menge an Knowhow nicht nur im Programmieren an sich, das du aktuell in meinen Augen nicht mitbringst und programmieren kann dir das sicherlich hier keiner mal eben so, so leid mir das tut... ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|