Autor
|
Thema: GeoSet eines Parts im Product kopieren (1092 mal gelesen)
|
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 22. Apr. 2016 15:39 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte folgendes machen in vb.NET: -in einem Product habe ich x Parts -in einem Part mit dem Namen (keine Ahnung)befindet sich ein GeoSet mit dem Namen ("TOLL") - dieses Geoset möchte ich innerhalb des Parts in dem es sich befindet, kopieren und nochmal einfügen Mein Code: Dim Sel = myProductDoc.Selection Sel.Clear() Dim Docs As MECMOD.PartDocument Docs = Sel.Item("keine Ahnung") myModell = Sel.Part myGeoSet = myAdaptermodell.HybridBodies myGeoSet1 = myGeoSet.Item("TOLL") Sel.Add(myGeoSet1) myGeoSet2 = myGeoSet1.Item("TOLL") myAdaptermodell.UpdateObject(myGeoSet2)
Ich bekomme eine Fehlermeldung in der Zeile: Docs = Sel.Item("keine Ahnung") mit der Begründung: Item is not Memeber of Product. Ich habe aber beim Coding die Möglichkeit Product.Item zu wählen. Grüße
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: 22. Apr. 2016 16:07 <-- editieren / zitieren --> Unities abgeben: Nur für Tweety79
Servus Beim ansprechen der Einzelteile in einer Baugruppe musst du den Exemplarnamen verwenden (zB "Keine Ahnung.1"). Oder dann gleich auf das PartDokument zugreifen. zB (Code in VBA (einfach so runter geschrieben)): Code: sub CatMain()dim myPartDocument as PartDocument dim oSel as Selection dim myPart as Part dim myHybridBody as HybridBody Set myPartDocument = catia.documents.item("Keine Ahnung.CATPart") Set myPart = myPartDocument.Part Set oSel = myPartDocument.Selection Set myHybridBody = myPart.HybridBodies.Item("Toll") osel.clear osel.add myHybridBody osel.copy osel.clear osel.add myPart osel.Paste end sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 25. Apr. 2016 10:23 <-- editieren / zitieren --> Unities abgeben:
Hi Bernd, für vb.NET musste ich das ein wenig anpassen ( set ... entfällt ). Dim myPartDocument As MECMOD.PartDocument Dim oSel As INFITF.Selection Dim myPart As MECMOD.Part Dim myHybridBody As MECMOD.HybridBodies myPartDocument = myCatiaApp.Documents.Item("Name = Keine Ahnung, all") myPart = myPartDocument.Part oSel = myPartDocument.Selection myHybridBody = myPart.HybridBodies.Item("TOLL") oSel.Clear oSel.Add(myHybridBody) oSel.copy oSel.Clear oSel.Add(myPart) oSel.Paste() Ich bleibe immer noch hängen an Zeile: myPartDocument = myCatiaApp.Documents.Item("Name = Keine Ahnung, all") Vielleich muss vor dem Zugriff auf das geoSet so was in der Art kommen? myCatiaApp.ActiveDocument.Selection.Item(1).Value.ReferenceProduct.Parent Gruß 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. Apr. 2016 10:27 <-- editieren / zitieren --> Unities abgeben: Nur für Tweety79
Servus Entweder du Suchst in deinem Rootproduct nach dem entsprechenden Part/Documente (osel.Search ...) (dies lässt sich sicher mit dem Makrorekoder (in VBA) aufnehemn und dann entsprechend für .NET ändern) oder du greift (wie in meinem Code) direkt mit dem Dateinamen auf das Dokument zu. Der Suchstring "("Name = Keine Ahnung, all")" geht nur bei einer Selektion bei der Methode "Search". Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 25. Apr. 2016 11:45 <-- editieren / zitieren --> Unities abgeben:
Servus, danke an alle. Anbei Lösung für vb.NET, für alle, die das gleiche Problem haben Dim myProductDoc As ProductStructureTypeLib.ProductDocument myProductDoc = CatiaApplication.ActiveDocument myProductDoc.Selection.Search("Name='Keine ahnung',all") '"Keine ahnung" ist der Name des GeoSets eines Parts im Product myProductDoc.Selection.Copy() myProductDoc.Selection.Paste() Gruß 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. Apr. 2016 11:52 <-- editieren / zitieren --> Unities abgeben: Nur für Tweety79
Servus Nur so mal als Hinweis: Und was wird dabei kopiert? Was ist wenn mehrerer Objekte (ggf in verschiedenen Parts) 'keine Ahnung' heißen? Wo wird das kopierte Objekt eingefügt? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 26. Apr. 2016 12:49 <-- editieren / zitieren --> Unities abgeben:
Hi Bernd, du hast schon recht mit dem, wenn mehreres gleich heisst, was denn nun kopiert wird. Das habe ich in mienem Beispiel zum Glück nicht. Zwischen Copy und Paste kommt noch: myProductDoc.Selection.Search("Name=Keine ahnung',all") Dann wird das GeoSet auf die gleiche Stufe im Baum kopiert. Was mir hier aber fehlt ist: Das Geoset soll nicht 1x eingefügt werden sondern so oft wie es Parts in dem Product gibt. Weißt du wie ich das schreibe? Ich habe angefangen mit: For i = 1 To myProductDoc.Product.Products.Count Next So bekomme ich die anzahl der Parts. Nur wie binde ich diese Anzahl in das Paste () mit ein? Danke dir. 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: 26. Apr. 2016 13:29 <-- editieren / zitieren --> Unities abgeben: Nur für Tweety79
Servus Wie würdest du dies manuell machen? Ziel selektieren und einfügen. zB: Code: myProductDoc.Selection.Search("Name=Keine ahnung',all") 'GeoSet in Variable schreiben MyGeoSet = myProductDoc.Selection.item2(1).ValuemyProductDoc.Selection.Copy() For i = 1 To myProductDoc.Product.Products.Count 'Ziel GeoSet selekieren und Einfügen myProductDoc.Selection.Clear() myProductDoc.Selection.Add (MyGeoSet) myProductDoc.Selection.Paste() Next
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tweety79 Mitglied Entwicklung Automotive
Beiträge: 269 Registriert: 09.12.2007 WPF, VBA, CATScript, Access
|
erstellt am: 26. Apr. 2016 13:43 <-- editieren / zitieren --> Unities abgeben:
Hi Bernd, ich fange gerade von Null an, deshlab ist nicht sofort alles für mich ersichtlich. ich teste gleich, was deine Zeilen machen. Selbst habe ich inzwischen so was gemacht, s. unten. Das kopiert das Set aber nur einmal und kommt nie zum Ende :-S. Function CopySet() As ProductStructureTypeLib.Product Dim myCatiaApp As INFITF.Application Dim myProduct As ProductStructureTypeLib.Product Dim myProductDoc As ProductStructureTypeLib.ProductDocument Dim myCount As Integer myCatiaApp = GetObject("", "CATIA.Application") myProductDoc = myCatiaApp.ActiveDocument myProduct = myProductDoc.Product myCount = myProductDoc.Product.Products.Count() myProductDoc.Selection.Search("Name=Keine ahnung',all") myProductDoc.Selection.Copy() myProductDoc.Selection.Search("Name='TOLL',all") myProductDoc.Selection.Paste() Do Until myProductDoc.Product.Products.Count() = myCount Loop
myProduct = myProductDoc.Product Return myProduct End Function Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |