| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | Mit der Kisters 3DViewStation komplexeste 3D CAD-Daten beherrschen, eine Pressemitteilung
|
Autor
|
Thema: Part im Product aktiv setzen und Makro ausführen (3034 mal gelesen)
|
MrLimes Mitglied Technischer Sachbearbeiter

 Beiträge: 14 Registriert: 15.09.2009 Visual Studio 2013 + Devexpress v16.2.5 CATIA V5-6 R24, SP4 HF 33
|
erstellt am: 19. Aug. 2010 12:19 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich häng seit ein paar Tagen etwas fest. Ich hab ein Makro gebastelt, welches mir auf allen Linien - Ebenen und Punkte erstellt. Das Makro funktioniert schon fehlerfrei in einem Part. Jetz wollte ich das Makro umschreiben, damit es sich alle Linien aus einem Product sucht und bearbeitet. Ich hab die folgenden Möglichkeiten probiert. 1. Die Suche auf ein Product umgeschrieben:
Code: Dim productDocument1 As ProductDocument Set productDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = productDocument1.Selection
Hierbei kommt es aber weiter unten zu einem Fehler: Set reference1 = document1.part.CreateReferenceFromObject(selection1.Item(j).Value)2. Mit dem MakroRecorder hab ichs auch schon versucht. Die interessanten Dinge läßt er unter den Tisch fallen. 3. Rekursive-Suche inkl. Part/Product-Prüfung hab ich auch schon versucht...aber da komm ich nicht drauf - wie ich das part aktiv setze. Da motzt er auch rum. Ok würd mich freuen wenn mir jemand einen Tip geben könnte...vielen Dank Hier noch der Code von dem eigentlichen Makro:
Code:
Sub CATMain()Dim document1 As Document Dim Status, oSelection, oSelectedElement, oDoc, oInstance, oRef, TheSPAWorkbench, TheMeasurable As Object Dim InputObjectType(0) Dim bType As Boolean Dim dLength As Double Set document1 = CATIA.ActiveDocument InputObjectType(0) = "HybridShape" If TypeName(CATIA.ActiveDocument) = "ProductDocument" Then bType = 0 ElseIf TypeName(CATIA.ActiveDocument) = "PartDocument" Then bType = 1 Else MsgBox "The Root is not a CATPart or a CATProduct ! ", 48, "Wrong FileType of opend Document" Exit Sub End If Set oSelection = CATIA.ActiveDocument.Selection oSelection.Clear Dim AnzahlSelection As Long Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = partDocument1.Selection selection1.Search "Name=*Line_*,all" AnzahlSelection = selection1.Count Dim j As Long For j = 1 To AnzahlSelection Dim reference1 As Reference Set reference1 = document1.part.CreateReferenceFromObject(selection1.Item(j).Value) Dim hybridShapeFactory1 As HybridShapeFactory Dim hybridShapePointOnCurve1 As HybridShapePointOnCurve Set hybridShapeFactory1 = document1.part.HybridShapeFactory Set hybridShapePointOnCurve1 = hybridShapeFactory1.AddNewPointOnCurveFromPercent(reference1, 0, False) Dim hybridBodies1 As HybridBodies Set hybridBodies1 = document1.part.HybridBodies Dim hybridBody1 As HybridBody Set hybridBody1 = hybridBodies1.Add() hybridBody1.AppendHybridShape hybridShapePointOnCurve1 hybridBody1.Name = "Punkt" & j ...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Ehrenmitglied V.I.P. h.c. 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: 19. Aug. 2010 12:58 <-- editieren / zitieren --> Unities abgeben:          Nur für MrLimes
Hallo, ich habe das immer folgender Maßen gelöst... z.B.
Code:
Dim TmpNode as Product Dim MainPRD as Product Dim TmpPartDoc as PartDocument Dim TmpPart as Part Dim ActiveWindow as ProductDocument Dim TmpSelection as Selectionset ActiveWindow = CATIA.ActiveDocument set MainPRD = ActiveWindow.Product For Each TmpNode In MainPRD.Products set TmpPartDoc = tmpnode.ReferenceProduct.Parent Set TmpPart = TmpPartDoc.Part TmpSelection.Add TmpPart CATIA.StartWorkbench ("Part Design") ... Code ... TmpSelection.Clear TmpSelection.Add MainPrd CATIA.StartWorkbench ("Assembly Design") next
Zur Info... Das habe ich jetzt schnell runter getippt. Es kann daher sein, dass noch etwas fehlt oder ich einen Tippfehler drin habe. Hab es aber überflogen und es sollte so passen. [Edit] Natürlich habe ich direkt nach dem posten einen Schreibfehler entdeckt [/Edit] ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities
[Diese Nachricht wurde von RSchulz am 19. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Ehrenmitglied V.I.P. h.c. Manager
     
 Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 19. Aug. 2010 13:20 <-- editieren / zitieren --> Unities abgeben:          Nur für MrLimes
Hallo, diese Zeile Code: Set reference1 = document1.part.CreateReferenceFromObject(selection1.Item(j).Value)
kann nur ein Fehler auslösen. Für den Fall das dein Root Dokument (also das Active Dokument) ein Produkt ist, gibt es in diesem keine Eigenschaft "Part". Du musst dich über die Selektion und dessen Eltern (.Parent) zu deinem Part Dokument durchhangeln. Hier mal ein kleines Beispiel. Code: Sub CATMain() Dim intDocObj As Document Dim intPartObj As Part Dim intSelObj As Selection Dim bType As Boolean Dim intLineObj As Object Dim i As Integer Dim intObjRef As Reference Dim hybridShapeFactory1 As HybridShapeFactory Dim hybridShapePointOnCurve1 As HybridShapePointOnCurve Dim hybridBodies1 As HybridBodies Dim hybridBody1 As HybridBody Set intDocObj = CATIA.ActiveDocument If TypeName(intDocObj) = "ProductDocument" Then bType = 0 ElseIf TypeName(intDocObj) = "PartDocument" Then bType = 1 Else MsgBox "The Root is not a CATPart or a CATProduct ! ", 48, "Wrong FileType of opend Document" Exit Sub End If Set intSelObj = intDocObj.Selection intSelObj.Clear intSelObj.Search "CATPrtSearch.Line,all" If intSelObj.Count = 0 Then MsgBox "No lines found in Document", vbExclamation, "CANCEL" Exit Sub End If For i = 1 To intSelObj.Count Set intLineObj = intSelObj.Item(i).Value 'HIER WIRD DAS PART-OBJEKT VOM SELEKTIERTEN OBJEKT GEHOLT. 'DAMIT BIST DU UNABHÄNGIG VON ROOT-DOCUMENT TYP Set intPartObj = intLineObj.Parent.Parent.Parent.Parent Set intObjRef = intPartObj.CreateReferenceFromObject(intLineObj) Set hybridShapeFactory1 = intPartObj.HybridShapeFactory Set hybridShapePointOnCurve1 = hybridShapeFactory1.AddNewPointOnCurveFromPercent(intObjRef, 0.5, False) Set hybridBodies1 = intPartObj.HybridBodies Set hybridBody1 = hybridBodies1.Add() hybridBody1.AppendHybridShape hybridShapePointOnCurve1 hybridBody1.Name = "Punkt" & i intPartObj.Update Next End Sub
------------------ MFG Daniel Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MrLimes Mitglied Technischer Sachbearbeiter

 Beiträge: 14 Registriert: 15.09.2009 Visual Studio 2013 + Devexpress v16.2.5 CATIA V5-6 R24, SP4 HF 33
|
erstellt am: 19. Aug. 2010 16:45 <-- editieren / zitieren --> Unities abgeben:         
Hi ihr beiden - vielen Dank...ich glaub hiermit is meine Wochenendbeschäftigung auch klar. @RSchulz: Irgendwie bekomm ich da immer die Meldung "Typ missmatch" in der folgenden Zeile:
Code: Set TmpPartDoc = TmpNode.ReferenceProduct.Parent
hier mal der Teil...mit Erweiterung...
Code: For Each TmpNode In MainPRD.Products Set TmpPartDoc = TmpNode.ReferenceProduct.Parent Set TmpPart = TmpPartDoc.part Set TmpSelection = CATIA.ActiveDocument.Selection 'die Zeile hab ich noch hinzugefügt...war ihm ohne net so recht... TmpSelection.Add TmpPart CATIA.StartWorkbench ("Part Design")
@DanielFr. Hi Daniel...also bei deinem Teil bekomm ich die gleiche Meldung "Type missmatch"
Code: Set intPartObj = intLineObj.Parent.Parent.Parent.Parent
hier mal die angezeigten Typen:intPartObj --> Part intLineObj --> Object/HybridShapeInstance Dieses Parent.Parent.Parent. usw ergibt bei mir immer die gleiche Linie... Habs mal versucht über die Local-Anzeige zu verfolgen...aber ist wirklich immer die Linie selbst. intPartObj als Variant wird akzeptiert...aber dann spinnt er an der folgenden Stelle:
Code: Set intObjRef = intPartObj.CreateReferenceFromObject(intLineObj)
Meldung: "Object doesn`t support this property or method"Vielen Dank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Ehrenmitglied V.I.P. h.c. Manager
     
 Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 20. Aug. 2010 07:39 <-- editieren / zitieren --> Unities abgeben:          Nur für MrLimes
|
MrLimes Mitglied Technischer Sachbearbeiter

 Beiträge: 14 Registriert: 15.09.2009 Visual Studio 2013 + Devexpress v16.2.5 CATIA V5-6 R24, SP4 HF 33
|
erstellt am: 20. Aug. 2010 12:24 <-- editieren / zitieren --> Unities abgeben:         
Hi Daniel, hochladen kann ich leider nicht...da bekomm ich eins auf die Mütze. Aber ich hab selbst versucht euro Zeilen zu verstehen...
Code: Sub SelectionNames() Dim UserSelektion As SelectionSet UserSelektion = CATIA.ActiveDocument.Selection If UserSelektion.Count > 0 Then For I = 1 To UserSelektion.Count MsgBox (UserSelektion.Item(I).Value.Name) MsgBox (UserSelektion.Item(I).Value.Parent.Name) MsgBox (UserSelektion.Item(I).Value.Parent.Parent.Name) MsgBox (UserSelektion.Item(I).Value.Parent.Parent.Parent.Name) MsgBox (UserSelektion.Item(I).Document.FullName) MsgBox (UserSelektion.Item(I).Document.Name) MsgBox (UserSelektion.Item(I).Document.Path) Next End If UserSelektion.Clear End Sub
Deine Lösung hat somit funktioniert...aber sobald ich das Element aus dem Geo2.2 (siehe Abbildung) selektiere und das Makro laufen lasse wird mir nur "Line" ausgegeben. Die Line (Geo2.2) bezieht sich irgendwie auf die Linie (Geo2.1/Geometry) - gibts da vielleicht die Möglichkeit sich die Referenz ausgeben zu lassen? Im Geo2.2 sind Schweißnähte (Welding lines) abgelegt. Ich hoffe die Infos bringen etwas...wäre echt klasse wenn das irgendwie klappen würde. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DanielFr. Ehrenmitglied V.I.P. h.c. Manager
     
 Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 20. Aug. 2010 12:49 <-- editieren / zitieren --> Unities abgeben:          Nur für MrLimes
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |