Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Part / Assembly
  Parts/Products auf einer Grundfläche positionieren

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:  Parts/Products auf einer Grundfläche positionieren (6230 mal gelesen)
Conair
Mitglied



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

Beiträge: 17
Registriert: 16.06.2006

V5R16 Win XP

erstellt am: 10. Mai. 2007 17:08    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 liebe Gemeinde,

Ich nutze CATIA z.Z. etwas zweckentfremdet als 3D-Visualisierungs-Tool für die Kabinen-Einrichtung eines Flugzeugs. Die Positionen (x-Position, y-Position und Orientierungs-Winkel) von Sitzen, Toiletten,...in der KAbine erhalte ich aus einem anderen Berechnungs-Programm.

Ich muss also lediglich ein Part oder Produkt nehmen und es auf dem Kabinenboden an Position x,y schieben und dann um einen Winkel alpha drehen.

Meine bisherige Herangehensweise war alle Parts mit ihrem lokalen Ebenensystem mit Offset- und Winkelbedingungen relativ zum Hauptkoordinatensystem des Flugzeugs zu positionieren. Also nicht die Parts relativ zueinander, sondern nur relativ zum Flugzeug. Allerdings braucht man entsprechend viele Bedingungen (teilweise >300) was sehr schnell sehr unübersichtlich wird.

Insgesamt stelle ich mir die Frage, ob diese klassische Assembly-Herangehensweise für diese Sache das beste Konzept ist. Gibt es irgendeine Variante ein Part exakt an Stelle x,y,z zu platzieren, ohne groß Bedingungen zu erstellen?

Oder kann ich pro Part ein Achsensystem definieren, welches dann relativ zu dem Hauptachsensystems des Flugzeugs positioniert und gedreht wird?

Letztendlich soll alles per VBA automatisiert werden, deshalb wäre eine Herangehensweise wünschenswert, die für unterschiedlichste Parts identisch funktioniert.

Ich wäre sehr dankbar für Anregungen aller Art.

Conair

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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 10. Mai. 2007 17:45    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 Conair 10 Unities + Antwort hilfreich

Servus

Die einfachste Methode ein Part genau zu positionieren ist das Verschieben mit dem Kompass.
RMT auf den Kompass -> Automatisch an Objekt ausrichten -> Part anwählen -> Doppelklick auf Kompass -> Koorinaten und Winkel eingeben -> Anwenden

Vielleicht hilft dir das weiter.

Gruß

Bernd

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

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

Conair
Mitglied



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

Beiträge: 17
Registriert: 16.06.2006

V5R16 Win XP

erstellt am: 10. Mai. 2007 18:26    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

Super Bernd,

Ich glaube Du hast da den Nagel eindeutig auf den Kopf getroffen. Also das scheint genau das zu sein, was ich die ganze Zeit gesucht habe. Ich glaube ich kann mir jetzt einige Wochen Kopfzerbrechen gegenüber meiner bisherigen Herangehensweise ersparen.

Vorher hatte ich mir wohl zu sehr Deine Signatur zu Herzen genommen 

Wenn sich das noch anständig per VBA automatisieren lässt, werde ich diesen Weg gehen.

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

Conair
Mitglied



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

Beiträge: 17
Registriert: 16.06.2006

V5R16 Win XP

erstellt am: 11. Mai. 2007 11: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

So, also es funktionier exakt so wie ich mir das vorgestellt habe, ist also die perfekte Lösung für mich.

Und da man einer Community die einem so prima hilft auch etwas zurückgeben will, poste ich hier mal mein Makro, dass ein subProduct/Part in das aktuelle Hauptprodukt an der Stelle x,y,z einfügt und dann um den Winkel Angle um die z-Achse dreht.

Main Funktion zum testen:

Code:
Sub Prod_Einfuegen()
    Dim mainProduct As Product, newProduct As Product, fileName As String
    Dim mainProdDoc As ProductDocument
    Set mainProdDoc = CATIA.ActiveDocument
    Set mainProduct = mainProdDoc.Product
       
    fileName = "C:\Pfad_zur_Datei.CATPart"
    Call AddComponentFromFile(fileName, mainProduct, newProduct)
    Call MoveProductToXyzAngle(newProduct, x, y, z, Angle)
End Sub

Funktion AddComponentFromFile (fügt Part aus fileName als Komponente ein):

Code:
Sub AddComponentFromFile(sFilename As String, myProduct As Product, newProduct As Product)
   
    Dim myProducts As Products
    Set myProducts = myProduct.Products
   
    Dim arrayOfVariantOfBSTR1(0)
    arrayOfVariantOfBSTR1(0) = sFilename
    Set myProductsVariant = myProducts
    myProductsVariant.AddComponentsFromFiles arrayOfVariantOfBSTR1, "All"
    Set newProduct = myProducts.Item(myProducts.Count)
   
    myProduct.Update
End Sub


Und die Funktion MoveProductToXyzAngle(newProduct, x, y, z, Angle):
Code:
Sub MoveProductToXyzAngle(productToMove As Product, x As Double, y As Double, z As Double, Angle As Double)
'Dieses Sub schiebt das productToMOve an Position x,y,z
'und dreht es um Angle um die z-Achse

'ProducttoMove wird als Product wird übergeben

'x, y, z sind die Koordinaten und werden in mm übergeben
'Angle wird in deg / ° übergeben und in rad umgerechnet
Angle = Angle * PI / 180

Dim move1 As Move
Set move1 = productToMove.Move
Set move1 = move1.MovableObject
'zuerst nochmal die Standard-Trafo-Matrix setzt Part zurück auf den Ursprung ohne Drehwinkel
Dim arrayOfVariantOfDouble1(11)
' 0 - 6 Original-Rotationsmatrix (Die x-, y-, z-Komponenten der Einheitsvektoren)
'1 Vektor zeigt nach x (1 0 0)
arrayOfVariantOfDouble1(0) = 1#
arrayOfVariantOfDouble1(1) = 0#
arrayOfVariantOfDouble1(2) = 0#
'2 Vektor zeigt nach y (0 1 0)
arrayOfVariantOfDouble1(3) = 0#
arrayOfVariantOfDouble1(4) = 1#
arrayOfVariantOfDouble1(5) = 0#
'3 Vektor zeigt nach z
arrayOfVariantOfDouble1(6) = 0#
arrayOfVariantOfDouble1(7) = 0#
arrayOfVariantOfDouble1(8) = 1#
'Translation in Richtung x
arrayOfVariantOfDouble1(9) = 0#
'Translation in Richtung x
arrayOfVariantOfDouble1(10) = 0#
'Translation in Richtung x
arrayOfVariantOfDouble1(11) = 0#
Set move1Variant = move1
move1Variant.Apply arrayOfVariantOfDouble1


'Dann mit x,y,z und Angle um die Z-Achse transformieren
Set move1 = productToMove.Move

Set move1 = move1.MovableObject
'0 - 6 Rotationsmatrix
Dim arrayOfVariantOfDouble2(11)
'1 Vektor
arrayOfVariantOfDouble2(0) = Cos(Angle)
arrayOfVariantOfDouble2(1) = Sin(Angle)
arrayOfVariantOfDouble2(2) = 0#
'2 Vektor
arrayOfVariantOfDouble2(3) = -Sin(Angle)
arrayOfVariantOfDouble2(4) = Cos(Angle)
arrayOfVariantOfDouble2(5) = 0#
'3 Vektor
arrayOfVariantOfDouble2(6) = 0#
arrayOfVariantOfDouble2(7) = 0#
arrayOfVariantOfDouble2(8) = 1#
'X=9 Y=10 Z=11
arrayOfVariantOfDouble2(9) = x
arrayOfVariantOfDouble2(10) = y
arrayOfVariantOfDouble2(11) = z
Set move1Variant = move1
move1Variant.Apply arrayOfVariantOfDouble2

End Sub


Man könnte das jetzt natürlich noch allgemeiner gestalten, so dass man das Produkt auch noch um x- und y-Achse drehen kann. Man müßte dann drei Winkel definieren und diese dann über Sinus und Cosinus in die zweite Rotationsmatrix einarbeiten.
Allerdings brauche ich das jetzt nicht und in der VBA-Doku ist es nicht weiter erläutert, also muss man sich das irgendwie selbst überlegen zusammenpopeln (musste ich für meinen Fall auch).

Tschüss
Conair

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

nadde
Mitglied
Studentin


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

Beiträge: 13
Registriert: 14.05.2014

erstellt am: 07. Jul. 2014 11: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 Conair 10 Unities + Antwort hilfreich

Hey!

Kann ich mit diesem Array auch einzelne Bauteile in einem Produkt verschieben?
Ich hab folgenden Code geschrieben:

Sub movepart(x As Double, y As Double, z As Double, i As Integer)

        Dim productDocument As ProductDocument
        productDocument = CATIA.ActiveDocument
        Dim product As Product
        product = productDocument.Product
        Dim children As Products
        children = product.Products

        Dim move1 As INFITF.Move
        move1 = children.Item(i).Move
        move1 = move1.MovableObject

        Dim arraymove(11)

        'Translation in Richtung x
        arraymove(9) = x
        'Translation in Richtung y
        arraymove(10) = y
        'Translation in Richtung z
        arraymove(11) = z

        move1.Apply(arraymove)
       
    End Sub

Wenn ich das in CATIA durchführen lasse, ist das Bauteil, auf das ich die Funktion anwende nicht mehr zu sehen.
Die Arrayeinträge 9,10 und 11 geben den Richtungsvektor an, in die das Bauteil verschoben werden soll, oder?
Wie kann ich noch eine Distanz hinzufügen, um die es bewegt werden soll?

Vielen Dank für eure Hilfe!

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

ballazolo
Mitglied
Entwicklungsengineure


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

Beiträge: 36
Registriert: 20.08.2013

HP Z420
Intel(R), Xeon(R), CPU E5-1620, 3,60 GHz
Arbeitsspeicher: 16GB

erstellt am: 16. Aug. 2017 11:05    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 Conair 10 Unities + Antwort hilfreich

Hallo Conair,

hast du vielleicht auch ein VBA Code mit der Rotation Matrix durch eine beliebige Richtung? Ich meine das die rotationsachse nicht umbedingt die X, Y oder Z Richtung ist aber eine vom Benutzer frei ausgewählte Richtung.
Ich habe schon nachgeschaut/"gegooglet" und die Ridrigues Rotations Matrix gefunden aber ich komme nicht wirklich zu recht damit.

Ich danke Dir im Voraus für Deine Bemühungen.

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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 16. Aug. 2017 11:50    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 Conair 10 Unities + Antwort hilfreich

Servus
Schau dir mal auf Wikidepia die Drehung um eine Ursprungsgerade an.
Viel "Spaß" bei der Ermittlung der kompletten Transformationsmatrix wenn die Achse nicht durch den Ursprung geht.

Gruß
Bernd

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

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

Lionel Hutz
Mitglied



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

Beiträge: 363
Registriert: 26.03.2014

CATIA V5 R20

erstellt am: 16. Aug. 2017 11:58    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 Conair 10 Unities + Antwort hilfreich

In dem Fall, dass es sich bei der Drehachse nicht um eine Ursprungsgeraden handelt, hilft es, die Drehachse (mit allen Einzelteilen) auf den Nullpunkt zu verschieben (Verschiebungsvektor kann jeder Punkt auf der Drehachse sein), die Rotationstransformation durchzuführen und anschließend zurückzuschieben um den gleichen Betrag in umgekehrter Richtung.

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

Ancela
Mitglied
Techn. Zeichnerin


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

Beiträge: 316
Registriert: 09.11.2004

Windows 10
Catia V5R26 SP4
SmarTeam V5-6R2016 SP4

erstellt am: 16. Aug. 2017 12:17    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 Conair 10 Unities + Antwort hilfreich

Hallo nadde,

ich kenne mich mit programmieren nicht aus, aber vielleicht ist das hier von Nutzen:
Wenn man ein Teil in der Baugruppe fixiert, dann auf diese Bedingung doppelklickt, kann man die Werte für x, y, z und auch die Winkel eintragen. Danach will die Baugruppe aktualisieren und das Teil geht in die neue Lage.

Gruß
Angela

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

ballazolo
Mitglied
Entwicklungsengineure


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

Beiträge: 36
Registriert: 20.08.2013

HP Z420
Intel(R), Xeon(R), CPU E5-1620, 3,60 GHz
Arbeitsspeicher: 16GB

erstellt am: 21. Aug. 2017 14:23    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 Conair 10 Unities + Antwort hilfreich

Servus bgrittmann,

Danke schön  . Ganz genau den Spaß wollte ich mir sparen  . Hast du es schon mal geschafft?

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

Lionel Hutz
Mitglied



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

Beiträge: 363
Registriert: 26.03.2014

CATIA V5 R20

erstellt am: 21. Aug. 2017 14:31    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 Conair 10 Unities + Antwort hilfreich

Also die Koordinaten der Fix-Constraints kann man wiederum wunderbar über eine Konstruktionstabelle steuern. Allerdings müssen dann die Namen der Fix den entsprechenden Komponenten zugeordnet werden, die sie im Raum platzieren.
Das wiederum könnte ggf. über ein Makro laufen.

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: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 21. Aug. 2017 14: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 Nur für Conair 10 Unities + Antwort hilfreich

Servus ballazolo

Nö, ich hatte noch keine Anwendungsfall dafür.
Und einfach aus Spaß so was aufzusetzen? Nee muss nicht sein.
Du kannst ja mal mit so einem Makro anfangen, falls dann Probleme aufkommen im Programmierforum eine Frage stellen.

Gruß
Bernd

EDIT: Hier findest du ein paar Funktionen zur Matrix-Rechnung.

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

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