| |
| KISTERS 3DViewStation: 3D-Heatmaps für aussagekräftige Machbarkeitsanalysen, eine Pressemitteilung
|
Autor
|
Thema: Bezug getorigin im Product (3792 mal gelesen)
|
Bartleby Mitglied
Beiträge: 102 Registriert: 17.06.2004 Win XP V5R12 SP3, SP5 Win 2000 SP4 V5R12 SP3
|
erstellt am: 29. Jul. 2004 10:52 <-- editieren / zitieren --> Unities abgeben:
Hallo V5ler, habe folgende Frage: ich will eine Koordinatentransformation ausführen. Das funktioniert innerhalb eines Parts ohne Probleme. Die Koordinaten im Part zu bekommen ist kein Problem auch aus unterschiedlichen Achsensystemen funktioniert das. Schwierig wirds scheinbar erst im Product weil man da die OriginPoints und die Vektoren der Achsensysteme in den einzelnen Parts nicht so einfach auswerten kann. Leider liegen die Parts mit ihren Absoluten Achsensystemen nicht aufeinander, sodaß die Lage der Absoluten Achsensysteme der Parts zueinander ausgewertet werden muss. Mit Punkten hat's ausgereicht selbige im Part als Object zu definieren, dann konnte man mit getcoord die Koordinaten mit bezug aufs Product-achs-null bekommen. aber wie bekomme ich für getorigin und getaxis den Bezug vom Partachs aufs Product-achs-null?????? hier meine bisherigen SCRIPT-überlegungen stehen in der Textdatei(s.o.)
[Diese Nachricht wurde von Bartleby am 29. Jul. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bartleby Mitglied
Beiträge: 102 Registriert: 17.06.2004 Win XP V5R12 SP3, SP5 Win 2000 SP4 V5R12 SP3
|
erstellt am: 29. Jul. 2004 12:03 <-- editieren / zitieren --> Unities abgeben:
Hab da was gefunden, im TranslateRotate (oder Verschieben und Drehen) aus der Befehlsliste. Da steht unter Position zumindest die Absolutposition meines Part im Product drin wenn ich den Befehl starte, aber wie bekomme ich die Werte in mein script auf eine Variable? wenn das klapt hätte ich die Lösung! Danke Ronny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EmilioSanchez Mitglied
Beiträge: 78 Registriert: 02.11.2003 Intel I7 4700MQQ 24GB Win10 Pro 64-Bit Catia V5 R19/R26/28/29/30/32
|
erstellt am: 29. Jul. 2004 22:14 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Hallo Bartleby, wird ein Part in ein Product eingefügt so ist dieses Part im Strukturbaum ja in einem Element Positioniert das ebenfalls als Product angesprochen wird. Die Position dieses Productes und somit auch des Parts erhält man folgendermaßen: Dim PositionArray(11) ObjectAktuellesProduct.Position.GetComponents iAxisComponentsArray Das Array enthält die X,Y und Z Werte sowie die Werte der X und Y Vectoren und somit die Ausrichtung im Raum. In der Hilfe unter Position findest du eine Beschreibung der Werte. C4N Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EmilioSanchez Mitglied
Beiträge: 78 Registriert: 02.11.2003 Intel I7 4700MQQ 24GB Win10 Pro 64-Bit Catia V5 R19/R26/28/29/30/32
|
erstellt am: 29. Jul. 2004 22:20 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
|
Bartleby Mitglied
Beiträge: 102 Registriert: 17.06.2004 Win XP V5R12 SP3, SP5 Win 2000 SP4 V5R12 SP3
|
erstellt am: 30. Jul. 2004 11:56 <-- editieren / zitieren --> Unities abgeben:
Spitze, einfach absolute Sahne!!! Danke!!! hab schon nicht mehr ruhig geschlafen, aber damit ist das Wochenende gerettet! 10 Points eigentlichnoch zwei extra (Nachtzuschlag!!) Viele Grüße von da wo die Sonne aufgeht! Ronny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
QUESTMan Mitglied
Beiträge: 12 Registriert: 21.05.2008
|
erstellt am: 13. Nov. 2008 13:44 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Hallo zusammen, ich verzweifle gerade bei meinen ersten Gehversuchen in den Gefilden der V5-Makroprogrammierung... Nachdem ich jetzt einen halben Tag gebraucht habe, um herauszufinden, dass Parameter einer Prozedur nicht wie im Handbuch angegeben mit Klammern übergeben werden, hänge ich mittlerweile am selben Problem wie vorher Bartleby. Allerdings funktioniert die hier vorgestellte Lösung bei mir nicht. Bei mir kommt "Function or interface marked as restricted, or the function uses an Automation type not supported in Visual Basic" Code: Sub CATMain() Dim test As Product Set test = CATIA.ActiveDocument.Product Analysiere test End Sub Sub Analysiere(ByVal P As Product) ' Namen ausgeben ---------------------------------------- MsgBox (P.PartNumber + ", " + P.Name) Dim PositionArray(11) P.Position.GetComponents PositionArray End Sub Bei " P.Position.GetComponents PositionArray " steigt er aus. Hat da jemand eine Idee? Ach ja: Sprache is MS VBA.
Vielen Dank, Matthias [Diese Nachricht wurde von QUESTMan am 13. Nov. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 13. Nov. 2008 18:10 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Hallo Matthias, versuche es mal so:
Code:
Sub CATMain() Dim test As Product Set test = CATIA.ActiveDocument.Product Analysiere test End SubSub Analysiere(ByRef P As Product) ' Namen ausgeben ---------------------------------------- MsgBox (P.PartNumber + ", " + P.Name) Dim oPosition 'As Position 'Praktisch die Datentyp auf Variant/Objekt stellen Set oPosition = P.Position Dim PositionArray(11) oPosition.GetComponents PositionArray End Sub
Es gab ein Beitrag hier in Forum, soweit ich mich erinnern kann von HoBLila über dieser Art von Fehler, wo auch eine elegantere Lösung beschrieben war, kann es aber jetzt nicht finden. Gruß, Zoltán Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
QUESTMan Mitglied
Beiträge: 12 Registriert: 21.05.2008
|
erstellt am: 14. Nov. 2008 14:29 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Hallo Zoltán, danke für die schnelle Antwort - das klappt leider bei mir auch nicht. Ich habe allerdings gerade in einem anderen Thread gelesen, dass VBA mit der Typzuordnung manchmal Probleme macht. Ich habe im nächsten Schritt Dein Dim oPosition As Position durch Dim oPosition As Object ersetzt - jetzt geht alles Tausend Dank, Matthias
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadde Mitglied Studentin
Beiträge: 13 Registriert: 14.05.2014 CATIA V5R20 Microsoft Visual Studio 2010 MATAB R2013b
|
erstellt am: 20. Jun. 2014 15:15 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Hey! Ich hänge auch an der gleichen Sache. Ich will in Visual Basic eine Funktion schreiben, die die Koordinaten der Parts eines Products ausgibt. Über die Dynamic Link Library binde ich das ganze in MATLAB ein, von wo aus ich die Funktion aufrufe. Mein Code in Visual Basic sieht so aus: 'Koordinaten des Ursprungs eines Parts ausgeben Function GetOriginX(ByVal i As Integer) As Object Dim pos(11)
Dim productDocument As ProductDocument productDocument = CATIA.ActiveDocument Dim product As Product product = productDocument.Product Dim children As Products children = product.Products Dim position As Object position = children.Item(i).Position position.GetComponents(pos) MsgBox("Läuft") MsgBox(pos(9)) MsgBox(pos(10)) MsgBox(pos(11)) Return pos(9) End Function Mit i werden die einzelnen Parts durchgegangen. Es erscheint in matlab nun die Fehlermeldung: "Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N) to change the limit. Be aware that exceeding your available stack space can crash MATLAB and/or your computer." Wenn ich das Limit erhöhe, schließt sich matlab automatisch udn es geht gar nichts mehr. Kann mir jemand weiterhelfen? Das Problem liegt meiner Meinung nach irgendwo in den Zeilen: position = children.Item(i).Position position.GetComponents(pos) da die Meldung Läuft! nicht erscheint. Danke für Hilfe 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: 20. Jun. 2014 15:25 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Servus Wie nie die MsgBox ausgegeben? Hast du irgendwo die Fehlerbehandlung ausgeschaltet (on error resume next)? Sind manche Products im Rootproduct deaktiviert? Hat i einen realistischen Wert? Stetz mal einen Breakpoint innerhalb der Funktion. Stimmen die Werte der Objekte? Gruß Bernd PS: Bitte Systeminfo ergänzen PS2: Warum übergibst du an die Funktion nur das "i" und nicht auch gleich das RootProduct bzw nur das zu untersuchende Product (Code eher wiederverwendbar) ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadde Mitglied Studentin
Beiträge: 13 Registriert: 14.05.2014 CATIA V5R20 Microsoft Visual Studio 2010 MATAB R2013b
|
erstellt am: 20. Jun. 2014 16:02 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Die Msgbox, die nach der Zeile: position.GetComponents(pos) erscheint nicht. Deshalb muss der Fehler irgendwo davor sein. Ich habe jetzt "on error resume next" hinzugefügt, trotzdem kommt immer noch die gleiche Fehlermeldung. i ist 1 und der Code davor funktioniert auch super, da werden Name und Gewicht der Parts ausgelesen. Catia wird vorher im Programm geöffnet, daher greife ich auf das Product mit Active Document zu. So ist es möglich, alle Products einzulesen, allein durch den Speicherpfad. Ich frage mich, wo die Rekursion sein soll?! Die Funktion GetComponents ist ja richtig, oder? 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: 20. Jun. 2014 16:10 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Servus Bitte das "on error resume next" nur verwenden, wenn du genau weißt was du tust (sonst wird die Fehlersuche sehr schwierig). Führe den Code mal schrittweise aus (du arbeitest doch in VBA oder VB). Läuft der Code so durch wie du möchtest? Wird in Funktion überhaupt aufgerufen? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadde Mitglied Studentin
Beiträge: 13 Registriert: 14.05.2014 CATIA V5R20 Microsoft Visual Studio 2010 MATAB R2013b
|
erstellt am: 24. Jun. 2014 10:55 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Hey! Ich rufe die Funktion aus Matlab auf, deshalb kann ich sie nicht schrittweise in Visual Studio ausführen lassen. Aber ich habe an manchen Stellen die MsgBox eingebaut, dann kann ich sehen, wie weit das Programm funktioniert. Mein Ziel: Ich möchte die Koordinaten des Ursprungs des Koordinatensystems der Parts des im aktiven Dokument geöffneten Products auslesen. Mein aktueller Code sieht so aus: Function GetOriginX(ByVal i As Integer) As Double() Dim pos(11) As Double Dim productDocument As ProductDocument productDocument = CATIA.ActiveDocument Dim product As Product product = productDocument.Product Dim children As Products children = product.Products MsgBox("Läuft0") Dim position As Object MsgBox("Läuft1") position = children.Item(i).Position MsgBox(TypeName(children.Item(i).Position)) ' gibt "Position" aus 'danach ERROR: Message: Typkonflikt. (Ausnahme von HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)) 'Source: Microsoft.VisualBasic() position.GetComponents(pos(9)) MsgBox(pos(9)) 'x-Koordinate des Ursprungs, erscheint aber nicht MsgBox(pos(10)) 'y MsgBox(pos(11)) 'z Return pos End Function Ich habe an der Stelle, an der der Fehler auftritt, einen Kommentar in den Code eingefügt mit der Errormeldung. Kann mir jemand mit der Fehlermeldung weiterhelfen? Als was muss ich position definieren? Wenn ich es als System.Array mache, kommt der Fehler, dass der Wert vom Typ System.Array nicht in Double konvertiert werden kann? Danke!
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: 24. Jun. 2014 11:15 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Servus Dimensioniere mal den Array als Variant. Gruß Bernd PS: Die Zeile "position.GetComponents(pos(9))" müsste doch "position.GetComponents pos" (ggf mit Klammern) heißen? ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 24. Jun. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadde Mitglied Studentin
Beiträge: 13 Registriert: 14.05.2014 CATIA V5R20 Microsoft Visual Studio 2010 MATAB R2013b
|
erstellt am: 24. Jun. 2014 16:26 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Hallo, Als Variant geht es nicht. Ich habe jetzt meinen Code so weit, dass zumindest in der MsgBox der X-Wert mit pos(9), usw. angegeben wird: 'Koordinaten des Ursprungs eines Parts ausgeben Function GetOriginX(ByVal i As Integer) Dim pos(11) As Object Dim productDocument As ProductDocument productDocument = CATIA.ActiveDocument Dim product As Product product = productDocument.Product Dim children As Products children = product.Products children.Item(i).Position.GetComponents(pos)
MsgBox(pos(9)) 'x-Koordinate des Ursprungs MsgBox(pos(10)) 'y MsgBox(pos(11)) 'z Return pos(9) MsgBox("Läuft") End Function Ich möchte nun den Wert als Rückgabewert der Funktion ausgeben und ihn in Matlab in einer Variablen speichern. Hier kommt aber immer der Fehler: Output argument "GetOriginX" (and maybe others) not assigned during call to "C:\Users\master\Desktop\CATIA_Nadine\CatiaLink.m>CatiaLink.GetOriginX". Was muss ich tun? Ist der Code in Visual Studio oder in Matlab falsch? 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: 24. Jun. 2014 16:49 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
|
nadde Mitglied Studentin
Beiträge: 13 Registriert: 14.05.2014 CATIA V5R20 Microsoft Visual Studio 2010 MATAB R2013b
|
erstellt am: 24. Jun. 2014 17:15 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
|
nadde Mitglied Studentin
Beiträge: 13 Registriert: 14.05.2014 CATIA V5R20 Microsoft Visual Studio 2010 MATAB R2013b
|
erstellt am: 25. Jun. 2014 10:26 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Hey! Welche Werte im Array sind die x, y, und z Werte und welche die Vektoren? bezieht sich auf den Post von EmilioSanchez am 29.Juli 2004 [Diese Nachricht wurde von nadde am 25. Jun. 2014 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: 25. Jun. 2014 10:30 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
Servus Schau doch einfach in der Doku (V5Automation.chm) nach. Ein Auszug daraus: Zitat: The array used to store the twelve components retrieved from the objet's position. The first nine represent succcessively the components of the x-axis, y-axis, and z-axis. The last three represent the coordinates of the origin point.
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
EmilioSanchez Mitglied
Beiträge: 78 Registriert: 02.11.2003 Intel I7 4700MQQ 24GB Win10 Pro 64-Bit Catia V5 R19/R26/28/29/30/32
|
erstellt am: 25. Jun. 2014 11:01 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
X-Vektor / X = Pos(0) X-Vektor / Y = Pos(1) X-Vektor / Z = Pos(2) Y-Vektor / X = Pos(3) Y-Vektor / Y = Pos(4) Y-Vektor / Z = Pos(5) Z-Vektor / X = Pos(6) Z-Vektor / Y = Pos(7) Z-Vektor / Z = Pos(8) Ursprung / X = Pos(9) Ursprung / Y = Pos(10) Ursprung / Z = Pos(11) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nadde Mitglied Studentin
Beiträge: 13 Registriert: 14.05.2014 CATIA V5R20 Microsoft Visual Studio 2010 MATAB R2013b
|
erstellt am: 25. Jun. 2014 11:53 <-- editieren / zitieren --> Unities abgeben: Nur für Bartleby
|