Autor
|
Thema: Aufmassfläche via Makro (1848 mal gelesen)
|
CabinMaster Mitglied Diplomingenieur L&R
Beiträge: 19 Registriert: 31.07.2009 Windows XP Catia V5 R18 [und nein: Katja mag nur einen Prozessor zur Zeit benutzen] Makro mit CATVBS
|
erstellt am: 04. Aug. 2009 08:44 <-- editieren / zitieren --> Unities abgeben:
Guten Tag! Ich bin noch Neuling in der Makroprogrammierung und generell mit CATIA (wir kennen uns erst seit knapp zwei Wochen). Natürlich stolpert man über vieles, oder eigentlich anfangs über alles, aber meist findet sich ne Lösung mit Makroaufzeichung, Buch oder diesem Forum. Bei folgendem Problem bin ich allerdings etwas gekniffen: ich erstelle aus (sehr!) vielen Punkten Splines, welche ich zu einem Loft zusammen füge. Dafür habe ich als Grundlage das CATIA-interne Excel Makro als Basis genommen. Schlussendlich habe ich die Sache aber so angepasst, dass alle Punkte direkt aus einer ASCII Datei geladen werden. Klappt auch gut, Splines und Lost entstehen wie gewünscht. Siehe Bild: Will ich dies allerdings zu einer Aufmaßfläche machen, gibt es einen Laufzeitfehler. Das erstaunliche: die manuelle Aktion funktioniert. Allerdings kommt es bei der manuellen Aktion zu einer Warnung, welche mit OK übergangen werden kann. Die Warnung: "Das aktuelle Objekt in Bearbeitung befindet sich nicht in einem Körper. Die neue Volumenkomponente wird hinter der letzten Komponente des Hauptkörpers erzeugt." Kurz die relevanten Textzeilen meines Makros:
Code: [...laufende For-Schleife ...] ' create the points For k = 1 To Points Set PointArray(k) = Wzk3D.AddNewPointCoord(x(frame_number),y(k),z(k)) If MakePoints Then Victim.AppendHybridShape PointArray(k) CS.Part.Update CATIA.ActiveWindow.ActiveViewer.Reframe End If Next Set spline = CS.Part.HybridShapeFactory.AddNewSpline spline.SetSplineType 0 spline.SetClosing 0 'Creates and adds points to the spline For i = 1 To counter Set ReferenceOnPoint = CS.Part.CreateReferenceFromObject(PointArray(i)) spline.AddPointWithConstraintExplicit ReferenceOnPoint, Nothing, -1, 1, Nothing, 0 Next If MakeSplines Then Victim.AppendHybridShape spline CS.Part.Update CATIA.ActiveWindow.ActiveViewer.Reframe End If ' Do the loft Set LocalRefSpline = CS.Part.CreateReferenceFromGeometry(spline) Loft.AddSectionToLoft LocalRefSpline, 1, Nothing Loft.Name = "Fuselage Shell" Next ' create Loft Victim.AppendHybridShape Loft CS.Part.Update ' create object with finite thickness Set Fuselage = CS.Part.ShapeFactory.AddNewThickSurface(Loft, 0, 1.000000, 0.000000) Set Stuff = Fuselage.TopOffset Stuff.Value = 3.000000
Die letzte Aktion mit AddNewThickSurface schlägt fehl. Hat jemand Ideen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CabinMaster Mitglied Diplomingenieur L&R
Beiträge: 19 Registriert: 31.07.2009 Windows XP Catia V5 R18 [und nein: Katja mag nur einen Prozessor zur Zeit benutzen] Makro mit CATVBS
|
erstellt am: 04. Aug. 2009 08:52 <-- editieren / zitieren --> Unities abgeben:
Hier noch ein Bild während der manuellen Nutzung der Funktion. Siehe Bild. Dies ist die Aufzeichung des Makro-Rekorders, gewohnt kryptisch . Code: Language="VBSCRIPT"Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set bodies1 = part1.Bodies Set body1 = bodies1.Item("Hauptkörper") part1.InWorkObject = body1 Set shapeFactory1 = part1.ShapeFactory Set reference1 = part1.CreateReferenceFromName("") Set thickSurface1 = shapeFactory1.AddNewThickSurface(reference1, 0, 1.000000, 0.000000) Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item("Fuselage 3D Wire Model") Set hybridShapes1 = hybridBody1.HybridShapes Set hybridShapeLoft1 = hybridShapes1.Item("Fuselage Shell") Set reference2 = part1.CreateReferenceFromObject(hybridShapeLoft1) thickSurface1.Surface = reference2 Set length1 = thickSurface1.TopOffset length1.Value = 2.000000 length1.Value = 3.000000 part1.Update End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 695 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 04. Aug. 2009 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für CabinMaster
Hallo, ich habe mit jetzt deinen Code nicht im Detail angesehen, aber ich habe folgende Vermutung. Du erzeugst im Vorfeld per Script "jede Menge" Elemente innerhalb eines GeoSets. Dann willst du ein Aufmass erstellen (=Solidelement), in Bearbeitung ist aber immer noch das GeoSet. Nun kommt beim manuellen Erstellen des Aufmasses eine Fehler/Hinweismeldung. Diese kannst du mit deinem Makro nicht abfangen und dein Script steigt aus. Versuche doch mal vor der Erstellung (d)einen Körper in Bearbeitung zu setzen, damit solltest du dann die Fehler/Hinweismeldung umgehen können (ist dann ja nicht mehr notwendig). Habe es nicht getestet aber die Syntax sollte in etwa so aussehen (in der Doku ist auch ein kleinen Beispiel, suche nach InWorkObject) part1.InWorkObject = part1.bodies.item(1) Viel Erfolg
------------------ MfG Randle ! It's not a bug, it's a feature ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 04. Aug. 2009 09:46 <-- editieren / zitieren --> Unities abgeben: Nur für CabinMaster
|
Jens Hansen Mitglied Senior Consult
Beiträge: 1055 Registriert: 05.08.2000 Win7 CATIA V5 R19 VB.Net C#
|
erstellt am: 04. Aug. 2009 10:02 <-- editieren / zitieren --> Unities abgeben: Nur für CabinMaster
|
CabinMaster Mitglied Diplomingenieur L&R
Beiträge: 19 Registriert: 31.07.2009 Windows XP Catia V5 R18 [und nein: Katja mag nur einen Prozessor zur Zeit benutzen] Makro mit CATVBS
|
erstellt am: 04. Aug. 2009 14:26 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antworten! Habe es noch nicht ausprobiert, aber werde ich heute oder morgen nachholen und dann noch mal hier das Ergebnis posten. Die Sache mit dem referenzieren und VBS generell ist noch etwas gewöhnungsbedürftig. Set My.VisualBasic.Knowledge = Language.Syntax.Activate Falls jemand noch konkretere Hinweise bezüglich des Codes braucht bitte einfach hier schreiben (ich denke viele kommen wie ich per Google in bestimmte Themen). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CabinMaster Mitglied Diplomingenieur L&R
Beiträge: 19 Registriert: 31.07.2009 Windows XP Catia V5 R18 [und nein: Katja mag nur einen Prozessor zur Zeit benutzen] Makro mit CATVBS
|
erstellt am: 05. Aug. 2009 08:32 <-- editieren / zitieren --> Unities abgeben:
Danke noch mal für die Tipps. Es funktioniert jetzt ohne zicken. Ich habe im Endeffekt den Makro-Rekorder Code genommen und weitestgehend adaptiert, auch um die Übersichtlichkeit wenigstens ein wenig zu waren.
Code: ' Create Monsieur Fuselage (modified Makro-recorder code) If MakeLoft Then ' Append Loft created above Victim.AppendHybridShape Loft CS.Part.Update ' Set current in work object (circumvent warning in Katja) CS.Part.InWorkObject = CS.Part.Bodies.Item("Hauptkörper") Set reference1 = CS.Part.CreateReferenceFromName("") ' create thick surface Set Fuselage = CS.Part.ShapeFactory.AddNewThickSurface(reference1, 0, 1.000000, 0.000000) Set hybridBody1 = CS.Part.HybridBodies.Item("Fuselage 3D Wire Model") Set hybridShapeLoft1 = hybridBody1.HybridShapes.Item("Fuselage Shell") Set reference2 = CS.Part.CreateReferenceFromObject(hybridShapeLoft1) Fuselage.Surface = reference2 Set Stuff = Fuselage.TopOffset ' ste actual thickness Stuff.Value = 2.000000 CS.Part.Update End If
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |