Autor
|
Thema: Aktives Part bzw. .InWorkObject in einem Produkt? (1533 mal gelesen)
|
mycon Mitglied
Beiträge: 58 Registriert: 14.02.2011 Catia V5R19
|
erstellt am: 20. Feb. 2011 00:29 <-- editieren / zitieren --> Unities abgeben:
Hi, ich schreibe gerade ein Makro das in einem Part aus dem Skizzierer herraus aufgerufen wird. Auf Part-Basis funktioniert das problemlos, wenn ich jedoch in einem Produkt bin, und von dort aus in eine Skizze eines verbauten Parts gehe, funktioniert es nicht mehr. Da ich einem Produkt Part1.Part.InWorkObject nicht verwenden kann, denke ich mal das es daran liegt. Ich müsste also irgendwie rausbekommen welches Part in einem Produkt gerade bearbeitet wird. Es soll in der derzeit "geöffneten" Skizze nur ein Selection1.paste ausführen. Bin schon am durchsuchen der V5Automation.chm, aber ich finde dort leider nichts passendes.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 20. Feb. 2011 10:10 <-- editieren / zitieren --> Unities abgeben: Nur für mycon
Ich glaube direkt geht es nicht. Aber über ein kleinen Programm wie: Sub CATMain()
Dim productDocument1 As document Set productDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = productDocument1.Selection selection1.Clear selection1.Search "CATPrtSearch.Plane.Name=xy*,in" Dim selplane As Reference Set selplane = selection1.Item(1).Value Dim ActiveDocPartNumber As String ActiveDocPartNumber = selplane.Parent.Name Dim ActiveDocNumber As String ActiveDocNumber = selplane.Parent.Parent.Name MsgBox "Partnumber: " & ActiveDocPartNumber & vbLf & "Dokumentenname: " & ActiveDocNumber
End Sub
könntest du dir per Umweg über eine eingeschränkte Selektionssuche dein Part ermitteln. ------------------ Grüße aus dem Thurgau Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mycon Mitglied
Beiträge: 58 Registriert: 14.02.2011 Catia V5R19
|
erstellt am: 20. Feb. 2011 12:16 <-- editieren / zitieren --> Unities abgeben:
mh, bekomme dein code nicht zum laufen, er hat scheinbar ein problem mit der zeile Set selplane = selection1.Item(1).Value Eine andere alternative wäre es vermtl. für mich das ganze via SendKeys zu machen. Dann ist es ja egal in welcher Workbench ich gerade bin.
Nur leider sind auch da meine Versuche erfolglos. Ist das wirklich so schwer ein simples paste in das derzeit aktive Dokument zu machen? Dim documents1 as Documents set documents1 = Catia.Documents Dim document1 as Document set document1 = Catia.ActiveDocument Dim documents2 as Documents set documents2 = Catia.Documents Dim document2 as Document Set document2 = documents2.Open(dxfDatei) Set selection1 = CATIA.ActiveDocument.Selection selection1.Clear selection1.Search "CATDrwSearch.2DGeometry,all" selection1.Copy document1.Activate SendKeys "^V", True Da passiert nichts bei mir. Wenn ich nach dem ablauf selbst nochmal strg+v drücke, dann pastet er es. Nur warum macht er es nicht im script?
[Diese Nachricht wurde von mycon am 20. Feb. 2011 editiert.] 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: 20. Feb. 2011 12:58 <-- editieren / zitieren --> Unities abgeben: Nur für mycon
Servus Ich vermute du kommst mit den Selections durcheinander. Jedes Dokument hat seine eigene Selection. Zusätzlich muss beim Einfügen selektiert sein wo das Objekt eingefügt werden soll (bei dir die Skizze). Anbei ein Beispiel (1. Skizze im MainBody ist geöffnet beim Programmstart) Code: Sub CATMain() Dim PartDocument As Document Dim DrawingDocument As Document Dim PartSelection As Selection Dim DrwSelection As Selection Dim oPart As Part Dim MainBody As Body Dim Skizze As Sketch'Start Set PartDocument = CATIA.ActiveDocument 'dfx öffnen und kopieren Set DrawingDocument = CATIA.Documents.Open("D:\test.dxf") Set DrawingDocument = CATIA.ActiveDocument Set DrwSelection = DrawingDocument.Selection DrwSelection.Clear DrwSelection.Search "CATDrwSearch.2DGeometry,all" DrwSelection.Copy 'Zum Part wechseln und erste Skizze im Mainbody selektiern (Skizze muss geöffnet sein) PartDocument.Activate Set PartSelection = PartDocument.Selection PartSelection.Clear Set oPart = PartDocument.Part Set MainBody = oPart.MainBody Set Skizze = MainBody.Sketches.Item(1) PartSelection.Add Skizze 'Geometrie einfügen PartSelection.Paste End Sub
Gruß Bernd Edit: Diese Beispiel funktioniert nur wenn das Part im eigenen Fenster geöffnet ist. ------------------ Warum einfach, wenn es auch kompliziert geht.
[Diese Nachricht wurde von bgrittmann am 20. Feb. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 20. Feb. 2011 14:15 <-- editieren / zitieren --> Unities abgeben: Nur für mycon
Also, "mein Code" funktioniert, wenn du aktiv in einem Part deiner Baugruppe, aber nicht im Sketcher des Parts aktiv bist. Das wäre der erste Schritt um festzustellen,dass du in einem bestimmten Part bist. Dann kannst du ja, wie du schon vorher mal geschrieben hast, die Skizze aufsuchen und deine Aktionen durchführen. Die Partnumber bzw. das Dokument hast du vorher mit "meinem" Code ermitteln können. ------------------ Grüße aus dem Thurgau Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mycon Mitglied
Beiträge: 58 Registriert: 14.02.2011 Catia V5R19
|
erstellt am: 20. Feb. 2011 14:33 <-- editieren / zitieren --> Unities abgeben:
Das Problem ist nur das es sowohl im Produkt, als auch im Part funktionieren soll. In beiden Fällen wird das Makro direkt von einer Skizze herraus gestartet. Und in eben diese aktive Skizze soll der Inhalt der .dxf eingefügt werden. Wie gesagt, ist das Part in einem extra Fenster geöffnet, und ich starte mein Makro, was u.a. Part1.Part.InWorkObject nutzt um die Skizze zu finden, funktioniert das einwandfrei. Allerdings such ich einen Weg das entweder ohne dieses Object zu machen, da das ja in einem Produkt nicht funktioniert, oder aus der Skizze direkt herrauszufinden welches Part die "Mutter" dieser Skizze ist. Die Skizze wiederum ist nicht immer an gleicher Position. Sie kann, muss aber nicht zwingend im Mainbody sein. @tberger: Dein Code wäre spitze, wenn das auch in einer Skizze funktionieren würde. Was ich nicht ganz verstehe ist warum das mit der SendKeys Methode nicht funktioniert. Hier sollte es doch eigentlich egal sein was gerade im Script abläuft. Ich habe etwas in der Zwischenablage, und es ist eine Skizze das aktive Fenster. Da sollte doch logisch gesehen eigl. nichts schief gehen können? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 21. Feb. 2011 07:17 <-- editieren / zitieren --> Unities abgeben: Nur für mycon
Um bei einer aktiven Skizze die Daten zu bekommen, musst du nur die Suche anpassen und die "Parents" bis nach oben verfolgen: Sub CATMain() Dim productDocument1 As ProductDocument Set productDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = productDocument1.Selection selection1.Search "CATSketchSearch.2DAxis_Origin,in" Dim selpoint As Point2D Set selpoint = selection1.Item(1).Value Dim ActiveSketchName As String ActiveSketchName = selpoint.Parent.Parent.Parent.Name Dim ActiveDocPartNumber As String ActiveDocPartNumber = selpoint.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Name Dim ActiveDocName As String ActiveDocName = selpoint.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Name MsgBox "Dokumentenname: " & ActiveDocName & vbLf & "Partnumber: " & ActiveDocPartNumber & vbLf & "Skizzenname: " & ActiveSketchName End Sub ------------------ Grüße aus dem Thurgau Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mycon Mitglied
Beiträge: 58 Registriert: 14.02.2011 Catia V5R19
|
erstellt am: 21. Feb. 2011 22:26 <-- editieren / zitieren --> Unities abgeben:
|