Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Transformationsmatrix einer Instanz

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Transformationsmatrix einer Instanz (4730 mal gelesen)
richter2
Mitglied



Sehen Sie sich das Profil von richter2 an!   Senden Sie eine Private Message an richter2  Schreiben Sie einen Gästebucheintrag für richter2

Beiträge: 81
Registriert: 21.10.2009

erstellt am: 06. Mai. 2010 13:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,

wie kann ich die Transformationsmatrix einer Instanz eines Bauteils auslesen? Natürlich muss dies auch irgendiwe mit oParentDoc.(hier muss wohl noch was hin - Parent? ReferenceProduct).Position.GetComponents erfolgen.

Irgendwie verstehe ich in diesem Zusammenhang wohl auch die Befehle Parent bzw. ReferenceProduct nicht wirklich. Was passiert da eigentlich in einer ganz normalen Stammbaumstruktur? Wäre schön, wenn sich jemand finden würde, der mir auch gleich dies näher bringen kann.

Danke und Gruß

Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DanielFr.
Moderator
Manager


Sehen Sie sich das Profil von DanielFr. an!   Senden Sie eine Private Message an DanielFr.  Schreiben Sie einen Gästebucheintrag für DanielFr.

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 06. Mai. 2010 14:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für richter2 10 Unities + Antwort hilfreich


SH_1.png


SH_2.png

 
Hallo Klaus  ,

hier erst einmal das Code zum auslesen der Position eines Bauteils bzw. eines Produkts innerhlab der Produktstruktur

Code:

Sub CATMain()

    '***DEKLARATIONEN
    Dim intProdDocObj As ProductDocument
    Dim intRootProdObj As Product
    Dim intProdsObj As Products
    Dim intProdObj As Product
    Dim intPositionObj As Object
    Dim intPosArr(11)
   
    '***OBJEKTE HOLEN
    Set intProdDocObj = CATIA.ActiveDocument
    Set intRootProdObj = intProdDocObj.Product
    Set intProdsObj = intRootProdObj.Products
    Set intProdObj = intProdsObj.Item(intProdsObj.Count)
   
    Set intPositionObj = intProdObj.Position
   
    '***POSITION IN ARRAY SCHREIBEN
    intPositionObj.GetComponents intPosArr
   

End Sub


Hier wird die Position des ersten Produkts (kann auch ein Bauteil sein) ausgelesen und in ein Array geschrieben. Die ersten 9 Array-Felder (0-8) ergeben die Rotationsmatrix die letzten 3 (9-11) sind die Verschiebung des Ursprungs zum Produktursprung (Ursprung des ersten eingefügten Bauteils)

Jetzt zu Parent, ReferenceProduct und Co.

Ich habe mal versucht das in einem bzw. zwei Screenshots darzustellen. Das Parent sind die Eltern. Das gibt es in jedem Objekt. Da VBA eine Objektorientierte Sprache ist wird jedes Objekt von dem Root-Objekt (dem Application-Objekt "CATIA" abgeleitet). Über die Parent Eigenschaft kommst du immer wieder eine Stufe zurück. D.h. man kann nicht pauschal sagen welches Objekt du damit ansprichst, da es von dem Objekt abhängt vom dem aus aufgerufen wird.

Das ReferenceProduct ist das erste Kind der Instanz. D.h. hast du z.B. ein Bauteil ist der oberste Knoten in der Produktbaumstruktur die Instanz selber. Der Eintrag der Darunter kommt ist den das ReferenceProduct. Hier findest du im Parent-Objekt eines Bauteils auch das Part wieder.

Ich hoffe das hilft ein wenig. Du kannst dir auch mal die Mühe machen und die Strukturen mittels dem VB Editor, der Watch-List und der Funktion "Step-into" durchzugehen. Dann wird dir bestimmt einiges klarer 

------------------
MFG Daniel

Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

richter2
Mitglied



Sehen Sie sich das Profil von richter2 an!   Senden Sie eine Private Message an richter2  Schreiben Sie einen Gästebucheintrag für richter2

Beiträge: 81
Registriert: 21.10.2009

erstellt am: 06. Mai. 2010 15:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für die schnelle Antwort.

Dadurch sehe ich nun tatsächlich etwas klarer. Mein eigentliches Problem bzgl. gespiegelter Bauteile (siehe anderer Thread) kann ich damit aber irgendwie dennoch nicht lösen.

Trotzdem Danke und Gruß

Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

DanielFr.
Moderator
Manager


Sehen Sie sich das Profil von DanielFr. an!   Senden Sie eine Private Message an DanielFr.  Schreiben Sie einen Gästebucheintrag für DanielFr.

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 06. Mai. 2010 15:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für richter2 10 Unities + Antwort hilfreich

Hallo   ,

warum den nicht. Wenn du ein Bauteil spiegelst bekommst du exakt die negative Verschiebungsmatrix (bzw. bei Rotation eben eine Rotationsmatrix) wie das Original raus  

[EDIT]
ah ok hab mir gerade den anderen Thread durchgelesen. Wenn ich mal Zeit habe werde ich mal ein wenig rumprobieren. Zum anderen Thread ist zu sagen das die Transformationsmatrix eines Translations- bzw. Ratoationsfeatures innerhalb eines Produkts nicht explizit gespeichert wird, bzw. du daruaf mit VB keinen Zugriff hast 
[/EDIT]

------------------
MFG Daniel

Systeminformation | Inoffizielle CATIA Hilfeseite | CATIA FAQ | Suche | TraceParts (Normteile...) | 3D Content Central (noch mehr Normteile...)

   

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

richter2
Mitglied



Sehen Sie sich das Profil von richter2 an!   Senden Sie eine Private Message an richter2  Schreiben Sie einen Gästebucheintrag für richter2

Beiträge: 81
Registriert: 21.10.2009

erstellt am: 06. Mai. 2010 15:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Das ist schon klar. Automatisiert kenne ich doch aber das zugehörige Original gar nicht. Also mal ein Beispiel:

Part A mit Positionsmatrix:

Matrix1(0) = 1
Matrix1(1) = 2
Matrix1(2) = 3
       
Matrix1(3) = 4
Matrix1(4) = 5
Matrix1(5) = 6
       
Matrix1(6) = 8
Matrix1(7) = 9
Matrix1(8) = 10
       
Matrix1(9) = 11
Matrix1(10) = 12
Matrix1(11) = 13

Part B entsteht durch Spiegelung von Part A an der xz - Ebene, also mittels folgender Matrix (und durch ein Makro):

Matrix2(0) = 1
Matrix2(1) = 0
Matrix2(2) = 0
       
Matrix2(3) = 0
Matrix2(4) = -1
Matrix2(5) = 0
       
Matrix2(6) = 0
Matrix2(7) = 0
Matrix2(8) = 1
       
Matrix2(9) = 0
Matrix2(10) = 0
Matrix2(11) = 0

Beim Auslesen der Positionsmatrix von Part B ergibt sich nun (Matrix3 = Matrix2*Matrix1):

Matrix3(0) = 1
Matrix3(1) = -2
Matrix3(2) = 3
       
Matrix3(3) = 4
Matrix3(4) = -5
Matrix3(5) = 6
       
Matrix3(6) = 8
Matrix3(7) = -9
Matrix3(8) = 10
       
Matrix3(9) = 11
Matrix3(10) = 12
Matrix3(11) = 13

Matrix3 ist nun die Matrix, welche beim Ermitteln der Positionskoordinaten mit Position.GetComponents von Part B angezeigt wird. Das dazugehörige Originalpart (Part A mit Matrix 1) kenne ich beim automatisierten auslesen natürlich nicht. Woher soll ich also wissen, ob Matrix 3 durch Spiegelung entstanden ist, oder dies die Originalposition von Part B darstellt? Die bei der Spiegelung erzeugte und verwendete Matrix wird nur auf das entsprechende Produkt / Part angewandt und aus meiner Sicht nirgendwo separat abgelegt, was dazu führt, dass ich diese nicht separat auslesen kann (bisher dachte ich, diese ist irgendwo in der Instanz des Produktes / Parts gespeichert ist - es ist mir aber nicht gelungen diese auszulesen).

Das ist zumindest meine derzeitige Kenntnisstand. Sehe ich evtl. den Wald vor lauter Bäumen nicht, oder ist dies wirklich ein Problem bei derart gespiegleten Bauteilen.

Danke und Gruß

Klaus
Bin ich nur

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz