CATIA V6 automatisieren mit Python unter Windows
Das neue CAD- und PLM-System CATIA V6 von Dassault Systemes kann mit Python unter Windows genauso einfach automatisiert werden, wie das gerade in Ablösung befindliche CATIA V5. Da das neue System aber nicht mehr auf das Dateisystem des Benutzers zurückgreift, sondern mit einer Datenbank gegen einen PLM-Server arbeitet, muss man hierbei den Zugriff auf die CAD-Daten natürlich komplett anders gestalten. Dieser Artikel zeigt, wie man automatisiert CAD-Daten identifiziert und diese für einen Vergleich in die Turntable View des Silver Layer lädt.
COM-Anwendungen lassen sich mit Python z.B. mit comtypes oder mit dem Pywin32 Modul, welches in der ActivePython Distribution enthalten ist automatisieren. Meine Beispiele hier verwenden Pywin32.
Wenn Sie die folgenden Beispiele laufen lassen, sorgen Sie bitte dafür, dass CATIA V6 bereits gestartet ist und eine PLM-Verbindung existiert.
Das erste Beispiel gibt einfach die Namen (PLMExternalID) der selektierten CAD-Daten aus einer Trefferliste (im Silver Layer) in die Konsole aus:
import win32com.client catiaObj=win32com.client.GetActiveObject('CATIA.Application') for i in range(catiaObj.ActiveEditor.Selection.Count): print 'Selected Item %s: %s'%(i, catiaObj.ActiveEditor.Selection.Item(i + 1).Value.Name)
Das nächste Beispiel setzt eine Recherche mit der Zeichenfolge „Weld0815*“ an die VPM-Datenank ab und lädt alle gefundenen Daten in die Turntable View im Silver Layer. Dies ist hilfreich, wenn man eben schnell eine bestimmte Menge an CAD-Daten miteinander vergleichen möchte:
import win32com.client # Search for every Product with name Weld0815* catiaObj=win32com.client.GetActiveObject('CATIA.Application') oSearchService = catiaObj.GetSessionService("PLMSearch") oPLMSearches = oSearchService.Searches oPLMSearch = oPLMSearches.Add() oPLMSearch.Type = "PLMProductDS" oPLMSearch.AddAttributeCriteria("PLM_ExternalID", "Weld0815*") oPLMSearch.search() # Iterate over all found objects and put them into the turntable view o3DShapeAsPLMEntities = oPLMSearch.EditedContent print 'Found %s entries.'%o3DShapeAsPLMEntities.Count for foundobj in o3DShapeAsPLMEntities: print 'Putting %s onto the table'%foundobj.Name oSelection = catiaObj.ActiveEditor.Selection oSelection.Add(foundobj) catiaObj.StartCommand("Turntable")