| |
| KISTERS 3DViewStation: 3D-Heatmaps für aussagekräftige Machbarkeitsanalysen, eine Pressemitteilung
|
Autor
|
Thema: Makro Producte ein - ausblenden Schleife (3468 mal gelesen)
|
ks-reichle Mitglied Konstrukteur
Beiträge: 33 Registriert: 06.03.2009 Catia V5-6 Release 2014 Servicepack 4 Build Number 24 Hotfix 33 Dell Precision M6800
|
erstellt am: 06. Mrz. 2009 21:55 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, Ich bin neu in der Makroprogrammierung Ich habe iene Produktstuktur: ZSB Product --> Unterbaugruppe1 Produkt--> Part/Unterbaugruppen --> Unterbaugruppe2 Produkt--> Part/Unterbaugruppen --> Unterbaugruppe3 Produkt--> Part/Unterbaugruppen Ich möchte zur Erstellung von Allcatparts (Je Unterbaugruppe (1-3))in FZO(ZSB) die Unterbaugruppen 1 - 3 ausblenden, und abwechselnd über eine Schleife wieder einblenden. Ich bin biher soweit, das die Schleife die Produktnahmen erkennt, jedoch immer nur das erste Product ausblendet. Kann mir da bitte jemand weiterhelfen, oder hat jemand bereits eine Lösung hierfür ? Grüße Klaus Anbei mein Versuch Language="VBSCRIPT" Sub CATMain() On Error Resume Next 'Produkte suchen____________________________ Set productDocument1 = CATIA.ActiveDocument Set product1 = productDocument1.Product Set products1 = product1.Products Set myproduct2 = productDocument1.Selection Set selection2 = productDocument1.Selection myproduct2.Search "'Assembly Design'.Product, in" 'Schleife je gefundenes Produkt_________________________________ For i = 2 To myproduct2.Count Set currentprod = myproduct2.Item(i) CURRPRODUCTNAME = currentprod.Value.Name Msgbox " " & CURRPRODUCTNAME & " Das ist die Ausgabe " Set selection2 = CATIA.ActiveDocument.Selection selection2.Search "Name='"& CURRPRODUCTNAME &"',all" Set visPropertySet1 = selection2.VisProperties visPropertySet1.SetShow 0 selection2.Clear next End Sub ------------------ Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 07. Mrz. 2009 09:37 <-- editieren / zitieren --> Unities abgeben: Nur für ks-reichle
Hallo, zeichne im Makrorekorder auf, wie du eine Fix-Bedingung auf eine Instanz definierst. In dem Skript ist die Lösung da, wie einzelne Instanzen referenziert werden können. (CreateReferenceByName mit der richtigen Pfad zur Instanz) Diese Referenz sollst du dann in eine Selection dazunehmen (Selection.Add). Den Rest hast du bereits. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ks-reichle Mitglied Konstrukteur
Beiträge: 33 Registriert: 06.03.2009 Catia V5-6 Release 2014 Servicepack 4 Build Number 24 Hotfix 33 Dell Precision M6800
|
erstellt am: 07. Mrz. 2009 17:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan. Danke für deine schnelle Antwort, Ich hab das Makro aufgezeichnet, jedoch hab ich noch nicht herrausgefunden , wie ich meine Variablen einfüge. Wenn ich die Zeile Fertig einsetzte blendet es mir die entsprechende Unterbaugruppe mit aus, jedoch die Schleife funktioniert nicht (Bei der Namensabfrage wird immer nur die erste Unterbaugruppe ausgegeben). Ich möchte auch zuerst alle Unterbaugruppen ausblenden, dann die 1. BG einblenden, Allcatpart erzeugen ,1. BG ausblenden, 2. BG einblenden, Allcatpart erzeugen ..... Wie bereits gesagt, ich bin noch Anfänger. Könntest du (oder sonst wer )mir hierzu etwas konkreter helfen ? Danke Klaus ------------------ Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Mrz. 2009 18:02 <-- editieren / zitieren --> Unities abgeben: Nur für ks-reichle
Servus Anbei ein Beispiel, bei dem erst alle Teile ausgeblendet werden, dann einzeln eingeblendet und zum Schluss alle Code: Sub CATMain() Set oRoot = Catia.ActiveDocument Set oProducts = oRoot.Product.Products Set selection2 = oRoot.Selection 'Alle ausblenden For i = 1 to oProducts.Count selection2.add (oProducts.Item(i)) selection2.VisProperties.SetShow catVisPropertyNoShowAttr selection2.Clear Next 'einzeln einblenden For i = 1 to oProducts.Count selection2.add (oProducts.Item(i)) selection2.VisProperties.SetShow catVisPropertyShowAttr 'hier Product_to_Part einfügen selection2.VisProperties.SetShow catVisPropertyNoShowAttr selection2.Clear Next 'alles einblenden For i = 1 to oProducts.Count selection2.add (oProducts.Item(i)) selection2.VisProperties.SetShow catVisPropertyShowAttr selection2.Clear Next End Sub
Ist zwar nicht schön, und auch nicht schnell aber schein zu funktionieren (ist ein CATScript)Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ks-reichle Mitglied Konstrukteur
Beiträge: 33 Registriert: 06.03.2009 Catia V5-6 Release 2014 Servicepack 4 Build Number 24 Hotfix 33 Dell Precision M6800
|
erstellt am: 08. Mrz. 2009 14:43 <-- editieren / zitieren --> Unities abgeben:
|
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 08. Mrz. 2009 16:32 <-- editieren / zitieren --> Unities abgeben: Nur für ks-reichle
Hallo Zusammen, Die Version von Bernd funktioniert in der ersten Ebene einwandfrei. Ab der zweiten Ebene würde es aber nicht gehen, z.B. bei dieser Struktur: +Root +Product A +Part A +Part A +Part B +Product A +Part A +Part A +Part B Folgender Kode, richtig ergänzt, würde es auch in diesen Fall die richtige Instanzen ein/ausblenden: Ist praktisch der Kode von Bernd nach VBA übernommen und mit der Pfaderzeugung ergänzt.
Code: Option ExplicitSub CATMain() Dim oRoot As Document If CATIA.Documents.Count = 0 Then MsgBox ("Kein Dokument geöffnet!") Exit Sub End If Set oRoot = CATIA.ActiveDocument If TypeName(oRoot) <> "ProductDocument" Then MsgBox ("Kein Product geladen!") Exit Sub End If Dim oProducts As Products Set oProducts = oRoot.Product.Products Dim selection2 As Selection Set selection2 = oRoot.Selection Dim i As Integer Dim oRootProduct As Product Set oRootProduct = oRoot.Product Dim sRootName As String sRootName = oRootProduct.Name Dim oRef As Reference Dim oProduct As Product 'Alle ausblenden For i = 1 To oProducts.Count 'Referenz auf ein ProductInstanz im Baum erzeugen Set oProduct = oProducts.Item(i) Set oRef = ReferenceToProductInstance(oRootProduct, oProduct, sRootName) selection2.Add oRef 'selection2.Add (oProducts.Item(i)) 'diese Zeile durch obere 3 ersetzen selection2.VisProperties.SetShow catVisPropertyNoShowAttr selection2.Clear Next 'einzeln einblenden For i = 1 To oProducts.Count 'Referenz auf ein ProductInstanz im Baum erzeugen Set oProduct = oProducts.Item(i) Set oRef = ReferenceToProductInstance(oRootProduct, oProduct, sRootName) selection2.Add oRef 'selection2.Add (oProducts.Item(i)) 'diese Zeile durch obere 3 ersetzen selection2.VisProperties.SetShow catVisPropertyShowAttr 'hier Product_to_Part einfügen MsgBox ("") selection2.VisProperties.SetShow catVisPropertyNoShowAttr selection2.Clear Next 'alles einblenden For i = 1 To oProducts.Count 'Referenz auf ein ProductInstanz im Baum erzeugen Set oProduct = oProducts.Item(i) Set oRef = ReferenceToProductInstance(oRootProduct, oProduct, sRootName) selection2.Add oRef 'selection2.Add (oProducts.Item(i)) 'diese Zeile durch obere 3 ersetzen selection2.VisProperties.SetShow catVisPropertyShowAttr selection2.Clear Next End Sub Function ReferenceToProductInstance(RootProduct As Product, _ ProductInstance As Product, _ PathToProduct As String) As Reference Dim sProdName As String Dim sPath As String 'InstanceName auslesen sProdName = ProductInstance.Name 'So kann man den Pfad von Root aus auf einen Instanz zusammensetzen 'für die zweite/dritte/n-te Ebene musste diese Pfad rekursiv zusammengesetzt werden sPath = PathToProduct & "/" & sProdName & "/!" & PathToProduct & "/" & sProdName & "/" Set ReferenceToProductInstance = RootProduct.CreateReferenceFromName(sPath) End Function
Gruß, ZoltanEine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Mrz. 2009 16:56 <-- editieren / zitieren --> Unities abgeben: Nur für ks-reichle
|
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 08. Mrz. 2009 17:34 <-- editieren / zitieren --> Unities abgeben: Nur für ks-reichle
|
ks-reichle Mitglied Konstrukteur
Beiträge: 33 Registriert: 06.03.2009 Catia V5-6 Release 2014 Servicepack 4 Build Number 24 Hotfix 33 Dell Precision M6800
|
erstellt am: 09. Mrz. 2009 09:01 <-- editieren / zitieren --> Unities abgeben:
|
cmb Mitglied Systembetreuer
Beiträge: 500 Registriert: 12.07.2002 CATIA V5-6R2016 64bit Smarteam R22.6 Moldflow Adviser 2014 Lenovo Think Pad P90
|
erstellt am: 28. Jan. 2010 13:38 <-- editieren / zitieren --> Unities abgeben: Nur für ks-reichle
Zitat:
'für die zweite/dritte/n-te Ebene musste diese Pfad rekursiv zusammengesetzt werden sPath = PathToProduct & "/" & sProdName & "/!" & PathToProduct & "/" & sProdName & "/" Set ReferenceToProductInstance = RootProduct.CreateReferenceFromName(sPath) End Function [/code]Gruß, Zoltan[/B]
Hallo Zoltan, ich habe mir Deinen Code mal angesehen, verstehe aber den sPath Befehl nicht. Hättest du ein abstraktes Beispiel dazu? Gruß
Norbert ------------------ V5R18 Catia + Smarteam Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 28. Jan. 2010 20:13 <-- editieren / zitieren --> Unities abgeben: Nur für ks-reichle
Hallo Norbert, die Zeile zeigt einfach, wie man ein Referenz auf ein Product-Instanz im CATIA-Baum erzeugen kann. Vom vorigen Beitrag, etwas ergänzt: +Root +Product A.1 +Part A.1 +Part A.2 +Part B.1 +Product A.2 +Part A.1 +Part A.2 <- Du willst dieser selektieren +Part B.1 Um den markierten Part (Product) zu selektieren muss sPath (eine einfache Variable, kein Befehl) folgender Wert haben: Root/Product A.2/Part A.2/!Root/Product A.2/Part A.2 Vom Root muss immer der PartNumber drin sein, von den weiteren die Instanzname. Vor dem "/!" steht der selbe Text, wie hinter. Versuche mal mit dem Makrorekorder einige Constraints zu setzen, dann wird es klarer. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |