Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Ein Sketch auf eine Fläche machen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Ein Sketch auf eine Fläche machen (633 mal gelesen)
IZA
Mitglied
Ingenieur

Sehen Sie sich das Profil von IZA an!   Senden Sie eine Private Message an IZA  Schreiben Sie einen Gästebucheintrag für IZA

Beiträge: 4
Registriert: 23.11.2016

erstellt am: 23. Nov. 2016 13:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

ich schreibe einen Makro für Catia und ich soll ein Sketch auf beliebiger Fläche zeichnen.

Die Fläche ohsPlaneVxVy ist auf 2 Vektoren ohSLine_Vx und ohSLine_Vy gebaut. Diese Vektoern werden danach auch die neue Axses.

Alle Beispiele, die ich finden konnte werden entweder mit Standart-Flächen wie XY oder durch die Name "Fläche.1" gebaut.

    

Code:
Set ohSPlaneVxVy(i) = ohSFactory.AddNewPlane2Lines(ohSLine_Vx(i), ohSLine_Vy(i))
     ohBody.AppendHybridShape ohSPlaneVxVy(i)
   
    'Set oRefPlane = oPart.CreateReferenceFromObject(oPart.OriginElements.PlaneXY) ' - so funktioniert's
    'Set oRefPlane = hybridShapes1.Item("Fläche.1")                                ' - so auch
     Set oRefPlane = oPart.CreateReferenceFromObject(ohSPlaneVxVy(i))               ' - und so nicht
     Set oSketch = oSketches.Add(oRefPlane)
       
     arrayOfVariantOfDouble1(0) = VM(i, 1) ' O-Punkt in 3D
     arrayOfVariantOfDouble1(1) = VM(i, 2)
     arrayOfVariantOfDouble1(2) = VM(i, 3)
     arrayOfVariantOfDouble1(3) = Vy(i, 1) ' axis Y' in 3D
     arrayOfVariantOfDouble1(4) = Vy(i, 2)
     arrayOfVariantOfDouble1(5) = Vy(i, 3)
     arrayOfVariantOfDouble1(6) = Vx(i, 1) ' axis X' in 3D
     arrayOfVariantOfDouble1(7) = Vx(i, 2)
     arrayOfVariantOfDouble1(8) = Vx(i, 3)
     Set oSketchV = oSketch
     oSketchV.SetAbsoluteAxisData arrayOfVariantOfDouble2


Es ist bestimmt eine dumme Frage, aber ich kann die Lösung leider nicht selber finden.

Danke.

[Diese Nachricht wurde von IZA am 23. Nov. 2016 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 23. Nov. 2016 13:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für IZA 10 Unities + Antwort hilfreich

Servus
Willkommen im Forum. Bitte Systeminfo ergänzen.
Übergib mal der oSketches.Add die Ebene und nicht einer Referenz davon:
Code:
Set oSketch = oSketches.Add(ohSPlaneVxVy(i))
Gruß
Bernd


------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

IZA
Mitglied
Ingenieur

Sehen Sie sich das Profil von IZA an!   Senden Sie eine Private Message an IZA  Schreiben Sie einen Gästebucheintrag für IZA

Beiträge: 4
Registriert: 23.11.2016

erstellt am: 23. Nov. 2016 13:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Nö,
so funktioniert auch nicht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 23. Nov. 2016 14:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für IZA 10 Unities + Antwort hilfreich

Servus
Also in meinem Test lief es so.
Kommt eine Fehlermeldung?
Ist i in einem sinnvollen Bereich?
Wird die Ebene erzeugt wenn du den Code bis dahin laufen lässt?
ggf hilft ein Update des Parts vor dem erzeugen der Skizze.
Programmierst du in VBA? Als was ist der Array ohSPlaneVxVy deklariert?

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

IZA
Mitglied
Ingenieur

Sehen Sie sich das Profil von IZA an!   Senden Sie eine Private Message an IZA  Schreiben Sie einen Gästebucheintrag für IZA

Beiträge: 4
Registriert: 23.11.2016

erstellt am: 23. Nov. 2016 14:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

i ist in Ordnung. Es steht in eine Schleife, wo Vektoren Vx, Vy, Fläche VxVy gezeichnet werden, und alles läuft gut.

Code:
Sub PlotGeometry
    ' Vx, Vy, XM... - sind als Public definiert, alle sind arrays von Double
    Dim i As Integer
   
    Dim oPartDocument As Document
    Set oPartDocument = CATIA.Documents.Add("Part")
    Dim oPart As Part ' -- Part
    Set oPart = oPartDocument.Part    
    Dim ohBodies As HybridBodies
    Set ohBodies = oPart.HybridBodies
   
    Dim ohBody As HybridBody
    Set ohBody = ohBodies.Add()
   
    Dim ohSFactory As HybridShapeFactory
    Set ohSFactory = oPart.HybridShapeFactory
  
    Dim oBodies As Bodies
    Dim oPartBody As Body
    Dim oSketches As Sketches
    Dim oSketch As sketch
   
    Dim factory2D1 As Factory2D
    Dim geometricElements1 As GeometricElements
    Dim axis2D1 As Axis2D
    Dim line2D1 As Line2D, line2D2 As Line2D
  
    Dim ohSPointCoord() As HybridShapePointCoord   '
    Dim ohSVxCoord() As HybridShapePointCoord      '
    Dim ohSVyCoord() As HybridShapePointCoord      '
    Dim ohSLinePtPt() As HybridShapeLinePtPt       '
    Dim ohSLine_Vx() As HybridShapeLinePtPt        '
    Dim ohSLine_Vy() As HybridShapeLinePtPt        '
    Dim ohSPlaneVxVy() As HybridShapePlane2Lines   '
    Dim ohSPoints As HybridShapePointCoord         '
    Dim sketches1 As Sketches
    Dim line2D4 As Line2D
    Dim sketch1Variant As sketch
    Dim arrayOfVariantOfDouble1(8) As Double
   
    ReDim ohSPointCoord(0 To Nmlp)
    ReDim ohSVxCoord(0 To Nmlp)
    ReDim ohSVyCoord(0 To Nmlp)
   
    ReDim ohSLinePtPt(0 To Nmlp)
    ReDim ohSLine_Vx(0 To Nmlp)
    ReDim ohSLine_Vy(0 To Nmlp)
    ReDim ohSPlaneVxVy(0 To Nmlp)
     
    ' -- Draw Points   
    For i = 0 To Nmlp
        Set ohSPointCoord(i) = ohSFactory.AddNewPointCoord(XM(i), YM(i), ZM(i)) ' M - Main line
        ohBody.AppendHybridShape ohSPointCoord(i)
    Next i
    oPart.Update
   
    ' -- Draw lines
    For i = 0 To Nmlp - 1
        Set ohSLinePtPt(i) = ohSFactory.AddNewLinePtPt(ohSPointCoord(i), ohSPointCoord(i + 1))
        ohBody.AppendHybridShape ohSLinePtPt(i)
    Next i
   
    ' -- Draw Cross Sections
    ReDim hSPlaneNormal(0 To Nmlp)
   
    Set oBodies = oPart.Bodies
    Set oPartBody = oPart.MainBody
    Set oSketches = oPartBody.Sketches
  
    For i = 0 To Nmlp
        ' -- Create new Basis in cross-section plane
        '-- draw points
        Set ohSVxCoord(i) = ohSFactory.AddNewPointCoord(Vx(i, 1), Vx(i, 2), Vx(i, 3))
        ohSVxCoord(i).PtRef = oPart.CreateReferenceFromObject(ohSPointCoord(i))
        ohBody.AppendHybridShape ohSVxCoord(i)
        Set ohSVyCoord(i) = ohSFactory.AddNewPointCoord(Vy(i, 1), Vy(i, 2), Vy(i, 3))
        ohSVyCoord(i).PtRef = oPart.CreateReferenceFromObject(ohSPointCoord(i))
        ohBody.AppendHybridShape ohSVyCoord(i)
       
        ' draw lines
        Set ohSLine_Vx(i) = ohSFactory.AddNewLinePtPt(ohSPointCoord(i), ohSVxCoord(i))
        ohBody.AppendHybridShape ohSLine_Vx(i)
        Set ohSLine_Vy(i) = ohSFactory.AddNewLinePtPt(ohSPointCoord(i), ohSVyCoord(i))
        ohBody.AppendHybridShape ohSLine_Vy(i)
       
        ' create planes
        Set ohSPlaneVxVy(i) = ohSFactory.AddNewPlane2Lines(ohSLine_Vx(i), ohSLine_Vy(i))
        ohBody.AppendHybridShape ohSPlaneVxVy(i)
        'oPart.InWorkObject = ohSPlaneVxVy(i)
       
       'Set oRefPlane = oPart.CreateReferenceFromObject(oPart.OriginElements.PlaneXY)
        Set oRefPlane = oPart.CreateReferenceFromObject(ohSPlaneVxVy(i))
       'Set oSketch = oSketches.Add(oRefPlane)
        Set oSketch = oSketches.Add(ohSPlaneVxVy(i))
       
        arrayOfVariantOfDouble1(0) = VM(i, 1) ' 0-Punkt â 3D
        arrayOfVariantOfDouble1(1) = VM(i, 2)
        arrayOfVariantOfDouble1(2) = VM(i, 3)
        arrayOfVariantOfDouble1(3) = Vy(i, 1) ' axis Y' in 3D
        arrayOfVariantOfDouble1(4) = Vy(i, 2)
        arrayOfVariantOfDouble1(5) = Vy(i, 3)
        arrayOfVariantOfDouble1(6) = Vx(i, 1) ' axis X' in 3D
        arrayOfVariantOfDouble1(7) = Vx(i, 2)
        arrayOfVariantOfDouble1(8) = Vx(i, 3)
        Set oSketchV = oSketch
        oSketchV.SetAbsoluteAxisData arrayOfVariantOfDouble2
       
        ' und so weiter ...       
    Next i
   
    oPart.Update
End Sub

Beim Kompilieren au der Zeile

Code:
Set oSketch = oSketches.Add(ohSPlaneVxVy(i))

kriege ich eine Fehler:

Zitat:
Run-Time Error '-2147467259(80004005)
Method 'Add' of object 'Sketches' failed

[Diese Nachricht wurde von IZA am 23. Nov. 2016 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 23. Nov. 2016 15:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für IZA 10 Unities + Antwort hilfreich

Servus
Die Doku ist da auch nicht eindeutig, mal wird eine Ebene mal eine Reference übergeben.
ggf nur ein Objekt vom Typ AnyObject übergeben?
Code:
Dim MyRef as AnyObject
Set MyRef = ohSPlaneVxVy(i)
Set oSketch = oSketches.Add(MyRef)
Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

IZA
Mitglied
Ingenieur

Sehen Sie sich das Profil von IZA an!   Senden Sie eine Private Message an IZA  Schreiben Sie einen Gästebucheintrag für IZA

Beiträge: 4
Registriert: 23.11.2016

erstellt am: 23. Nov. 2016 15:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank. Ich werde das demnächst versuchen.

Ich habe momentan einen Workaround gemacht, doch über die Name:
       

Code:

        Dim ohShapes As HybridShapes
        Set ohShapes = ohBody.HybridShapes

        Dim newname As String
        newname = "Plane_VxVy_" & Cstr(i)
        ohSFactory.ChangeFeatureName ohSPlaneVxVy(i), newname
        oPart.Update
       
        Set oRefPlane = ohShapes.Item(newname)
        Set osketch = oSketches.Add(oRefPlane)


------------------
Danke,
Anton.

[Diese Nachricht wurde von IZA am 23. Nov. 2016 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz