Autor
|
Thema: SelectElement2 product auswählen (1024 mal gelesen)
|
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 23. Jan. 2019 11:44 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte mit SelectElement2 in einer Baugruppe ein Product auswählen. Wichtig dabei ist, dass man nur ein Product auswählen kann, da nach der Auswahl Parts eingefügt werden sollen. Ich habe den filter auf "Product" gesetzt. Leider ist es trotzdem möglich Parts auszuwählen. Gibt es eine Möglichkeit das zu unterbinden? Alternativ wollte ich mittels FullName den Dateiname herausfinden und prüfen, ob es sich um ein Part oder Product handelt. Das funktioniert jedoch nicht, da ich immer nur als Name "Product22" angezeigt bekomme. Habt Ihr ideen? 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: 23. Jan. 2019 12:28 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Alle Instanzen in einer Baugruppe, egal ob CATPart oder CATProduct, sind Products. Du könntest ein Product selektieren lassen und dann das Dokument des selektierten Elements auswerten: Code: Set oSelectedProduct = oSel.Item2(1).Value if TypeName(oSelectedProduct.ReferenceProduct.Parent) <> "ProductDocument" then MsgBox "Ups keine Baugruppe gewählt" end if
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 23. Jan. 2019 13:37 <-- editieren / zitieren --> Unities abgeben:
|
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 24. Jan. 2019 10:45 <-- editieren / zitieren --> Unities abgeben:
Servus, hast du noch eine Idee, wie ich das selectierte Product deklarieren kann, damit ich Teile in das selectierte Product einfügen kann? Das ganze sollte unabhängig davon sein, die wie vielte Unterbaugruppe das ist. 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: 24. Jan. 2019 11:40 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Wie fügst du denn da Teile ein? Warum nicht als Product deklarieren? Code: oSelectedProduct.Products.AddComponentsFromFiles ArrayOfFiles, "CATPart"
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 24. Jan. 2019 11:56 <-- editieren / zitieren --> Unities abgeben:
Servus, aktuell werden die Teile so eingefügt: Code: Dim arrayOfVariantOfBSTR1(0) arrayOfVariantOfBSTR1(0) = Teileort & ".CATPart" Set products1Variant = products1 products1Variant.AddComponentsFromFiles arrayOfVariantOfBSTR1, "All"Dim constraints1 As Constraints Set constraints1 = product1.Connections("CATIAConstraints") Dim reference1 As Reference Set reference1 = product1.CreateReferenceFromName(Bezeichnung & "/" & Teileart & ".1/!" & Bezeichnung & Teileart & ".1/") Dim constraint1 As Constraint Set constraint1 = constraints1.AddMonoEltCst(catCstTypeReference, reference1)
selection1.Clear selection1.Add constraint1 visPropertySet1.SetShow 1 selection1.Clear
Die Strings werden durch ein vorhergenehdes Fenster befüllt, da unterschiedliche Teile eingefügt werden können.
Der String Bezeichnung kommt aus der Selection mittels: Code: Bezeichnung = USel.Item(1).Value.Name
Mit der Methode kann ich nur Teile in das ROOT-Product einfügen. 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: 24. Jan. 2019 12:12 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Was ist bei dir product1? In meinem Kurztest hat es so Code: Set product1 = oSelectedProduct.ReferenceProduct
besser geklappt. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 24. Jan. 2019 12:53 <-- editieren / zitieren --> Unities abgeben:
Mein "Testsub" würde jetzt so aussehen: Code: Sub CATMain()Dim UselLB Dim Usel As Object Dim InputObject(0) As Variant Dim oStatus InputObject(0) = "Product" Set Usel = CATIA.ActiveDocument.Selection Usel.Clear Set UselLB = Usel oStatus = UselLB.SelectElement2(InputObject, "Baugruppe auswählen!", True) If (oStatus = "Cancel") Then Exit Sub End If Set oStatus = UselLB.Item2(1).Value If TypeName(oStatus.ReferenceProduct.Parent) <> "ProductDocument" Then Status = MsgBox("Parts sind nicht zulässig!" & vbLf & _ "Bitte wählen Sie eine Baugruppe aus!", vbOKOnly + vbCritical, "Fehler!") Exit Sub End If Dim productDocument1 As ProductDocument Set productDocument1 = CATIA.ActiveDocument
Dim product1 As Product Set product1 = productDocument1.Product Dim products1 As Products Set products1 = product1.Products Dim product2 As Product Set product2 = products1.Item("Baugruppe1.1") Dim products2 As Products Set products2 = product2.Products
Dim arrayOfVariantOfBSTR1(0) arrayOfVariantOfBSTR1(0) = "C:\Temp\Einzelteil.CATPart" Set products2Variant = products2 products2Variant.AddComponentsFromFiles arrayOfVariantOfBSTR1, "All" End Sub
Wobei meine Struktur so aussieht: Hauptproduct --Baugruppe1 Ich kann Dir nicht ganz folgen, wie ich die selection mit einbaue.
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: 24. Jan. 2019 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Willst du nicht die Selektion auch verwenden? zB:
Code: Set product2 = UselLB.Item2(1).Value.ReferenceProduct 'Name des Objekts etwas ungeschickt/nicht aussagekräftig
ggf Inputobject auf Product einschränken. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 24. Jan. 2019 13:37 <-- editieren / zitieren --> Unities abgeben:
Danke, das war genau das was mir gefehlt hat. Es kann so einfach sein Jetz fehlt nur noch die Fixierung des eingefügten Parts. Dabei bekomme ich ein click ok to Terminate: Code: Dim Bezeichnung As String Bezeichnung = product2.Name Dim constraints1 As Constraints Set constraints1 = product1.Connections("CATIAConstraints")
Dim reference1 As Reference Set reference1 = product2.CreateReferenceFromName(Bezeichnung & "/" & "Bauteil1.1/!" & Bezeichnung & "/Bauteil1.1/") Dim constraint1 As Constraint Set constraint1 = constraints1.AddMonoEltCst(catCstTypeReference, reference1)
Wie meinst du das mit Name des Objekts ungeschickt? 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: 24. Jan. 2019 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Wo willst du denn die Bedingungen erzeugen? Wäre nicht Code: Set constraints1 = product2.Connections("CATIAConstraints")
besser? Benennungen wie product1, product2 und Bezeichnung sind nicht aussagekräftig. Stimmt der Pfad für die Reference? Wäre es nicht besser den Instanznamen (zB für Bauteil1.1) auszulesen und für den Pfad zu nutzen? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Suchtiii94 Mitglied Konstrukteur
Beiträge: 44 Registriert: 23.10.2017 Catia V5 R28 SP3
|
erstellt am: 25. Jan. 2019 09:45 <-- editieren / zitieren --> Unities abgeben:
Danke, da hast du recht war ein Tippfehler von mir. Jetzt fehlt mir nur noch das Speichern des product2. Wie kann ich das machen, da ich ja normal nur productDocument2.Save ausführen kann, in diesem Fall aber ein product habe? Ich habe es jetzt über CATIA.ActiveDocument.Product.Update CATIA.ActiveDocument.Save gelöst. Danke für alles [Diese Nachricht wurde von Suchtiii94 am 25. Jan. 2019 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: 25. Jan. 2019 10:12 <-- editieren / zitieren --> Unities abgeben: Nur für Suchtiii94
Servus Aber ActiveDocument ist nicht das selektierte sonder das aktuell im Fenster geöffnete. Das selektierte Product sollte so gehen. Code: product2.parent.Save 'zum jeweiligen Dokument hochgehen
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |