- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: VBA-Makro spinnt (CATIA)

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473

    VBA-Makro spinnt (CATIA)

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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.

    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
    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ß...
    Geändert von White_Fox (27.12.2016 um 17:08 Uhr)

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    10.07.2016
    Beiträge
    20
    Hallo wichtige Frage wie erstellt man ein neues Thema ich finde es nicht obwohl ich schon 3 mal eines erstellt habe

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473
    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.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    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 !!!

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473
    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...

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    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 !!!

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473
    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...

Ähnliche Themen

  1. makro um .txt in excel zu übernehmen
    Von user529 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 4
    Letzter Beitrag: 07.07.2008, 17:43
  2. Excel Makro - ATMEGA8535 - Seriell - Input Problem
    Von Abadacus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 21.09.2007, 19:55
  3. Genmark Makro
    Von Potze im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 23.07.2007, 17:28
  4. Makro-Problem
    Von gulliver im Forum Assembler-Programmierung
    Antworten: 0
    Letzter Beitrag: 25.06.2007, 18:12
  5. bei Catia V5 Schnecken und Schneckenräder konstruieren
    Von Devil im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 1
    Letzter Beitrag: 22.06.2006, 19:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress