| |
| KISTERS 3DViewStation: Unterstützung für 3D CAD Kollaboration mit Lieferanten, eine Pressemitteilung
|
Autor
|
Thema: Inversion (935 mal gelesen)
|
BigCheese Mitglied Dipl-Ing
Beiträge: 130 Registriert: 12.05.2004 CATIA V5R19 SP3
|
erstellt am: 15. Okt. 2007 16:10 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich hätte gerne die Inversion einer Selektion, also wie mit dem Kommandozeilenbefehl "c:Inversion". Ich möchte aber auf CATIA.StartCommand("Inversion") nach Möglichkeit verzichten. Bin wie immer für jeden Tipp dankbar Gruß, Alex
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Mörchen Ehrenmitglied V.I.P. h.c. CAD-Trainerin (CATIA V5)
Beiträge: 3830 Registriert: 14.03.2007 Release 19 SP2
|
erstellt am: 15. Okt. 2007 16:21 <-- editieren / zitieren --> Unities abgeben: Nur für BigCheese
Hi Alex, wenn ich dich richtig verstanden habe, dann kriegst Du das im Produkt im Kontextmenü "Auswahlmodus"... SORY!!!!!!! Ich seh jetzt erst, dass das eine Frage zum Programmieren war. Ich kanns nicht mehr rausnehmen.
Gruß Mörchen
[Diese Nachricht wurde von Mörchen am 15. Okt. 2007 editiert.] [Diese Nachricht wurde von Mörchen am 15. Okt. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BigCheese Mitglied Dipl-Ing
Beiträge: 130 Registriert: 12.05.2004 CATIA V5R19 SP3
|
erstellt am: 15. Okt. 2007 16:26 <-- editieren / zitieren --> Unities abgeben:
|
ize Mitglied Student
Beiträge: 28 Registriert: 27.09.2007
|
erstellt am: 16. Okt. 2007 14:54 <-- editieren / zitieren --> Unities abgeben: Nur für BigCheese
hab was ähnliches in vb, da hab ich die selection als collection, nimm einfach eine selection mit allen elementen und deselektiere die in der anderen selektion, ist zwar hässlich aber geht gut Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BigCheese Mitglied Dipl-Ing
Beiträge: 130 Registriert: 12.05.2004 CATIA V5R19 SP3
|
erstellt am: 16. Okt. 2007 16:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Ize, schönen Dank für Deine Idee. Kannst Du vielleicht noch etwas genauer werden? Zum einen wie selektiere ich _schnell_ alles und zum anderen wie deselektiere ich dann wieder das andere? Ich hätte da zwar grob die Vorstellung das über
Code: Selection.Remove(i)
erreichen könnte, aber irgendwie drängt sich mir da die Vermutung auf, dass das Ermitteln des Index etwas zäh sein könnte. Also wenn Du mir da vielleicht noch 'nen weiteren Ansatz liefern könntest, wäre das klasse Danke und Gruß, Alex
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ize Mitglied Student
Beiträge: 28 Registriert: 27.09.2007
|
erstellt am: 17. Okt. 2007 08:35 <-- editieren / zitieren --> Unities abgeben: Nur für BigCheese
kommt auf die sprache an in vb/vba zB sowas wie For i = 1 To oSelection.count2 selektierteCollection.add oSelectuin.item2(i) Next i oSelection.clear oSelection.search "suchstringfüralle" For i = oSelection.count2 To 1 Step -1 For j = 1 To selektierteCollection.count If oSelection.item2(i) = selektierteCollection.item(j) Then oSelection.remove i End If Next j Next i so in etwa könnte es klappen, musst halt irgendwie bei item nen gescheiten eindeutigen namen nehmen, also sowas wie item(i).name, kA ob der eindeutig ist wir hams hier etwas anders gemacht, aber das darf ich dir denk ich kaum zeigen edit: ups, sollte erstmal lesen, das würde jetzt alle anderen löschen und nicht selektieren denk ich edit2: For i = 1 To oSelection.count2 selektierteCollection.add oSelectuin.item2(i) Next i oSelection.clear oSelection.search "suchstringfüralle" For i = 1 To oSelection.count2 ganzeCollection.add oSelection.item2(i) Next i For i = ganzeCollection.count To 1 Step -1 For j = 1 To selektierteCollection.count If selektierteCollection.item(j).name = ganzeCollection.item(i).name Then ganzeCollection.remove i End If Next j Next i oSelection.clear For i = 1 To ganzeCollection.count oSelection.add ganzeCollection.item(i) Next i und es wird immer hässlicher und wird so wohl nie gehen, aber probiers mal [Diese Nachricht wurde von ize am 17. Okt. 2007 editiert.] [Diese Nachricht wurde von ize am 17. Okt. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BigCheese Mitglied Dipl-Ing
Beiträge: 130 Registriert: 12.05.2004 CATIA V5R19 SP3
|
erstellt am: 17. Okt. 2007 10:57 <-- editieren / zitieren --> Unities abgeben:
Hallo Ize, danke für Deine Ausführung. Ich glaube auch nicht, dass das so funktioniert aber Du verwendest auch den Ansatz, der mir so vorgeschwebt ist. Ich fürchte allerdings, dass die verschachtelten Schleifen das ganze recht langsam werden lassen... mal sehen, vielleicht mache ich mir die Mühe, das mal so umzusetzen... Grüße, Alex
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ize Mitglied Student
Beiträge: 28 Registriert: 27.09.2007
|
erstellt am: 17. Okt. 2007 12:42 <-- editieren / zitieren --> Unities abgeben: Nur für BigCheese
gudn, also nach meinen erfahrungen mit unserm programm, macht das durchlaufen der collections nur einen bruchteil der zeit aus, am längsten hat immer die search in der selection gebraucht. aber ist halt auch ein externes programm, keine ahnung wie du das machst Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EmilioSanchez Mitglied
Beiträge: 78 Registriert: 02.11.2003 Intel I7 4700MQQ 24GB Win10 Pro 64-Bit Catia V5 R19/R26/28/29/30/32
|
erstellt am: 19. Okt. 2007 07:13 <-- editieren / zitieren --> Unities abgeben: Nur für BigCheese
Hallo, probiers mal so (vorher natürlich was selektieren): ' *********************************************************************** ' Purpose : Invert the selection. ' Assumptions : A CATProduct document should be active and some components selected. ' Author : ' Languages : VBScript ' Locales : English ' CATIA Level : V5R6 ' ***********************************************************************
Sub CATMain() ' Retrieve the Groups collection ' Dim cGroups As AnyObject Set cGroups = CATIA.ActiveDocument.Product.GetTechnologicalObject("Groups") ' Create a group with selected products Dim oGroup As Group Set oGroup = cGroups.AddFromSel ' Fill the selection oGroup.FillSelWithInvert ' Delete the group cGroups.Remove 1 End Sub Gruß
Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BigCheese Mitglied Dipl-Ing
Beiträge: 130 Registriert: 12.05.2004 CATIA V5R19 SP3
|
erstellt am: 19. Okt. 2007 16:36 <-- editieren / zitieren --> Unities abgeben:
Hoi Bernd, auch ein dankeschön an Dich für Deinen Vorschlag. Meine derzeitige Lösung sieht ähnlich aus. Leider bekomme ich durch das oGroup.FillSelWithInvert nicht die Inversion. In meiner Produktstruktur wird dadurch immer nur der äußerste Ast eines Produktes ausgewählt. Da ich aber alles löschen möchte, was nichts mit meiner ursprünglichen Selektion zu tun hat, löse ich das Ganze durch eine Schleife in der ich solange diese Funktion anwende, bis alles gelöscht ist, was nicht zu meiner Selektion gehört. Eine Inversion, wie ich sie manuell ausführen kann, würde mir einfach besser gefallen da es vom Löschen her schneller ginge und der Baum nicht so nervös zuckt und blinkt Grüße und schönes WE, Alex
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |