Autor
|
Thema: Assembly-Design - Sectioning -> Schnitte durch Makro als CATPart abspeicher (2933 mal gelesen)
|
scholzro Mitglied
Beiträge: 27 Registriert: 12.09.2003
|
erstellt am: 10. Jul. 2006 13:27 <-- editieren / zitieren --> Unities abgeben:
Hallo V5-Experten! Ich habe einem Assembly mehrere CATParts, die Anhand von 6 (in einem der Parts definierten) Ebenen geschnitten werden sollen. Die Schnittgeometrien soll dann wiederum als CATParts abgespeichert werden. Ich habe versucht, dies als Makro zu "recorden", bekommen jedoch beim ausführen die folgende Fehlermeldung: "The scripting engine for MS VBScript has reportet the following error: Source: CATIADocuments Description: The method Item failed" Wie kann man dies umgehen? Gruß scholzro Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tapani. Mitglied
Beiträge: 56 Registriert: 12.05.2006
|
erstellt am: 10. Jul. 2006 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für scholzro
moin, beim Recorden von Makros werden für den Zugriff per .Item immer die Namen der Objekte verwendet, z.B. Documents.Item("Product1.CATProduct"). Beim zweiten Durchlauf des Makros heißt das Objekt aber meist anders z.B. "Product2.CATProduct". Willst du nur auf das aktuelle Dokument zugreifen ist CATIA.ActiveDocument.... der einfachste Weg. Und wenn du über alle Elemente eine Collection interieren willst, bietet sich der Zugriff über den Index an: For i = 1 to Documents.Count dosomething Documents.Item(i) next CU Tapani ------------------ Don't take life so seriously.... it's not a permanent condition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scholzro Mitglied
Beiträge: 27 Registriert: 12.09.2003
|
erstellt am: 10. Jul. 2006 14:59 <-- editieren / zitieren --> Unities abgeben:
hallo tapani, vielen dank für deine antwort. habe gleich einmal den code geändert:
Code: Language="VBSCRIPT"Sub CATMain() Set windows1 = CATIA.Windows Set documents1 = CATIA.Documents Set partDocument1 = documents1.Item("CATIA.ActiveDocument") Set part1 = partDocument1.Part Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Add() End Sub
es kommt jedoch wieder die gleiche fehlermeldung mit verweis auf die zeile "Set partDocument1 = documents1.Item("CATIA.ActiveDocument")" außerdem kann ich auch in dem quelltext, der ja meine schritte recorded hat, gar nicht so etwas wie - sectioning starten - umschalten auf positioning - Geometrical target - auswahl der ebene - abspeichern des Schnittes über Result finden... kann es sein, dass dies gar nicht mit aufgezeichnet wurde? gruß scholzro Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 10. Jul. 2006 22:21 <-- editieren / zitieren --> Unities abgeben: Nur für scholzro
Hallo scholzro, ist klar, daß die Fehlermeldung wieder kommt, denn die Zeile muß entweder so: Set partDocument1 = CATIA.ActiveDocument oder so: Set partDocument1 = documents1.Item(CATIA.ActiveDocument.Name) lauten. Zu Deinem zweiten Problem: Der Script-Recorder spiegelt leider nicht alles wieder, was Du tust. (Die Gründe dafür wissen nur Gott, DassaultSystemes oder andere "tief Innvolvierte". ) Da bleibt Dir nur das "Zusammenbasteln" mit Hilfe der "Automotion-Help"! 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 |
scholzro Mitglied
Beiträge: 27 Registriert: 12.09.2003
|
erstellt am: 11. Jul. 2006 08:54 <-- editieren / zitieren --> Unities abgeben:
hallo lusilnie, vielen dank für deine antwort. habe angefangen die "automation help" zu durchkämmen, bin aber nicht so richtig schlau draus geworden. kann mir jemand die VBSCRIPT-befehle für - starten des sectioning - schneiden durch eine existierenden ebene (feature name: z.b. schnitt x=250) nennen? für - abspeichern des schnittes als catpart habe ich folgendes gefunden: Code: Dim PartDoc As Document PartDoc = NewSection.Export
könnte das so klappen? würde mich über eine hilfestellung sehr freuen. gruß scholzro Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tapani. Mitglied
Beiträge: 56 Registriert: 12.05.2006
|
erstellt am: 11. Jul. 2006 10:44 <-- editieren / zitieren --> Unities abgeben: Nur für scholzro
moin, was du bräuchtest ist wohl die Funktion AddNewSplit oder AddNewHybridSplit des Objektes ShapeFactory bzw. HybridShapeFactory. Wie das genau geht findest du dann in der Hilfe unter den beiden letztgenannten Objekten. z.B. set hybFact = CATIA.ActiveDocument.Part.HybridShapeFactory '(angenommen ein CATPart ist geöffnet) set newSplit = hybFact.AddNewHybridSplit(Ref1,Ref2,1) wobei Ref1 & 2 Referenzen auf das zu schneidende Objekt bzw. die Ebene sind. Am besten erzeugt mit CATIA.ActiveDocument.Part.CreateReferenceFromObject. CU tapani ------------------ Don't take life so seriously.... it's not a permanent condition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scholzro Mitglied
Beiträge: 27 Registriert: 12.09.2003
|
erstellt am: 11. Jul. 2006 13:37 <-- editieren / zitieren --> Unities abgeben:
Moin tapani, danke für deine antwort. Leider blicke ich noch immer nicht durch bzw. copy & paste des quelltextes klappt nicht. Noch mal meine aufgabe: - in einem produkt sind mehrere teile darstellt, die geschnitten werden sollen. - Ein part enthalt eine plane, an der geschnitten werden soll. m.e. muss dies über die „sectioning“ funktion (space analysis) laufen. Sind die von dir genannten funktionen / quellcode dafür geeignet? Gruß scholzro Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tapani. Mitglied
Beiträge: 56 Registriert: 12.05.2006
|
erstellt am: 11. Jul. 2006 15:48 <-- editieren / zitieren --> Unities abgeben: Nur für scholzro
moin, nö, sind sie nicht. Dann musst du mit GetTechnologicalObject arbeiten. z.B. set secs = CATIA.ActiveDocument.Product.GetTechnologicalObject("Sections") ' Annahme: das ActiveDocument ist ein CATProduct! Mit einer der Add-Funktionen des Sections-Objektes kannst du dann eine neue Section erstellen und danach an deren Properties rumschrauben... z.B. SetPosition zum setzen der Schnittebene Allerdings entsteht dabei keine geschnittene Geometrie, d.h. die bestehende Geometrie wird nicht verändert. Außerdem ist m.e. pro Section nur eine Schnittebene möglich... Ich hoffe es hilft trotzdem CU tapani ------------------ Don't take life so seriously.... it's not a permanent condition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scholzro Mitglied
Beiträge: 27 Registriert: 12.09.2003
|
erstellt am: 12. Jul. 2006 08:14 <-- editieren / zitieren --> Unities abgeben:
hallo tapani! danke für info. habe nun folgenden code: Code: Language="VBSCRIPT"Sub CATMain() Set windows1 = CATIA.Windows set secs = CATIA.ActiveDocument.Product.GetTechnologicalObject("Sections") Dim NewSection As Section Set NewSection = TheSections.Add End Sub
danach product mit den zu schneidenden teilen aufgerufen und makro gestartet. habe erwartet, dass er dann das sectioning aufruft und eine (zunächst beliebig positionierte schnittebene erstellt. aber leider: "The scripting engine for MS VBScript has the following error:Source: Kompilierungsfehler in Microsoft VBScript Description: Anweisungsende erwartet Statement: Dim NewSection As Section Line: 9 Column: 15" was nun? gruß scholzro
[Diese Nachricht wurde von scholzro am 12. Jul. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tapani. Mitglied
Beiträge: 56 Registriert: 12.05.2006
|
erstellt am: 12. Jul. 2006 09:18 <-- editieren / zitieren --> Unities abgeben: Nur für scholzro
moin, frag mich nicht warum, aber unter VB-Script darf die Variablendeklaration kein "as <Objekttyp>" enthalten. Richtig wäre demnach Dim NewSection Set NewSection = TheSections.Add Und um noch ein bischen Tipparbeit zu sparen kannst du sogar das Dim-Statement ganz weglassen CU Tapani ------------------ Don't take life so seriously.... it's not a permanent condition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scholzro Mitglied
Beiträge: 27 Registriert: 12.09.2003
|
erstellt am: 12. Jul. 2006 09:44 <-- editieren / zitieren --> Unities abgeben:
geht leider auch so immer noch nicht. fehlermeldung: "Description: Anweisungsende erwartet"
Code: Language="VBSCRIPT"Sub CATMain() Set windows1 = CATIA.Windows set secs = CATIA.ActiveDocument.Product.GetTechnologicalObject("Sections") Dim NewSection Set NewSection = TheSections.Add
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 12. Jul. 2006 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für scholzro
|
scholzro Mitglied
Beiträge: 27 Registriert: 12.09.2003
|
erstellt am: 12. Jul. 2006 13:37 <-- editieren / zitieren --> Unities abgeben:
hi tomtom, danke, jetzt legt er zumindest schon einmal die neue section an. wie kann den quelltext erweitern, um - die section auf eine im catpart bestehende ebene zu packen (manuell: section definition - positioning - geometrical target - selektieren der ebene, z.b. "schnittebene 1") - das gleiche wiederholen mit ebenen 2-6 - abspeichern der sections als catparts (manuell: section definition - result - export as- namensgebung z.b. "teil x, schnittebene [1...6]") gruß scholzro Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scholzro Mitglied
Beiträge: 27 Registriert: 12.09.2003
|
erstellt am: 13. Jul. 2006 06:55 <-- editieren / zitieren --> Unities abgeben:
|
Tapani. Mitglied
Beiträge: 56 Registriert: 12.05.2006
|
erstellt am: 13. Jul. 2006 09:31 <-- editieren / zitieren --> Unities abgeben: Nur für scholzro
moin, nun, so luxuriös wie im click-Interface kommt die Scripting-API nicht daher. Dir wird nix weiter übrig bleiben, als die Position und Lage der Ebenen in Transformationsmatrizen umzurechnen und per SetPosition auf die Section anzuwenden. Geht natürlich nur mit einer Schnittebene pro Section. Zum Abspeichern bleibt nur die Export-Funktion. Mehr ist m. E. nicht drin... CU Tapani ------------------ Don't take life so seriously.... it's not a permanent condition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scholzro Mitglied
Beiträge: 27 Registriert: 12.09.2003
|
erstellt am: 13. Jul. 2006 09:47 <-- editieren / zitieren --> Unities abgeben:
hi tapani, danke für antwort. habe vorgehensweise verstanden, brauche aber, da ich noch blutiger anfänger bin ein paar tipps, wie ich dass ins vbscript umsetzen kann. 1. auslesen der transformationsmatrizen aus vorhandenen planes in CATPart-> erzeugen der sections im product an den vorgegeben stellen 2. automatisiertes abspeichern gruß scholzro Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tapani. Mitglied
Beiträge: 56 Registriert: 12.05.2006
|
erstellt am: 14. Jul. 2006 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für scholzro
moin, hier der einfachste Fall: ein Product mit einem Part, im Part ist belibige Geometrie im Hauptkörper definiert und im ersten Hybridbody (Geometrisches Set in der Übersetzung) ist die Schnittebene als Ebene definiert. Code: sub CATMain() Dim fa(2), sa(2), op(2), mat(11) set plane1 = CATIA.ActiveDocument.Product.Products.Item(1).ReferenceProduct.Parent.Part.HybridBodies.Item(1).HybridShapes.Item(1) plane1.GetFirstAxis fa plane1.GetSecondAxis sa plane1.GetOrigin op set secs = CATIA.ActiveDocument.Product.GetTechnologicalObject("Sections") set sec = secs.Add() mat(0) = fa(0) mat(1) = fa(1) mat(2) = fa(2) mat(3) = sa(0) mat(4) = sa(1) mat(5) = sa(2) mat(6) = fa(1) * sa(2) - fa(2) * sa(1) mat(7) = fa(2) * sa(0) - fa(0) * sa(2) mat(8) = fa(0) * sa(1) - fa(1) * sa(0) mat(9) = op(0) mat(10) = op(1) mat(11) = op(2) sec.SetPosition mat end sub
Wenn der Baum komplizierter wird und die Knoten zwischen dem Product, indem die Section erstellt wird, und dem Knoten in dem sich die Plane befindet, nicht die Einheitsmatrix aufweisen müssen diese Matrizen noch in "mat" reinmultipliziert werden... Bezüglich des Speicherns: Jedes Document-Objekt hat eine Methode "Save" und "Save As"... CU Tapani ------------------ Don't take life so seriously.... it's not a permanent condition Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scholzro Mitglied
Beiträge: 27 Registriert: 12.09.2003
|
erstellt am: 17. Jul. 2006 15:42 <-- editieren / zitieren --> Unities abgeben:
|
der-quest Mitglied
Beiträge: 70 Registriert: 09.06.2005
|
erstellt am: 12. Mrz. 2009 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für scholzro
Hallo, nachdem ein auf diesem Beitrag basierendes Schnitte-Makro schon seit Monaten (Jahren?) im Einsatz ist, habe ich ein Fehlverhalten feststellen müssen. Je nach Anzahl der Schnittebenen und den zu schneidenden Geometrien werden die Kurven unterschiedlich exportiert: Mal in der Farbe des geschnittenen Bauteiles, mal in weiß, manchmal keinem festen Muster folgend. Bin ich hier an eine Grenze CATIAs gestoßen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |