| | | KISTERS 3DViewStation: Mit 3D-Montageanleitungen werden Produkte bei der Fertigung lebendig, eine Pressemitteilung
|
Autor
|
Thema: iIndex / Name Ansprechbarkeit (1196 mal gelesen)
|
xSalazar Mitglied
Beiträge: 3 Registriert: 12.08.2019 CATIA V5 Release 27
|
erstellt am: 12. Aug. 2019 13:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, Ich hätte eine größere Frage. 1. Gibt es die Möglichkeit sich über die Benennung eines z.B. Punktes den zugehörigen Index im Geometrischen Set ausgeben zu lassen? Über .Item("Testpunkt") könnte sich ja ein Punkt ansprechen lassen. Nun würde mich interessieren, welcher Index (Zahl) denselben Punkt im Set anspricht. 2. Problemstellung (Worauf das Ganze eigentlich hinaus läuft) Wie unterscheidet Catia doppelt benannte Punkte? Wenn ich 2 Punkte erzeuge (P1 und dann nochmal P1), kann ich über aktiven Mausklick die Punktunterscheidung bewerkstelligen. Wenn ich jedoch über .Item("P1") arbeite, wird immer zuerst der oberste Punkt angewählt und verwendet. Ist Prinzipiell logisch da "P1" nur den String übergibt und keine weitere Information über die genaue Lage im Geometrischen Set. Der unten liegende P1 ist nicht per Macro ansprechbar. Wenn ich, über Selection, eine Suche nach P1 laufen lasse, kann ich innerhalb der Suche über .Item(1) und .Item(2) beide Punkte explizit ansprechen. Wie genau könnte ich diese Punkte nun zur Ebenenerzeugung verwenden? Beispiel: Per Macro eine Ebene durch 3 Punkte erzeugen. Die Punkte haben die Benennungen (P1,P2,P1). Wäre super, wenn mir hier jemand mit einem kleinen "Denkanstoss" weiterhelfen könnte.
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: 12. Aug. 2019 13:51 <-- editieren / zitieren --> Unities abgeben: Nur für xSalazar
Servus Willkommen im Forum. Bitte Systeminfo ausfüllen. zu 1): Das ist der Grund warum per Name auf eine Element zugreifen recht fehleranfällig ist. Den Index heraus bekommen geht vermutlich nur über eine Schleife aller HybridShapes des GeoSets. Dann für jedes Element den Elementen Typ und den Namen vergleichen. zu 2): Wenn du die Punkte selektiert hast kannst du diese doch direkt verwenden (oder gleich die Referenz dazu (Code ungetestet)): Code: 'Ebene Erzeugen, zwei Punkte sind selektiert, vom dritten Punkt wird auf andere Weise die Referenz gebildetSet oRefFirstPoint = oSel.Item2(1).Reference Set oRefSecondPoint = oSel.Item2(2).Reference Set oRefThirdPoint = oPart.CreateReferenceFromObject(oPoint) Set oPlane = oHybridShapeFactory.AddNewPlane3Points(oRefFirstPoint, oRefSecondPoint, oRefThirdPoint)
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xSalazar Mitglied
Beiträge: 3 Registriert: 12.08.2019 CATIA V5 Release 27
|
erstellt am: 12. Aug. 2019 14:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, Vielen Dank schonmal für die Info. Ich sollte das Beispiel wohl doch etwas anders mehr am eigentlichen Problem aufbauen. Ich habe folgende Punktwolke: P01 P03 P05 P04 P02 Und möchte diese, ohne die Position der Punkte im Baum zu verändern, nun spiegeln. Zu: P05 P03 P01 P02 P04 Ich hatte das Ganze momentan so gemacht, das ich die Punkte ("String", daher der Fehler) in ein Array geschrieben habe, das Array alphabetisch geordnet habe, und über dieses Array eine Schleife laufen lasse (Quasi P01-05, wird P05-01). Dabei benennt er mir P05 im Baum zu P01 um.
Code: .HybridShapes.Item(Ziel(Z,0)).Name="P0" & Z + 1
Wenn er dann aber auf .Item("P01") zugreifen will, greift er mir auf das in der Schleife eben erstellte P01 (ehemals P05) zu und lässt den eigentlichen P01 unberührt, da dieser natürlich doppelt benannt ist. Das Ganze soll am Ende als Grundlage für eine Spline gelten. Da hier während der Konstruktion auch nachträglich Punkte hinzukommen können, eingefügt werden, vielleicht noch ein paar Konstruktionspunkte vorhanden sind, möchte ich hier nicht rein über die Reihenfolgen im Baum gehen sondern möchte gerne aktiv ,über den Namen, die Reihenfolge der Punkte festlegen. Oder wenn wir beim Ebenen Problem bleiben wollen, wenn nur der im Baum unterhalb stehende P1 Punkt für die Ebenenerstellung verwendet werden soll. Wie würde man diesen ansprechen?
[Diese Nachricht wurde von xSalazar am 12. Aug. 2019 editiert.] 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: 12. Aug. 2019 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für xSalazar
Servus Ich verstehe nicht ganz was du in dem Zusammenhang mit "spiegeln" meinst oder was das sortieren bezwecken soll. Du könntest doch - auf die Elemente nur per Index zugreifen (des Hybridshapes oder eines Arrays)
- die Elemente zuvor alle temporär umbenennen (Postfix oder Präfix hinzufügen, dann klappt auch das Ansprechen über diesen (temporären) Namen
Zu deinem Beispiel mit der Ebene: es ist doch egal wo der Punkt im Baum ist, Hauptsache er kann eindeutig angesprochenen werden (Index, Userselektion , Name (falls dieser wirklich eindeutig ist), zuvor erzeugter Punkt der noch in einer Variabel/Object gespeichert ist, ...) Gruß Bernd EDIT: Wenn du zu einem HybridShape dessen Index im GeoSet benötigst: so könnte das gehen Code: Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item(1) Set MyPoint = hybridBody1.HybridShapes.item(3) dim i as Integer i = GetIndexOfHybridShape(MyPoint, hybridBody1) if i <> 0 then MsgBox "Gefunden: " & CStr(i) end if End Sub Function GetIndexOfHybridShape(oSearchItem as HybridShape, oHBody as Hybribody) as Integer
Dim oHybridShape as HybridShape for i = 1 to oHBody.HybridShapes.Count Set oHybridShape = oHBody.HybridShapes.Item(i) if oHybridShape Is oSearchItem then GetIndexOfHybridShape = i exit Function end if next GetIndexOfHybridShape = 0 End Function
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xSalazar Mitglied
Beiträge: 3 Registriert: 12.08.2019 CATIA V5 Release 27
|
erstellt am: 13. Aug. 2019 11:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, Vielen Dank für den Denkanstoss. Habe jetzt meinen Code von sämtlichen Strings befreit und ziehe in sämtlichen Arrays, Referenzen, Vergleichen direkt die Objekte selbst an. Dann funktioniert das Ganze einwandfrei. Als kleines Problem habe ich noch das ich per Listbox eine Sortier- & Umbenennfunktion gebaut habe. Wenn ich quasi P01-P05 habe und zwischen P01 und P02 einen neuen P02 einfügen will, müsste ich alle nachfolgenden Punkte umbenennen um P01-P06 zu bekommen. Das wollte ich automatisieren. Nachdem die zwei P01 aber einmal in der Listbox sind, hat man keine Übersicht mehr, welcher jetzt welcher war. Hier muss ich entweder noch irgendwas mit einem Prefix bauen oder den Index auslesen und hier noch eine 2te Zeile einfügen, das es P01 mit Index 2 gibt und P01 mit Index 3. Trotzdem Vielen Dank für deine Hilfe. Hat mich sehr weitergebracht. [Diese Nachricht wurde von xSalazar am 13. Aug. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|