| |
| KISTERS 3DViewStation: 3D-Heatmaps für aussagekräftige Machbarkeitsanalysen, eine Pressemitteilung
|
Autor
|
Thema: Skizze im Raum Ausrichten (7559 mal gelesen)
|
jojoCAD Mitglied
Beiträge: 3 Registriert: 27.10.2006
|
erstellt am: 27. Okt. 2006 11:03 <-- editieren / zitieren --> Unities abgeben:
Hallo Ich möchte ein komplexes Bauteil per CATIA V5 Makro erstellen- das funktioniert soweit gut. Mein Problem ist: Ich erstelle Skizzen (darin Rechtecke) und nutze diese dann um Quader zu extruieren. Für mich ist wichtig das die Skizzen eine bestimmte Ausrichtung haben. Manuell (also ohne Makro) richte ich sie an einer Ebene und einer Linie aus. Manuell ist das kein Problem. Leider bietet CATIASkript keine Methode an um eine Skizze mit einer Linienreferenz zu erzeugen. (Sketch.SetAbsoluteAxisData funzt in dem Fall nicht- habe keine Richtungsvektoren) So will ich jetzt ein neues Achsensystem erzeugen- soweit kein Problem. Nur soll in dem Achsensystem nur die X und Y Achse definiert sein. Die Z Achse soll sich dann ergeben. (Manuell bedeutet das: Z-Achse--> keine Auswahl) Wenn man das Makro (Siehe .txt) aber startet richtet sich das Achsensystem an einem z-Array aus das ich gar nicht definiert habe- löscht man nachträglich in der Definition des Achsensystems dann diese Orientierung (nach Koordinaten) dann richtet es sich so aus wie ich will. Nun meine Frage. gibt es eine Methode die der Achsendefinition sagt das die Z-Achsenrichtung nicht explizit ausgewählt sein soll??? die .txt Datei im Anhang beschreibt mein Problem Vielen Dank für Eure Hilfe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jojoCAD Mitglied
Beiträge: 3 Registriert: 27.10.2006
|
erstellt am: 01. Nov. 2006 09:43 <-- editieren / zitieren --> Unities abgeben:
|
jojoCAD Mitglied
Beiträge: 3 Registriert: 27.10.2006
|
erstellt am: 03. Nov. 2006 11:20 <-- editieren / zitieren --> Unities abgeben:
Problem gelöst: Habe die Richtungen der 2 bekannten Stützelemente ermittelt (Methode: .getDirection / HybridShapeFactory) von denen dann das Vektorprodukt errechnet und diese Richtung dann der unbekannten Achse des neuen Achsensystems übergeben- funktioniert gut. axisSystem1.XAxisType = catAxisSystemAxisByCoordinates axisSystem1.PutXAxis Vektorprod Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AlfaRomeo75 Mitglied Dipl.Ing. - Flächenkonstrukteur/Methodenplaner
Beiträge: 174 Registriert: 06.12.2004 ----------------- Windows XP professional Version2002 Service Pack 2 ----------------- CATIA V5 R16 SP5 ----------------- Intel Pentium 4 3,4GHz 4 GB RAM -----------------
|
erstellt am: 07. Nov. 2006 08:53 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
Hallo jojo, schön das Du bereits eine Lösung gefunden hast! Das Problem hatte ich auch mal mit dem Positionien von Skizzen! Habe mir dann auch über das Auslesen der Richtungsvektoren geholfen und damit die Skizze ausgerichtet. Bei mir ist es leider so, das die Skizzen recht häufig auf parametriesierten Achsensystemen liegen und wenn man die dann ändert, ändert sich die Skizzenausrichtung natürlich nicht, da die Lösung nicht assiozativ ist! Hierfür gibt es, glaube ich, leider keine Lösung! Meine Hoffnung ist allerdings ab R16 eine Powercopy in mein Makro einbauen zu können über die ich eine Skizze positionieren kann (assiozativ!). ------------------ ------------------------------------------------- Gruß, AlfaRomeo75 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
INLU Mitglied Konstrukteur Automotive
Beiträge: 71 Registriert: 01.03.2008
|
erstellt am: 16. Jun. 2008 20:40 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
Hallo Zusammen, ich weiß, das dieser Beitrag schon älter ist, aber ich glaube das hier mein Problem am besten hinein passt! Mein Problem ist der wahrscheinlich der Syntax beim erzeugen einer Sketchausrichtung mit SetAbsoluteAxisData. Ich versuche einen Sketch nach einer Achse auszurichten. Leider bekommen Ich immer folgende Meldung: Objekt unterstützt die Eigenschaft oder Methode nicht. Hier der Code: Set hybridBodies1 = Meinpart.HybridBodies Set hybridBody1 = hybridBodies1.Add ...... 'Sketchausrichtung von selektierter Achse Dim sketchorigin(2) As Double Dim sketchdirection(8)as Double selaxe.GetXAxis xdirection selaxe.GetYAxis ydirection selaxe.GetZAxis zdirection selaxe.GetOrigin sketchorigin sketchdirection(0) = sketchorigin(0): sketchdirection(1) = sketchorigin(1): sketchdirection(2) = sketchorigin(2) sketchdirection(3) = xdirection(0): sketchdirection(4) = xdirection(1): sketchdirection(5) = xdirection(2) sketchdirection(6) = ydirection(0): sketchdirection(7) = ydirection(1): sketchdirection(8) = ydirection(2) .... Set Skizzen = hybridBody1.HybridSketches Set Skizze = Skizzen.Add(ebene1) Skizzen.SetAbsoluteAxisData sketchdirection <---- Mein Problemfall .... end sub Das ganze ist ein VBA-Projekt.
Wo liegt mein Fehler? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
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: 17. Jun. 2008 08:14 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
Hallo INLU, ich habe es jetzt nicht ausprobiert, aber ich glaube dein problem ist, dass dein Array falsch definiert ist. Zum einen muss es glaube ich Variant sein und von 0 bis 8 gehen, also 9 für alle zwei Richtungsvektoren und zuvor den Startpunkt absolut zum Koordinatenursprung. Mach ersmtal GetAbsolutAxisData und schau dir das Array an, steht auch in der OnlineDoku. MfG Lila 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: 17. Jun. 2008 17:57 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
Hallo INLU, Es wäre (ohne es getestet zu haben) ungefähr so richtig: Code: Set hybridBodies1 = Meinpart.HybridBodies Set hybridBody1 = hybridBodies1.Add ...... 'Sketchausrichtung von selektierter Achse Dim sketchorigin(2) 'As Double Dim sketchdirection(8) 'as Double 'array sollte, wie HoBLila erwähnte, als Variant deklariert sein selaxe.GetXAxis xdirection selaxe.GetYAxis ydirection selaxe.GetZAxis zdirection selaxe.GetOrigin sketchorigin sketchdirection(0) = sketchorigin(0): sketchdirection(1) = sketchorigin(1): sketchdirection(2) = sketchorigin(2) sketchdirection(3) = xdirection(0): sketchdirection(4) = xdirection(1): sketchdirection(5) = xdirection(2) sketchdirection(6) = ydirection(0): sketchdirection(7) = ydirection(1): sketchdirection(8) = ydirection(2) .... Set Skizzen = hybridBody1.HybridSketches Set Skizze = Skizzen.Add(ebene1) Skizze.SetAbsoluteAxisData sketchdirection '<---- Mein Problemfall ' ^hier war ein n zuviel '.... end sub
Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
INLU Mitglied Konstrukteur Automotive
Beiträge: 71 Registriert: 01.03.2008
|
erstellt am: 18. Jun. 2008 21:01 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
Hallo Lila, Hallo Zoltan danke für die Antworten. Leider führen sie in meinem Fall nicht zum Erfolg. Ich versuche das Problem etwas simpler zu gestalten. Folgender Code soll nur, wie Lila beschrieben, die Vektoren der Skizzenachse auslesen. Beim Start bekomme ich eine Fehlermeldung (siehe Anhang). Ihr könnt es ja mal selber Probieren. Ich habe es auch mit Variant als Datentyp probiert. code: Dim geoele As HybridBody Dim hb1 As HybridBodies Dim meinpart As Part Dim skizzen As Sketches Dim skizze As Sketch Dim ursprungselemente, ebene Dim skachse(8) Sub catmain() Set meinpart = CATIA.ActiveDocument.Part Set hb1 = CATIA.ActiveDocument.Part.HybridBodies Set geoele = hb1.Add geoele.Name = "test" Set skizzen = geoele.HybridSketches Set ursprungselemente = meinpart.OriginElements Set ebene = ursprungselemente.PlaneXY Set skizze = skizzen.Add(ebene) meinpart.Update skizze.GetAbsoluteAxisData = skachse End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 18. Jun. 2008 22:47 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
Hallo INLU, probiere es mal mit folgender Variante: Code: Dim geoele As HybridBody Dim hb1 As HybridBodies Dim meinpart As Part Dim skizzen As Sketches Dim skizze As Sketch Dim ursprungselemente, ebene Dim skachse()Sub catmain() Set meinpart = CATIA.ActiveDocument.Part Set hb1 = CATIA.ActiveDocument.Part.HybridBodies Set geoele = hb1.Add geoele.Name = "test" Set skizzen = geoele.HybridSketches Set ursprungselemente = meinpart.OriginElements Set ebene = ursprungselemente.PlaneXY Set skizze = skizzen.Add(ebene) meinpart.Update ReDim skachse(8) skizze.GetAbsoluteAxisData skachse End Sub
mfg, Lusilnie
------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
INLU Mitglied Konstrukteur Automotive
Beiträge: 71 Registriert: 01.03.2008
|
erstellt am: 19. Jun. 2008 07:50 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
Hallo Lusilnie, leider bekomme ich bei Deinem Code die gleiche Fehlermeldung wie bei meinem. Kann es sein, daß eine Bibliothek nicht geladen ist? Ich kann mit der Fehlermeldung nichts anfangen. Wenn ich die Klasse anspreche, also skizzen.GetAbsoluteAxisData skachse, dann bekomme ich die Fehlermeldung, daß mir ein Objekt fehlt(Wer hätte das gedacht). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
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: 19. Jun. 2008 08:13 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
*g* ohh sorry, dass ich das nicht gestern Abend gleich gelsen habe, aber war zu müde... Also dein Problem ist eine VB6 typische Sache, die mir damals als ich damit anfing VB Programmierung für CATIA wirklich viel Zeit und nerven gekostet hat, du wirst noch auf viele andere socleh Sachen Treffen. Die Lösung deines Problems ist denkbar einfach, wenn auch unlogisch. Deine Skizze muss vom Objekttyp Object sein. Frag mich nicht nach Sonnenschein, aber wenn VB deine Bibliotheken genau kennt, dann klappen die Übergaben oft nicht richtig, du musst etwas in's blaue Programmierung die Methoden der Skizze und Co genau kennen, denn nur an Objecte kannst du ByRef, wie in diesem Fall an eine externe Schnittstelle übergeben. ByRef daher, dass du ja in deinem Array dann die Werte drin stehen haben willst. Mal davon abgesehen, dass Arrays nur ByRef übergeben werden können... Gleiche nproblem wirst Du auch bei GetCoordinates() und Co bekommen. MfG Lila Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
INLU Mitglied Konstrukteur Automotive
Beiträge: 71 Registriert: 01.03.2008
|
erstellt am: 19. Jun. 2008 18:15 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
Hallo Lila, so hat es funktioniert! Für Alle noch einmal die Lösung: --------------------------- Dim geoele As HybridBody Dim hb1 As HybridBodies Dim meinpart As Part Dim skizzen As Sketches Dim skizze As Object Dim ursprungselemente, ebene Dim skachse(8) Dim ueb(8) As Double Sub catmain() Set meinpart = CATIA.ActiveDocument.Part Set hb1 = CATIA.ActiveDocument.Part.HybridBodies Set geoele = hb1.Add geoele.Name = "test" Set skizzen = geoele.HybridSketches Set ursprungselemente = meinpart.OriginElements Set ebene = ursprungselemente.PlaneXY Set skizze = skizzen.Add(ebene) ueb(0) = 0: ueb(1) = 0: ueb(2) = 0 ueb(3) = 0: ueb(4) = -1: ueb(5) = 0 ueb(6) = 0: ueb(7) = 0: ueb(8) = 1 skachse(0) = ueb(0): skachse(1) = ueb(1): skachse(2) = ueb(2) skachse(3) = ueb(3): skachse(4) = ueb(4): skachse(5) = ueb(5) skachse(6) = ueb(6): skachse(7) = ueb(7): skachse(8) = ueb(8) skizze.SetAbsoluteAxisData skachse meinpart.Update End Sub ------------------------------ Wichtig ist auch, das der Datentyp für ueb(8) auf Double steht, da sonst der Typ integer an das Array weitergegeben wird! Super! Danke an Euch!!! P.S.: Gibt eine einfachere Möglichkeit ein Array in ein anderes zu schreiben?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
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: 19. Jun. 2008 18:51 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
Hallo INLU, freut mich, dass du's hast. Einfache möglichkeit zwei Arrays gleich zu setzen kenne ich leider nicht, würde auch behaupten, dass das in VB nicht geht. Einzige Möglichkeit wäre also eine For Schleife For i = 0 to ubound(Array1) Array2(i) = Array1(i) Next i MfG Lila Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 20. Jun. 2008 01:33 <-- editieren / zitieren --> Unities abgeben: Nur für jojoCAD
Hallo HoBLila, hallo INLU, theoretisch sollte auch Code: Array2 = Array1
funktionieren. Praktisch funktioniert es einmal und einmal eben nicht. Habe leider noch keine Erklärung dafür gefunden und nehme somit meist die Variante der For-Next-Schleife von "HoBLila". mfg, Lusilnie
------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |