Hallo wichtige Frage wie erstellt man ein neues Thema ich finde es nicht obwohl ich schon 3 mal eines erstellt habe
Hallo
Sind hier zufällig Leute, die CATIA benutzen und damit schonmal VBA-Makros programmiert haben?
Mach grad meine ersten Geh-Versuche und CATIA ist mir da etwas unlogisch.
Folgendes Problem:
Dieses Makro soll eine Skizze erstellen. Nichts Großes...einfach nur ein Dreieck aus drei Linien, die Start- und Endpunkte der Linie werden über Punkte gebildet.
Laß ich dieses Makro jetzt durchlaufen werden die H-Koordinaten der Punkte zwar korrekt dargestellt und die Linien verbunden, nicht jedoch die V-Koordinanten. Das sieht dann so aus, daß in der Skizze nur eine horizontale Linie zu sehen ist, und erst wenn ich in der Skizze nachträglich eine Linie rausgezogen wird sieht man, daß es drei sind.Code:Public Sub NeuerKoerper() Dim prtdc As PartDocument Dim prt As Part Dim fctr As Factory Dim fctr2D As Factory2D Dim hbd As HybridBody Dim prdct As Product Dim ebn As HybridShapePlaneOffset Dim refe As Reference Dim sktch As sketch Dim sktchs As Sketches Dim l As Line2D Dim p As Point2D 'Neues CATPart Set prtdc = CATIA.Documents.Add("CATPart") Set prtdc = CATIA.Documents.Item(CATIA.Documents.Count) Set prt = prtdc.Part 'Part umbenennen Set prdct = prtdc.GetItem(prt.Name) prdct.PartNumber = "Prisma" 'Geometrisches Set einen sinnvollen Namen geben Set hbd = prt.HybridBodies.Item(1) hbd.Name = "Grundfläche" 'Ebene bauen und einfügen Set fctr = prt.HybridShapeFactory Set refe = prt.CreateReferenceFromObject(prt.OriginElements.PlaneXY) Set ebn = fctr.AddNewPlaneOffset(refe, 10, False) ebn.Name = "Skizzierebene" hbd.AppendHybridShape ebn prt.Update 'Skizze erstellen Set sktchs = prt.Bodies.Item(1) Set refe = ebn Set sktch = sktchs.Add(refe) sktch.Name = "Skizze Prisma" prt.Update With sktch 'Skizze öffnen .OpenEdition 'Dreieck zeichnen With .Factory2D Set l = .CreateLine(0, 0, 0, 0) l.Name = "L1" Set l = .CreateLine(0, 0, 0, 0) l.Name = "L2" Set l = .CreateLine(0, 0, 0, 0) l.Name = "L3" Set p = .CreatePoint(0, 0) p.Name = "P1" Set p = .CreatePoint(0, 0) p.Name = "P2" Set p = .CreatePoint(0, 0) p.Name = "P3" End With Set p = .GeometricElements.Item("P1") p.SetData iX:=2, iY:=-2 Set l = .GeometricElements.Item("L1") l.StartPoint = p Set l = .GeometricElements.Item("L2") l.EndPoint = p Set p = .GeometricElements.Item("P2") p.SetData iX:=0, iY:=3 Set l = .GeometricElements.Item("L2") l.StartPoint = p Set l = .GeometricElements.Item("L3") l.EndPoint = p Set p = .GeometricElements.Item("P3") p.SetData iX:=-2, iY:=-2 Set l = .GeometricElements.Item("L3") l.StartPoint = p Set l = .GeometricElements.Item("L1") l.EndPoint = p .CloseEdition End With prt.Update End Sub
Frage: Warum werden die V-Koordinaten nicht korrekt bei den Punkten übernommen?
Was ich schon versucht habe:
-NUR Punkte erstellen und Linien erstmal weglassen. Das klappt gut, die Punkte sind dann wo sie sein sollen.
-Erst die Koordinaten aller Punkte verteilen und danach die Linien auf die Punkte legen. Einzeln und mit Unterbrechung zeigt nach jeder einzelnen Linie, daß genau in diesem Schritt der Punkt wieder auf die H-Achse gelegt wird.
Edit:
.evaluate zwischendurch bringt auch nix
@Joschi:
Oben links, großer blauer Konopf im jeweiligen Forum. Wohl zu groß...
Geändert von White_Fox (27.12.2016 um 18:08 Uhr)
Hallo wichtige Frage wie erstellt man ein neues Thema ich finde es nicht obwohl ich schon 3 mal eines erstellt habe
Das obige Problem hab ich zwar gelöst bekommen, aber dennoch: Gibts hier niemanden, der ein bereits ein VBA-Makro für Catia geschrieben hat?
Das Problem läßt sich lösen, indem Linien und Punkte gleich mit den richtigen Koordinaten erstellt werden. Warum das nachträgliche Ändern mit den H-Koordinaten funktioniert und mit den V-Koordinaten nicht weiß ich nicht...allerdings ist das Klassenmodell in Catia eh etwas seltsam.
Hallo WhiteFox,
ein paar Anmerkungen.
1. Um dich zur sauberen Deklaration zu zwingen würde ich immer mit "Option Explicit" beginnen. So lernt mans am besten und die Syntaxhilfe funktioniert auch meistens.
2. Das "Set prtdc = CATIA.Documents.Item(CATIA.Documents.Count)" kannst du dir sparen, da du das Document schon mit "Set prtdc = CATIA.Documents.Add("CATPart")" in prtdc gelegt hast.
3. "prt.Update" macht ein Update über das gesamte Part. Das kann, falls man das öfter im Code verwendet, das Makro langsam machen. Mit "MyPart.UpdateObject MySketch" können auch einzelne Objekte aktualisiert werden. Das reicht meistens.
4. Du brauchst keine Punkte um 2DLinien zu erzeugen. Da die Linie bereits Start und Endpunkt beinhalten. "Set MyLine_01 = MyFactory2D.CreateLine(X1, Y1, X2, Y2)" Einfach die Koordinaten für Punkt1 (X1,Y1) und Punkt2 (X2,Y2) hinter CreateLine schreiben.
zu Empfehlen ist:
http://forum.cad.de/cgi-bin/ubb/foru...ung&number=137
die Catia Hilfe in deinem Installationsverzeichnis und die Makrorekorderfunktion.
mfG
Mario
Code:Option Explicit Sub CATMain() Dim MyPartDoc As PartDocument Dim MyDocuments As Documents Dim MyPart As Part Dim MyHybBodies As HybridBodies Dim MyHybBody As HybridBody Dim MyHybShapeFact As HybridShapeFactory Dim MyPlane As HybridShapePlaneOffset Dim MySketches As Sketches Dim MySketch As Sketch Dim MyReference As Reference Dim MyFactory2D As Factory2D Dim MyLine_01 As Line2D Dim MyLine_02 As Line2D Dim MyLine_03 As Line2D Dim MyLine_04 As Line2D 'CATPart erzeugen Set MyDocuments = CATIA.Documents Set MyPartDoc = MyDocuments.Add("CATPart") 'Part umbenennen Set MyPart = MyPartDoc.Part MyPartDoc.Product.PartNumber = "PRISMA" 'GeometricalSet anlegen / umbenennen /GeoSet in work setzen Set MyHybBodies = MyPart.HybridBodies Set MyHybBody = MyHybBodies.Add() MyHybBody.Name = "Grundfläche" MyPart.InWorkObject = MyHybBody 'Plane erstellen Set MyHybShapeFact = MyPart.HybridShapeFactory Set MyReference = MyPart.CreateReferenceFromObject(MyPart.OriginElements.PlaneXY) Set MyPlane = MyHybShapeFact.AddNewPlaneOffset(MyReference, 10, False) MyPlane.Name = "Skizzierebene" MyHybBody.AppendHybridShape MyPlane MyPart.UpdateObject MyHybBody 'Sketch erzeugen Set MySketches = MyHybBody.HybridSketches Set MyReference = MyPart.CreateReferenceFromObject(MyPlane) Set MySketch = MySketches.Add(MyReference) MySketch.Name = "Skizze Prisma" MyPart.UpdateObject MySketch 'Sketch öffnen und Linien erzeugen MySketch.OpenEdition Set MyFactory2D = MySketch.Factory2D Set MyLine_01 = MyFactory2D.CreateLine(0, 0, 10, 0) Set MyLine_02 = MyFactory2D.CreateLine(10, 0, 10, 10) Set MyLine_03 = MyFactory2D.CreateLine(10, 10, 0, 10) Set MyLine_04 = MyFactory2D.CreateLine(0, 10, 0, 0) MyLine_01.Name = "Linie_01" MyLine_02.Name = "Linie_02" MyLine_03.Name = "Linie_03" MyLine_04.Name = "Linie_04" MySketch.CloseEdition 'alles Updaten MyPart.Update End Sub
Wenn das die Lösung sein soll...
...will ich mein Problem zurück !!!
Hallo cyborg
Erstmal vielen Dank, aber wie gesagt...mein Problem oben ist gelöst.
Da hast du völlig Recht. Ist bei mir auch drin, habs nur nicht mit reinkopiert.1. Um dich zur sauberen Deklaration zu zwingen würde ich immer mit "Option Explicit" beginnen.
Vielen Dank für den Rat mit part.update. Ja, das macht es in der Tat sehr langsam.
Sicher nicht. Aber so bleiben die Linien auch verbunden, wenn man nachträglich daran rummzerrt. Ich wollte das Makro schon so konstruieren lassen, wie ich konstruieren würde. Auch wenn ich das händisch wahrscheinlich nicht unbedingt wieder ändern würde. Eigentlich geht es mir bei der Übung hauptsächlich darum, auch mal was Neues zu lernen bzw. mit VBA auch mal was anderes als Excel zu programmieren.4. Du brauchst keine Punkte um 2DLinien zu erzeugen.
Aber schön zu hören daß es noch andere gibt die Makros in Catia schreiben. Hab mich heute vormittag extra bei cad.de angemeldet weil ich dachte, hier bin ich mal falsch...![]()
Habs gerade gesehen das du dich heute angemeldet hast.
2DText zu 3DText Makro hast du in Arbeit... Ist immer Nützlich.
mfG
Mario Alias Roccat auf Cad.de
Wenn das die Lösung sein soll...
...will ich mein Problem zurück !!!
Ja...ist aber nur ein kleiner Teil. Ich bastle mir einen Generator für 3D-Modelle für Altium. IC-Aufschrift...
Geht zwar auch einfacher, aber erstens ist mir das zuviel Handarbeit, zweitens lern ich Catia so auch mal von einer anderen Seite kennen und mach VBA-Kram nicht immer nur unter Excel. Und wer weiß wofür ich das nochmal gebrauchen kann...![]()
Lesezeichen