Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Einfügen einer Skizze in ein OGS

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:  Einfügen einer Skizze in ein OGS (2259 mal gelesen)
MarkusFMT
Mitglied
Student

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

Beiträge: 2
Registriert: 17.12.2007

erstellt am: 15. Jan. 2008 11:39    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,

ich versuche nun schon seit einiger Zeit mit Hilfe eines MS VisualBasic Makros eine Skizze in ein Ordered Geometrical Set einzufügen, bisher allerdings vergebens.

Hier mein bisheriger Code (ohne Skizzengeometrie):

--------------------------------------------------
Sub CATMain()

Set Document = CATIA.ActiveDocument
Set Part = Document.Part
Set Bodies = Part.Bodies
Set Body1 = Bodies.Add()
Body1.Name = "Geometrie"
Set OGSs = Body1.OrderedGeometricalSets
Set OGS1 = OGSs.Add()
OGS1.Name = "Skizzen"

Set Sketches = OGS1.OrderedSketches
Set Plane = Part.OriginElements.PlaneXY
Set Sketch1 = Sketches.Add(Plane)          (*)

End Sub
---------------------------------------------------

Bei (*) steigt er jedes Mal aus mit der Meldung, dass die Methode Add() gescheitert ist. Kann mir vielleicht jemand sagen, wo hier das Problem liegt? Vielen Dank!

Gruß
Markus

(Version: CATIA V5 R16 SP5 HF54)

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

danw
Mitglied
Student


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

Beiträge: 17
Registriert: 21.06.2012

CATIA V5 R18
Win7x64 Pro
Intel Core i5/750
8GB DDR3/RAM

erstellt am: 21. Jun. 2012 12:31    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 MarkusFMT 10 Unities + Antwort hilfreich

Hallo miteinander,

ich weis der Beitrag ist schon sehr alt, ich stehe aber seit gestern genau vor dem selben Problem und finde keine Lösung.
Vielleicht kann mir jemand weiterhelfen.

Danke und Gruß
Daniel

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: 21. Jun. 2012 16:50    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 MarkusFMT 10 Unities + Antwort hilfreich

Servus
Willkommen im Forum.
Ich hab auf es auch auf die schnelle nicht mit der Methode "Add" hinbekommen.
Als Workaround könnte vielleicht cut&paste gehen: Skizze in einem Körper/GeoSet erzeugen, dann ausschneiden und im Ordered geometrical Set einfügen

Gruß
Bernd

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

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

danw
Mitglied
Student


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

Beiträge: 17
Registriert: 21.06.2012

CATIA V5 R18
Win7x64 Pro
Intel Core i5/750
8GB DDR3/RAM

erstellt am: 26. Jun. 2012 11:12    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 MarkusFMT 10 Unities + Antwort hilfreich

Hallo Bernd, danke für die Antwort.

Ich habe gesehen, dass es in meinem Fall keinen Unterschied macht, wenn ich die Skizzen in einem allgemeinen Body statt in einem OGS erzeuge.

In meinem Makro will ich Punkte aus einer Excel Tabelle auslesen und anschließend eine Spline durchlegen lassen.  Hat soweit auch geklappt, die Skizze und die Punkte sind dort, wo sie sein sollen. Nur beim Erzeugen der Spline hängt sich CATIA auf.

Habe schon überprüft ob die Dimension von TopPoints stimmt (das tut sie), die Deklarierung sollte auch stimmen, es kann also eigentlich nur noch an der Definition der Spline liegen: Set TopSpline = myTools.CreateSpline(TopPoints)
Da habe ich keine weiterführunden Informationen im Netz/CATDoc finden können.

Hier der entsprechende Auszug aus dem Quellcode:

Code:
...
Dim TopPoints(), BottomPoints() As CATSafeArrayVariant
Dim myTools As Factory2D
Dim TopSpline, BotSpline As Spline2D
Dim XCoord,YCoord As Double
Dim newPoint As Point2D
Dim newControlPoint As ControlPoint2D
Dim nRow, nIndex As Integer
...
' Skizze öffnen
Set myTools = mySketch.OpenEdition

' Koordianten beginnen in der 3. Zeile der Tabelle
nRow = 3
' Array Start
nIndex = -1
 
' --- Oberseite ---
' Zeilen solange einlesen bis nichts mehr drin steht
Do
' Spalte 1,2 = Werte
XCoord = CDbl(WS.Cells(nRow, 1).Value)
YCoord = CDbl(WS.Cells(nRow, 2).Value)

' Punkt mit den Koordinaten erstellen
Set newPoint = myTools.CreatePoint(XCoord, YCoord)
'Set newControlPoint = myTools.CreateControlPoint(XCoord, YCoord)

' Array neue Dimension
nIndex = nIndex + 2
ReDim Preserve TopPoints(nIndex)

' X-Wert im Array für die Spline speichern
TopPoints(nIndex-1) = XCoord
TopPoints(nIndex) = YCoord

' Zeile hochzählen
nRow = nRow + 1

' Schleife verlassen, wenn Zelle leer ist
Loop While (WS.Cells(nRow, 1).Text <> "")

' Spline durch die Punkte legen
Set TopSpline = myTools.CreateSpline(TopPoints)

' Skizze schließen
mySketch.CloseEdition

...


Wäre sehr dankbar wenn mir hier jemand noch auf die Sprünge hilft.

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: 26. Jun. 2012 12:25    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 MarkusFMT 10 Unities + Antwort hilfreich

Servus
IMHO musst du der Funktion "CreateSpline" einen Array mit den 2D-Kontrollpunkten übergeben, und nicht die Koordinaten dazu.
Code:
TopPoints(nIndex) = newPoint
Das redimensionieren des Arrays muss dann natürlich auch angepasst werden.
Anbei ein Beispiel-Code:
Code:
Sub CATMain()

Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim hybridBody1 As HybridBody
Set hybridBody1 = hybridBodies1.Item("Geometrisches Set.1")

Dim sketches1 As Sketches
Set sketches1 = hybridBody1.HybridSketches

Dim reference1 As Reference
Set reference1 = part1.CreateReferenceFromName("Selection_RSur:(Face:(Brp:(AxisSystem.1;2);None:();Cf11:());AxisSystem.1;Z0;G3491)")

Dim sketch1 As Sketch
Set sketch1 = sketches1.Add(reference1)

Dim arrayOfVariantOfDouble1(8)
arrayOfVariantOfDouble1(0) = 0#
arrayOfVariantOfDouble1(1) = 0#
arrayOfVariantOfDouble1(2) = 0#
arrayOfVariantOfDouble1(3) = 0#
arrayOfVariantOfDouble1(4) = 1#
arrayOfVariantOfDouble1(5) = 0#
arrayOfVariantOfDouble1(6) = 0#
arrayOfVariantOfDouble1(7) = 0#
arrayOfVariantOfDouble1(8) = 1#
Set sketch1Variant = sketch1
sketch1Variant.SetAbsoluteAxisData arrayOfVariantOfDouble1

part1.InWorkObject = sketch1

Dim factory2D1 As Factory2D
Set factory2D1 = sketch1.OpenEdition()

Dim controlPoint2D1 As ControlPoint2D
Set controlPoint2D1 = factory2D1.CreateControlPoint(29.670109, 40.994579)

Dim controlPoint2D2 As ControlPoint2D
Set controlPoint2D2 = factory2D1.CreateControlPoint(137.026077, 24.91383)

Dim controlPoint2D3 As ControlPoint2D
Set controlPoint2D3 = factory2D1.CreateControlPoint(123.889694, 46.883305)

Dim controlPoint2D4 As ControlPoint2D
Set controlPoint2D4 = factory2D1.CreateControlPoint(91.275223, 50.733624)

Dim controlPoint2D5 As ControlPoint2D
Set controlPoint2D5 = factory2D1.CreateControlPoint(61.605114, 33.293941)


Dim arrayOfObject1(4)
Set arrayOfObject1(0) = controlPoint2D1
Set arrayOfObject1(1) = controlPoint2D5
Set arrayOfObject1(2) = controlPoint2D4
Set arrayOfObject1(3) = controlPoint2D3
Set arrayOfObject1(4) = controlPoint2D2
Set factory2D1Variant = factory2D1

Set spline2D1 = factory2D1Variant.CreateSpline(arrayOfObject1)

sketch1.CloseEdition

part1.InWorkObject = hybridBody1

part1.Update

End Sub


Gruß
Bernd

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

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

danw
Mitglied
Student


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

Beiträge: 17
Registriert: 21.06.2012

CATIA V5 R18
Win7x64 Pro
Intel Core i5/750
8GB DDR3/RAM

erstellt am: 26. Jun. 2012 12:48    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 MarkusFMT 10 Unities + Antwort hilfreich

Ja, so hatte ich es als erstes, da gibt CATIA folgende Fehlermeldung:
Das Objekt unterstützt diese Eigenschaft oder Methode nicht ('TopPoints').

Ein Punkt füllt doch dann genau ein Array-Feld aus, d.h. Dimension des Array -1 (da bei 0 begonnen wird) = Anzahl der Punkte?

Ich habe meine Skizze in einem Body, bei deinem Beispiel ist sie ja in einem GS. Das sollte aber (außer der Deklaration) keinen Unterschied machen?

Hier der veränderte Code:

Code:
' Excel starten
Set Excel = CreateObject("Excel.Application")
Excel.Visible = True
' Arbeitsmappe öffnen
Set WB = Excel.Workbooks.Open(oFileSource)
' Tabelle holen
Set WS = WB.Worksheets.Item(1)
 
' Aktives part holen
Set myPart = CATIA.ActiveDocument.Part
' Umgebung holen
Set HybShapeFac = myPart.HybridShapeFactory
' Körper holen (Name: SKIZZEN)
Set myBodies = CATIA.ActiveDocument.Part.Bodies
Set myBody = myBodies.Item ("SKIZZEN")
' Körper "In Bearbeitung" definieren
myPart.InWorkObject = myBody

' Referenzebene daklarieren 
Set myRefPlane = myPart.OriginElements.PlaneZX

' Skizze erstellen 
Set mySketches = myBody.Sketches
Set mySketch = mySketches.Add(myRefPlane)

' Ausrichtung an Achsensystem.1 angleichen
Set myAxisSystem = myPart.AxisSystems.Item(1)
myAxisSystem.GetOrigin myAxisOrigin
myAxisSystem.GetXAxis myXAxis
myAxisSystem.GetYAxis myYAxis
mySketchAxes(0) = myAxisOrigin(0)
mySketchAxes(1) = myAxisOrigin(1)
mySketchAxes(2) = myAxisOrigin(2)
mySketchAxes(3) = myXAxis(0)
mySketchAxes(4) = myXAxis(1)
mySketchAxes(5) = myXAxis(2)
mySketchAxes(6) = myYAxis(0)
mySketchAxes(7) = myYAxis(1)
mySketchAxes(8) = myYAxis(2)
mySketch.SetAbsoluteAxisData mySketchAxes
'mySketch.InverseOrientation

' Skizze öffnen
Set myTools = mySketch.OpenEdition

' Koordianten beginnen in der 3. Zeile der Tabelle
nRow = 3
' Array Start
nIndex = 0
 
' --- Oberseite ---
' Zeilen solange einlesen bis nichts mehr drin steht
Do
' Spalte 1,2 = Werte
XCoord = CDbl(WS.Cells(nRow, 1).Value)
YCoord = CDbl(WS.Cells(nRow, 2).Value)

' Punkt mit den Koordinaten erstellen
'Set newPoint = myTools.CreatePoint(XCoord, YCoord)
Set newControlPoint = myTools.CreateControlPoint(XCoord, YCoord)

' Array neue Dimension
ReDim Preserve TopPoints(nIndex)

' X-Wert im Array für die Spline speichern
TopPoints(nIndex) = newControlPoint

' Zeile hochzählen
nRow = nRow + 1
nIndex = nIndex + 1

' Schleife verlassen, wenn Zelle leer ist
Loop While (WS.Cells(nRow, 1).Text <> "")

' Spline durch die Punkte legen
Set TopSpline = myTools.CreateSpline(TopPoints)


' Skizze schließen
mySketch.CloseEdition

' Part aktualisieren
myPart.Update

' Ecxel schliessen
Excel.Quit


[Diese Nachricht wurde von danw am 26. Jun. 2012 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: 26. Jun. 2012 15:54    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 MarkusFMT 10 Unities + Antwort hilfreich

Servus
Dein Code sieht eigendlichh gut aus, mir fällt kein Fehler auf.
Programmierst du in VBA? hast du mal de einzelnen Objekte im Watch-Fenster kontolliert?
In VBA musst du folgenden Umweg gehen:
Code:
Dim factory2D1 As Factory2D
Set factory2D1 = sketch1.OpenEdition()
....
Set factory2D1Variant = factory2D1
Set spline2D1 = factory2D1Variant.CreateSpline(arrayOfObject1)
Da die CreateSpline-Methode "restriced" ist.

Gruß
Bernd

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

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

danw
Mitglied
Student


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

Beiträge: 17
Registriert: 21.06.2012

CATIA V5 R18
Win7x64 Pro
Intel Core i5/750
8GB DDR3/RAM

erstellt am: 26. Jun. 2012 16: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 Nur für MarkusFMT 10 Unities + Antwort hilfreich

Also ich editiere das .CATScript bisher mit Notepad++ mit VB als eignestellte Sprache.

Bis zur CreateSpline Methode komme ich erst gar nicht, denn er steigt schon hier aus (Das Objekt unterstützt diese Eigenschaft oder Methode nicht ('TopPoints')):

Code:
' Punkt Array für die Spline speichern
TopPoints(nIndex) = newControlPoint

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: 27. Jun. 2012 16:51    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 MarkusFMT 10 Unities + Antwort hilfreich

Servus
Ist der Array richtig dimensioniert? (mit LBound oder Ubound mal checken)
Ich empfehle dir im VBA-Editor zu programmieren und alle Variabel zu deklarieren. Die Objektüberwachung und das schrittweise asführen eines Programms sind srh nützlich, und natürlich noch InteliSense (Autovervollständigung)

Gruß
Bernd

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

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

danw
Mitglied
Student


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

Beiträge: 17
Registriert: 21.06.2012

CATIA V5 R18
Win7x64 Pro
Intel Core i5/750
8GB DDR3/RAM

erstellt am: 28. Jun. 2012 10:48    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 MarkusFMT 10 Unities + Antwort hilfreich

Hallo Bernd,

ja, das Array war richtig dimensioniert und deklariert.

Nach mehrfachem an die Decke gehen habe ich rausgefunden woran es lag:

Code:
Set TopPoints(nIndex) = newControlPoint

...er wollte scheinbar ein "Set" haben.

Hoffe ich komme jetzt mit dem Rest dieses Makros ohne größere Probleme durch, ansonsten melde ich mich wieder. ;-) Danke für deine Hilfe!

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