| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | KISTERS 3DViewStation: Mit Modellbasiertem Design zum Modellbasierten Unternehmen , eine Pressemitteilung
|
Autor
|
Thema: Ein Sketch auf eine Fläche machen (995 / mal gelesen)
|
IZA Mitglied Ingenieur
 Beiträge: 4 Registriert: 23.11.2016
|
erstellt am: 23. Nov. 2016 13:33 <-- editieren / zitieren --> Unities abgeben:         
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
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Nov. 2016 13:45 <-- editieren / zitieren --> Unities abgeben:          Nur für IZA
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
 Beiträge: 4 Registriert: 23.11.2016
|
erstellt am: 23. Nov. 2016 13:56 <-- editieren / zitieren --> Unities abgeben:         
|
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Nov. 2016 14:07 <-- editieren / zitieren --> Unities abgeben:          Nur für IZA
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
 Beiträge: 4 Registriert: 23.11.2016
|
erstellt am: 23. Nov. 2016 14:35 <-- editieren / zitieren --> Unities abgeben:         
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
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 23. Nov. 2016 15:04 <-- editieren / zitieren --> Unities abgeben:          Nur für IZA
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
 Beiträge: 4 Registriert: 23.11.2016
|
erstellt am: 23. Nov. 2016 15:30 <-- editieren / zitieren --> Unities abgeben:         
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 >>)
 |