PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CAD VBA-Makro spinnt (CATIA)



White_Fox
27.12.2016, 16:40
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.


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.P laneXY)
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

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.

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ß...

Joschi2111
27.12.2016, 17:23
Hallo wichtige Frage wie erstellt man ein neues Thema ich finde es nicht obwohl ich schon 3 mal eines erstellt habe

White_Fox
23.01.2017, 09:18
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.

dj_cyborg
23.01.2017, 20:21
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/forumdisplay.cgi?action=topics&forum=CATIA+V5+Programmierung&number=137

die Catia Hilfe in deinem Installationsverzeichnis und die Makrorekorderfunktion.

mfG
Mario



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.OriginElem ents.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

White_Fox
23.01.2017, 21:21
Hallo cyborg

Erstmal vielen Dank, aber wie gesagt...mein Problem oben ist gelöst.

1. Um dich zur sauberen Deklaration zu zwingen würde ich immer mit "Option Explicit" beginnen.
Da hast du völlig Recht. Ist bei mir auch drin, habs nur nicht mit reinkopiert.

Vielen Dank für den Rat mit part.update. Ja, das macht es in der Tat sehr langsam.


4. Du brauchst keine Punkte um 2DLinien zu erzeugen.
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.

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... :)

dj_cyborg
23.01.2017, 21:32
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

White_Fox
24.01.2017, 22:02
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... :)