Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Makro Producte ein - ausblenden Schleife

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Makro Producte ein - ausblenden Schleife (3420 mal gelesen)
ks-reichle
Mitglied
Konstrukteur


Sehen Sie sich das Profil von ks-reichle an!   Senden Sie eine Private Message an ks-reichle  Schreiben Sie einen Gästebucheintrag für ks-reichle

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von zoltan.bekesi an!   Senden Sie eine Private Message an zoltan.bekesi  Schreiben Sie einen Gästebucheintrag für zoltan.bekesi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ks-reichle 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ks-reichle an!   Senden Sie eine Private Message an ks-reichle  Schreiben Sie einen Gästebucheintrag für ks-reichle

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 07. Mrz. 2009 18:02    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ks-reichle 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von ks-reichle an!   Senden Sie eine Private Message an ks-reichle  Schreiben Sie einen Gästebucheintrag für ks-reichle

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Bernd,

klappt super, das ist genau das was ich gebraucht habe.

Danke für deine schnelle Hilfe

Klaus   

------------------
Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

zoltan.bekesi
Mitglied



Sehen Sie sich das Profil von zoltan.bekesi an!   Senden Sie eine Private Message an zoltan.bekesi  Schreiben Sie einen Gästebucheintrag für zoltan.bekesi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ks-reichle 10 Unities + Antwort hilfreich

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 Explicit

Sub 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ß,
Zoltan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 08. Mrz. 2009 16:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ks-reichle 10 Unities + Antwort hilfreich

Servus
@Zoltan: Ich dachte es wird nur das Ausblenden in der obersten Ebene gewünscht?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

zoltan.bekesi
Mitglied



Sehen Sie sich das Profil von zoltan.bekesi an!   Senden Sie eine Private Message an zoltan.bekesi  Schreiben Sie einen Gästebucheintrag für zoltan.bekesi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ks-reichle 10 Unities + Antwort hilfreich

Servus Bernd,

du hast völlig recht, aber vielleicht wird die andere Methode jemand später auch noch was bringen.
Deine Lösung ist für die erste Ebene auch völlig korrekt gewesen.

Gruß,
Zoltan

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ks-reichle
Mitglied
Konstrukteur


Sehen Sie sich das Profil von ks-reichle an!   Senden Sie eine Private Message an ks-reichle  Schreiben Sie einen Gästebucheintrag für ks-reichle

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi zusammen
Ich brauchte für meine Zwecke nur das ausblenden der ersten Ebene

Nochmals Danke

Klaus

------------------
Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cmb
Mitglied
Systembetreuer


Sehen Sie sich das Profil von cmb an!   Senden Sie eine Private Message an cmb  Schreiben Sie einen Gästebucheintrag für cmb

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ks-reichle 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von zoltan.bekesi an!   Senden Sie eine Private Message an zoltan.bekesi  Schreiben Sie einen Gästebucheintrag für zoltan.bekesi

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ks-reichle 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz