Autor
|
Thema: Positionsmatrix - Achse invertieren (1693 mal gelesen)
|
mvo Mitglied Konstrukteur
Beiträge: 94 Registriert: 22.10.2001 CATIA V5R21 SP2 WIN 7 64bit
|
erstellt am: 17. Apr. 2018 09:41 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe eine Frage zur Positionierung eines CATParts im CATProduct. Momentan besteht das Problem (aufgrund der Mirror-Function in V4 + V5 Migration), dass die Positionsmatrix des Parts im Product linkshändisch ist. Öffnet man das Part allein, ist die Achse OK (das Part selbst wurde also nicht angefasst). Die Positionsmatrix habe ich ausgelesen (siehe Bild). Nun würde ich gern per Matrix-Umrechnung und Move-Operation in VBA eine Achse (z.B. die Y-Achse) invertieren. Ist dies möglich? Danke und Gruß, Marco Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3418 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 17. Apr. 2018 10:01 <-- editieren / zitieren --> Unities abgeben: Nur für mvo
|
mvo Mitglied Konstrukteur
Beiträge: 94 Registriert: 22.10.2001 CATIA V5R21 SP2 WIN 7 64bit
|
erstellt am: 17. Apr. 2018 10:18 <-- editieren / zitieren --> Unities abgeben:
Hallo Uwe, danke für die schnelle Antwort! Mir geht es nicht um die Befehle an sich. Diese sind mir klar. Ich habe folgendes benutzt: Dim intPosArr(11) intPositionObj.GetComponents intPosArr intPositionObj.SetComponents intPosArr Nun möchte ich aber das Array für intPosArr so umrechnen, dass z.B. die Y-Achse invertiert wird (also quasi eine Spiegelung an der XY-Ebene des positionierten Bauteils). Ist also eher ein mathematisches Problem. Ich habe es mit intPosArr(1) = -intPosArr(1) intPosArr(4) = -intPosArr(4) intPosArr(7) = -intPosArr(7) versucht. Dann bekomme ich auch wieder ein rechthändisches Achsensystem. Jedoch ist das gedreht (je nach Position des Bauteils). Gruß, Marco [Diese Nachricht wurde von mvo am 17. Apr. 2018 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: 17. Apr. 2018 20:10 <-- editieren / zitieren --> Unities abgeben: Nur für mvo
Servus Marco In meinem Kurztest hat es genau wie du es beschrieben hast geklappt eine Achse des Teil zu invertieren (uns somit das Teil zu spiegeln) Geht es wenn das Teil im Ursprung der Baugruppe liegt? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mvo Mitglied Konstrukteur
Beiträge: 94 Registriert: 22.10.2001 CATIA V5R21 SP2 WIN 7 64bit
|
erstellt am: 15. Mai. 2018 14:26 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, danke für die Antwort! Ja, wenn das Teil an der Hauptachse positioniert ist, funktioniert es. Nur wenn es verschoben und/oder gedreht ist, wird es entweder 90° oder 180° um eine Achse gedreht (die genaue Konstellation konnte ich noch nicht ganz nachvollziehen). Ich habe aber gelernt, dass mit der genannten Matrix-Operation immer der Hauptebene gespiegelt wird!? Gruß, Marco 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: 15. Mai. 2018 16:54 <-- editieren / zitieren --> Unities abgeben: Nur für mvo
Servus Marco Zitat: ... genannten Matrix-Operation immer der Hauptebene gespiegelt wird!? ..
Deshalb wird bei vielen Transformationen das Teil auf den Ursprung ausgerichtet, die Transformation vorgenommen und dann wieder verschoben. Dies lässt sich natürlich auch mit der Berechnung einer entsprechenden Transformationsmatrix zusammenfassen (siehe gutes Mathebuch) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mvo Mitglied Konstrukteur
Beiträge: 94 Registriert: 22.10.2001 CATIA V5R21 SP2 WIN 7 64bit
|
erstellt am: 16. Mai. 2018 11:00 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 16. Mai. 2018 11:08 <-- editieren / zitieren --> Unities abgeben: Nur für mvo
Servus Dann probier es mal so (ungetestet): - Positionsmatrix auslesen und zwischenspeichern - Teil auf 0,0,0 mit invertierter Achse positionieren (SetComponents) - Teil mit .Move.Apply und der ursprünglichen Positionsmatrix verschieben Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mvo Mitglied Konstrukteur
Beiträge: 94 Registriert: 22.10.2001 CATIA V5R21 SP2 WIN 7 64bit
|
erstellt am: 29. Mai. 2018 13:40 <-- editieren / zitieren --> Unities abgeben:
Ich habe es nun hinbekommen. Der "Trick" war, dass man mittels intPosArr(3) = -intPosArr(3) intPosArr(4) = -intPosArr(4) intPosArr(5) = -intPosArr(5) (statt 1;4 und 7) invertiert, da das Array bzgl. Rotationsmatrix nach x, y und z-Vektor aufgebaut ist (hätte ich auch früher drauf kommen können): 0 3 6 1 4 7 2 5 8 @Bernd: Danke für deine Anregungen!! Gruß, Marco Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |