| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. |
| |
| KISTERS 3DViewStation: Geniale 3D-Visualisierung für intuitiven HMI Einsatz, eine Pressemitteilung
|
Autor
|
Thema: Koordinatensysteme kongruent setzen (5248 mal gelesen)
|
wulfgang Mitglied
Beiträge: 64 Registriert: 29.04.2007 CATIA V5 R18
|
erstellt am: 18. Feb. 2010 09:40 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen, ich könnte bei folgendem Problem etwas Hilfe gebrauchen. Ich mächte ein Koordinatensystem mit einem anderen kongruent setzen um mir Umrechnungen zu sparen. Beide Koordinatensyteme befinden siich in zwei verschiedenen Parts, die sich wiederum in einem gemeinsamen Part befinden. Zuerst suche ich nach diesem Koordinatensytem:
Code: Dim SelectList As Selection Set SelectList = CATIA.ActiveDocument.Selection SelectList.Clear SelectList.Search "Name=Koordinatensystem;all"
Dies funktioniert auch. Bei dem folgenden Block erhalte ich dann aber als Fehlermeldung: Zitat: Method 'Reference' of object 'SelectedElement' failed
[code]Dim MeinObjekt As Reference Set MeinObjekt = SelectList.Item2(1).Reference[`/code] Anschließend möchte ich noch eine Referenz auf das zweite Koordinatensystem setzen und die beiden Koordinatensysteme mit AddBiEltCst kongruent setzen. Meine Fragen: 1)Ist das so möglich? 2)Wieso bekomme ich diese Fehlermeldung? [Diese Nachricht wurde von wulfgang am 18. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied CAx-Spezialist
Beiträge: 1056 Registriert: 05.08.2000
|
erstellt am: 18. Feb. 2010 10:17 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
|
wulfgang Mitglied
Beiträge: 64 Registriert: 29.04.2007 CATIA V5 R18
|
erstellt am: 18. Feb. 2010 10:28 <-- editieren / zitieren --> Unities abgeben:
|
wulfgang Mitglied
Beiträge: 64 Registriert: 29.04.2007 CATIA V5 R18
|
erstellt am: 18. Feb. 2010 11:36 <-- editieren / zitieren --> Unities abgeben:
Hallo, also wenn ich Dim weglasse erhalte ich immer noch denselben Fehler. Ich habe dann versucht: Dim Anzahl As Integer Anzahl = SelectList.Count2 Dann bekomme ich als Fehlermeldung Zitat: Object required
Wenn ich das Makro ausführe werden bei mir das Koordinatensystem im Strukturbaum farblich hervorgehoben. Das Koordinatensystem kommt dreimal im Strukturbaum vor. Also müsste Count2 ja auch eigentlich 3 zurückgeben. Ich sehe meinen Fehler nicht... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 18. Feb. 2010 12:35 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Wie heissen deine Koordinatensysteme im Strukturbaum? Denn deine Suchabfrage sucht nur nach einem bestimmten Namen. Eventuell solltest du Wildcards(*) verwenden. Überprüfen kannst du deine Ergebnisse mit der Watch-List. Grüsse Dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wulfgang Mitglied
Beiträge: 64 Registriert: 29.04.2007 CATIA V5 R18
|
erstellt am: 18. Feb. 2010 14:16 <-- editieren / zitieren --> Unities abgeben:
Das Koordinatensystem heißt im Strukturbaum auch Koordinatensystem-also genauso wie im Makro. Deswegen dachte ich auch auf Wildcards verzichten zu können. ALso ich habe für SelectList und MeinObjekt watch aktiviert und nach Ablauf des Makros folgende Ausgabe bekommen: Expression Value Type MeinObjekt <Out of context> AnyObject SelectList <Out of contect> Selection Kann ich jetzt irgendwas aus diesen Angaben entnehmen??? Mein Koordinatensystem befindet sich mehrmals im Strukturbaum. Einmal als Publication und dann noch verschachtelt in zwei verschiedenen Parts. Das Koordinatensystem wird ja auch gefunden(Zumindest halt im Strukturbaum farblich hervorgehoben. [Diese Nachricht wurde von wulfgang am 18. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 18. Feb. 2010 14:57 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Die Watch-List kannst du z.B. dazu benutzen dir die CATIA-interne-Struktur anzeigen zu lassen. Oder auch um deine Selection/Suche genauer zu betrachten. Hast du deine Vorgehensweise mal händisch probiert und vielleicht sogar mal mit dem Makrorekorder aufgezeichnet? Grüsse Dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wulfgang Mitglied
Beiträge: 64 Registriert: 29.04.2007 CATIA V5 R18
|
erstellt am: 18. Feb. 2010 15:39 <-- editieren / zitieren --> Unities abgeben:
Ja, händisch habe ich die beiden Koordinatensysteme gleich gesetzt, indem ich alle drei Achsen kongruent gesetzt habe. Das ganze habe ich auch mit dem Makrorecorder aufgezeichnet. Der Makrorecorder hat auch AddBiEltsCst für die Bedingung verwendet. Die Referenz hat er mit CreateReferencFromName erzeugt. Aber ich möchte das Makro so schreiben, dass es halt auch für andere Produkte in denen das eine Koordinatensystem anders bezeichnet ist, verwendbar ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wulfgang Mitglied
Beiträge: 64 Registriert: 29.04.2007 CATIA V5 R18
|
erstellt am: 19. Feb. 2010 12:22 <-- editieren / zitieren --> Unities abgeben:
|
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: 19. Feb. 2010 18:30 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Hallo wulfgang, das was du tun willst geht einwandfrei mit CATIA, du musst dir nur was anderes ausdenken, um die Parts anzusprechen. Als erstes anbei der aufgezeichneter Code (VBA), um 2 Koordinatensysteme koinzident zu definieren (mit Kommentare ergänzt): Code: Sub CATMain()Dim productDocument1 As ProductDocument Set productDocument1 = CATIA.ActiveDocument 'Product, indem du die 2 Parts hast Dim product1 As Product Set product1 = productDocument1.Product Dim constraints1 As Constraints Set constraints1 = product1.Connections("CATIAConstraints") 'Referenz auf den ersten Achsensystem 'Ganz wichtig: Du musst es als Pfad mit Text angeben, und zwar relativ zur nächsten gemeinsamen VaterProduct 'Pfadaufbau: PartNumber_ErsterGemeinsamerVaterproduct/Instancename(solange du am konkreten Part angelangt bist)/!NameDesAchsensystems 'Auch noch wichtig: Refernz auf "product1", also den nächsten gemeinsamen Vater erzeugen Dim reference1 As Reference Set reference1 = product1.CreateReferenceFromName("Product1/Part2.1/!Koordinatensystem") 'Refernz auf den zweiten Achsensystem Dim reference2 As Reference Set reference2 = product1.CreateReferenceFromName("Product1/Part1.1/!Koordinatensystem") 'Ab hier müsstest du die Sachen schon kennen. Dim constraint1 As Constraint Set constraint1 = constraints1.AddBiEltCst(catCstTypeOn, reference1, reference2) product1.Update End Sub
Du sagtest, du kennst die Name der Achsensysteme. Wenn du auch den Pfad (Namen) kennst, dann hast du bereits gewonnen. Es gibt hier in den Foren schon einige Beiträge über Instanzname, PartNumber und Dateiname, du kannst dich da behelfen.Solcher Code habe ich für andere Zwecke schon seit Jahren in Einsatz. Gruß, Zoltan Edit: Hier noch ein Beitrag bezüglich Pfad im Baum für Refernce [Diese Nachricht wurde von zoltan.bekesi am 19. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wulfgang Mitglied
Beiträge: 64 Registriert: 29.04.2007 CATIA V5 R18
|
erstellt am: 21. Feb. 2010 11:54 <-- editieren / zitieren --> Unities abgeben:
|
wulfgang Mitglied
Beiträge: 64 Registriert: 29.04.2007 CATIA V5 R18
|
erstellt am: 21. Feb. 2010 12:38 <-- editieren / zitieren --> Unities abgeben:
Hallo, es ist doch noch eine Frage aufgekommen. Angenommen das zweite Teil hat kein Koordinatensysten und ich will den Ursprung des zweiten Teils kongruent mit einem Koordinatensystem aus dem ersten Teil setzen, kann ich dies ja händisch machen. Ich habe das ganze auch mal aufgezeichnet. Verstehe bloß die Zeile nicht: Code: Set reference2 = product1.CreateReferenceFromName("KongruentKS/TEIL1.1/!Selection_RSur:(Face:(Brp:(AxisSystem.2;1);None:();Cf11:());AxisSystem.2;InSameTool;Z0;G2906)")
Es wird eine Referenz auf eine durch das Koordinatensystem definierte Ebene gesetzt. Kann man das ganze auch nachvollziehbar programmieren Der gesamte Code:
Code: Sub CATMain()Dim productDocument1 As ProductDocument Set productDocument1 = CATIA.ActiveDocument Dim product1 As Product Set product1 = productDocument1.Product Dim constraints1 As Constraints Set constraints1 = product1.Connections("CATIAConstraints") Dim reference1 As Reference Set reference1 = product1.CreateReferenceFromName("KongruentKS/Teil2/!xy-Ebene") Dim reference2 As Reference Set reference2 = product1.CreateReferenceFromName("KongruentKS/TEIL1.1/!Selection_RSur:(Face:(Brp:(AxisSystem.2;1);None:();Cf11:());AxisSystem.2;InSameTool;Z0;G2906)") Dim constraint1 As Constraint Set constraint1 = constraints1.AddBiEltCst(catCstTypeOn, reference1, reference2) constraint1.Orientation = catCstOrientSame product1.Update End Sub
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: 21. Feb. 2010 20:29 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Hallo, das ist nicht so einfach, bzw. nicht möglich. Die Zeile, die du nicht verstehst enthält ein B-Rep-String. Das kann man versuchen nachzubilden, ist aber eine "Spielerei". Es ist nirgendwo sauber dokumentiert (zumindest habe ich bisher nichts gefunden). Ich würde dir raten, ein Achsensystem in beiden Parts zu haben oder die Kongruenz zwischen eindeutig benannte Teile herzustellen (wie z.B. xy-Ebene). Wenn du es unbedingt mit B-Reps versuchen möchtest, gibt es einige Schnipsel sowohl in der Buch von Jens Hansen, als auch bei Ziethen. Da bist du aber so ziemlich auf dich selber hingewiesen. Makros sind eben auch keine Wundermittel. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ivanl Mitglied
Beiträge: 28 Registriert: 21.10.2011 i7 2,80 Ghz 8GB Ram Win XP Pro SP2 CATIA V5 R19 SP9
|
erstellt am: 18. Nov. 2011 17:03 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Hallo zusammen, habe auch gerade die Problematik das ich zwei Koordinatensysteme von zwei verschiedenen Parts aufeinander legen möchte. Ich wollte es auch über Referenzen machen und habe es genauso wie Zoltan gemacht. ---------------------------------------------- Sub CATMain() Set productDocument1 = CATIA.ActiveDocument Set product1 = productDocument1.Product Set products1 = product1.Products Dim constraints1 As Constraints Set constraints1 = product1.Connections("CATIAConstraints") Dim ref2 As Reference Set ref2 = product1.CreateReferenceFromName("Part1.1/!Axis System.1") Dim ref1 As Reference Set ref1 = product1.CreateReferenceFromName("Part2.1/!Axis System.1") Dim constraint1 As Constraint Set constraint1 = constraints1.AddBiEltCst(catCstTypeOn, ref2, ref1) product1.Update End Sub -------------------------------------------------- Soweit funktioniert es einwandfrei! Jetzt wollte ich das Programm erweitern, indem die Parts eine Ebene tiefer in einem weiteren Product liegen. Dabei entstehen Probleme die ich nicht so recht nachvollziehen kann, da ich das Programm dementsprechend einfach nur ergäntzt habe. ------------------------------------------------------------ Sub CATMain() Set productDocument1 = CATIA.ActiveDocument Set product1 = productDocument1.Product Set products1 = product1.Products Set product2 = products1.Item("Product2.1") Dim constraints1 As Constraints Set constraints1 = product2.Connections("CATIAConstraints") Dim ref2 As Reference Set ref2 = product2.CreateReferenceFromName("Product2.1/Part3.1/!Axis System.1") Dim ref1 As Reference Set ref1 = product2.CreateReferenceFromName("Product2.1/Part4.1/!Axis System.1") Dim constraint1 As Constraint Set constraint1 = constraints1.AddBiEltCst(catCstTypeOn, ref2, ref1) product1.Update End Sub ------------------------------------------------------------- Wäre Super wenn jemand kurz drüber schauen kann und mir sagen kann was ich falsch mache. Grüße Ivanl 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: 18. Nov. 2011 20:02 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Servus Versuch mal deine Unterbaugruppe das Product (=ReferenceProduct) anzusprechen und dabei nicht die Instanze. Ändere mal die Zeile: Code: Set product2 = products1.Item("Product2.1").ReferenceProduct
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ivanl Mitglied
Beiträge: 28 Registriert: 21.10.2011 i7 2,80 Ghz 8GB Ram Win XP Pro SP2 CATIA V5 R19 SP9
|
erstellt am: 19. Nov. 2011 08:36 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
|
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 24. Jan. 2012 10:17 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Hallo, ich versuche gerade das Beispiel von Ivanl nach zu stellen. Jedoch klappt es bei mir nicht. Es wird zwar eine Bedingung erzeugt aber ohne Funktion! Der Code ist eigentlich bis auf die Benennung der Features der gleiche ist aber unten noch einmal angehangen, sowie ein Screenshot von der Baumstruktur. Folgendes steht in der Reference wennn ich mir diese im VBAEditor anschaue: : DisplayName : "Product2/Part2.1/!Product2/Part2.1/" : String : Module7.CATMain Müsste dort nicht normalerweise das Achsensystem auch auftauchen?
Code:
Sub CATMain()Set productDocument1 = CATIA.ActiveDocument Set product1 = productDocument1.Product Set products1 = product1.Products Set product2 = products1.Item("Product2.1").ReferenceProduct Dim constraints1 As Constraints Set constraints1 = product2.Connections("CATIAConstraints") Dim ref2 As Reference Set ref2 = product2.CreateReferenceFromName("Product2.1/Part1.1/!Axis System.2") Dim ref1 As Reference Set ref1 = product2.CreateReferenceFromName("Product2.1/Part2.1/!Axis System.2") Dim constraint1 As Constraint Set constraint1 = constraints1.AddBiEltCst(catCstTypeOn, ref2, ref1) product1.Update End Sub
Irgendwie finde ich den Fehler nicht. Vielen Dank für eure Hilfe! Gruß Tobi 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. Jan. 2012 17:52 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Servus Also bei mir funktioniert dein Script. Hast du vielleicht eingestellt, dass nur zwischen veröffentlichen Objekten Bedingungen erstellt werden können? (geht die Erstellung der Bedingung "von Hand"?) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 24. Jan. 2012 18:16 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Hallo Bernd, Vielen Dank für deine Antwort. Ich bin mir ziemlich sicher das ich Publications ausgestellt habe. Kann ich aber erst morgen überprüfen. Wenn ich die Bedingung in dem Root Product erstelle mittels des Makros klappt es auf jeden Fall. Was ja dafür sprechen würde das nicht veröffentlicht werdenn muss. Per Hand hat es auch immer beim makro aufzeichnen geklappt. Dasist ja schon sehr komisch das es bei mir nicht klappt und bei dir schon. Was wird bei dir denn bei Referenz angezeigt wenn du die Variable überwachst? Das gleiche wie bei mir? Danke für deine Hilfe! Gruß Tobi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 27. Jan. 2012 10:26 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Hallo Bernd, ich habe jetzt in den Tools Optionen nachgeschaut, aber es macht keinen Unterschied bei mir, ob ich restrict to publications an habe oder nicht. Per Hand kann ichs immer erstellen per Makro kommt immer das gelbe Ausrufezeichen, die Achsensysteme zu veröffentlichen hat auch nicht geholfen. Ich versteh einfach nicht warum es bei dir funktioniert und bei mir nicht...hast du meinen Code eins zu eins übernommen? Wenn ja was wird denn bei dir angezeigt wenn du dir die Variable der Referenz anschaust das gleiche wie bei mir? Vielen Dank für deine Hilfe! Weiß vielleicht doch noch jmd. ne Option die ich überprüfen könnte? Gruß Tobi 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: 27. Jan. 2012 10:33 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
Servus Ja, ich hab den Code 1: 1 übernommen. Bei der Referenz wird bei mir auch so was wie "Product2/Part2.1/!Product2/Part2.1/" angezeigt (also nicht das Achsensystem-Objekt) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tobiley Mitglied Masterstudent
Beiträge: 59 Registriert: 15.02.2010 Win XP CatiaV5 R17, R18, R19 HD2-Lizenz VB2008
|
erstellt am: 27. Jan. 2012 15:57 <-- editieren / zitieren --> Unities abgeben: Nur für wulfgang
|