Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  CATIA V5 Programmierung
  Implizite (?) Koordinaten Systeme im Catia

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co.
  
KISTERS 3DViewStation: Unterstützung für 3D CAD Kollaboration mit Lieferanten, eine Pressemitteilung
Autor Thema:  Implizite (?) Koordinaten Systeme im Catia (1425 mal gelesen)
ETCH
Mitglied
Programmierer

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

Beiträge: 4
Registriert: 15.07.2013

Win 7 Pro, Catia R19

erstellt am: 15. Jul. 2013 17:16    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

Moin,

ich versuche via C# die Koordinaten von einzelne Parts/Products anzupassen.

Es soll einfach Start-/Ziel-Objekt (Produkt, Part oder AxisSystem) ausgewählt werden und dann soll das Start-Objekt im Ziel "springen"...

Auswahl etc. klappt soweit ohne Probleme.

Über den

Code:
Product.Position.GetComponents()
bzw.
Code:
.SetComponents()
erfolgt die eigentliche Transformation.

Ich habe die Drehung anhand der Wikipedia Artikel: http://de.wikipedia.org/wiki/Eulersche_Winkel#.E2.80.9Ez.2C_y.27.2C_x.27.27-Konvention.E2.80.9C_in_der_Fahrzeugtechnik gemacht:

Code:

        private object[] PositionArrayFromRotationAngles(EulerAngles _angles)
        {
            object[] pos = new object[12];

            double cPs = Math.Cos(_angles.Psi);
            double sPs = Math.Sin(_angles.Psi);

            double cPh = Math.Cos(_angles.Phi);
            double sPh = Math.Sin(_angles.Phi);

            double cTh = Math.Cos(_angles.Theta);
            double sTh = Math.Sin(_angles.Theta);

            pos[0] = cTh * cPs;
            pos[1] = cTh * sPs;
            pos[2] = -sTh;

            pos[3] = sPh * sTh * cPs - cPh * sPs;
            pos[4] = sPh * sTh * sPs + cPh * cPs;
            pos[5] = sPh * cTh;

            pos[6] = cPh * sTh * cPs + sPh * sPs;
            pos[7] = cPh * sTh * sPs - sPh * cPs;
            pos[8] = cPh * cTh;

            return pos;
        }


Wobei

Code:
EulerAngles
eine einfache Struktur ist:

Code:

        private struct EulerAngles
        {
            public double Theta; // Winkel Theta (Rotation um die Y-Axis).
            public double Phi; // Winkel Phi (Rotation um die X-Axis).
            public double Psi; // Winkel Psi (Rotation um die Z-Axis).
        }


Dies klappt jedoch nur solange die Objekte in derselben Kind-Ebene sind. Sobald Products/Parts über die "Product-Grenze" hinweg repositioniert werden stehen diese scheinbar willkürlich im Raum, obwohl Ursprungspunkt und Drehmatrix exakt identisch sind - s.u.

[-]Product
|
|
|----[-]UnterProduct1
|    |---Part1.1
|    |---Part2.1
|
|----[-]UnterProduct2
      |---Part3.1
      |---Part4.1

Part1.1 <-> Part2.1 klappt
Part3.1 <-> Part4.1 klappt

Part1.1 auf 3.1 oder 4.1 nicht, genauso umgekehrt.

Falls ich zuerst die enthaltende Produkte aufeinander "anpasse", also zunächst UnterProduct2 --> UnterProdukt1 und danach die Parts, dann klappt es.

Es hat den anschein, dass es so etwas wie implizites übergreifendes Koordinatensystem gibt, den ich nicht zum "fassen" bekomme. Sprich ich kann nichts "auslesen" um meine Koordinaten entsprechend übergreifend umzurechnen. Offensichtlich fehlt mir ein entscheidendes Stückchen Information bzw. Verständis wie CATIA an diese Stelle funktioniert.

Kann jemand helfen?

Vielen Dank im Voraus!

ET

------------------
otia dant vitia

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 12054
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 15. Jul. 2013 21:06    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 ETCH 10 Unities + Antwort hilfreich

Servus
Wie du festgestellt hast, hat jedes CATProduct (bzw auch Komponente) sein Kooridinatensystem.
Die Methode .Position.GetComponents gibt dir immer die Ausrichtung in der nächst höheren Ebene (also bei dir Part1.1 in UnterProduct1).
Die absolute Position einen Parts zur Rootbaugruppe bekommst du wenn du Positionsmatrixen stufenweise bis zum RootProduct hoch "addierst".

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

ETCH
Mitglied
Programmierer

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

Beiträge: 4
Registriert: 15.07.2013

Win 7 Pro, Catia R19

erstellt am: 16. Jul. 2013 08:39    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

Moin,

vielen Dank für deine Zeit!

Zitat:
Original erstellt von bgrittmann:
Die absolute Position einen Parts zur Rootbaugruppe bekommst du wenn du Positionsmatrixen stufenweise bis zum RootProduct hoch "addierst".

Was ist unter "hoch addieren" gemeint? Matrix addition?

Und wenn ich im "Root" angekommen bin, wie soll ich mich weiter zum Ziel "bewegen" (angenommen der ist wieder irgendwo in ein anderen Kind-Knotten) durch "substraktion"?

Also ausgehend von mein Beispiel:

[-]Product
|
|
|----[-]UnterProduct1
|    |---Part1.1
|    |---Part2.1
|
|----[-]UnterProduct2
      |---Part3.1
      |---Part4.1

Product\Unterprodukt2\Part4.1 muss ich zunächst "addieren" (was auch immer dies sein mag). Beim Produkt angekommen muss ich wiederrum die Umkehrfunktion "substrahieren" anwenden in "Richtung" Ziel z.B. Unterprodukt1\Part2.1. Habe ich es richtig verstanden?

Dann muss ich nur noch wissen was "addition" und "substraktion" hier bedeuten...

Vielen Dank!

ET

------------------
otia dant vitia

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 16. Jul. 2013 09:40    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 ETCH 10 Unities + Antwort hilfreich

Die Koordinaten sind immer relativ zum Urpsrung der nächst höheren Ebene.

hast Du jetzt ein Achsensystem, so ist dies Releativ zum Part.
Hast Du ein Part ist dies Relativ zur nächst höheren Komponente.

So kannst Du die absoluten Koordinaten herausbekommen. Das musst Du auf beiden Seiten machen und dann kannst Du sie in's Verhältnis setzen.

Schau Dir mal http://hoblila.wordpress.com/download/ an vielleicht kann es schon, was Du brauchst.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 16. Jul. 2013 editiert.]

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)2025 CAD.de | Impressum | Datenschutz