Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Linien über for-Schleife aneinanderreihen

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:  Linien über for-Schleife aneinanderreihen (1017 mal gelesen)
Sancho23
Mitglied


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

Beiträge: 2
Registriert: 27.01.2013

erstellt am: 27. Jan. 2013 17: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 ich habe gerade erst mit der Makro Programmierung in Catia angefangen und bin dabei auf folgendes Problem gestoßen:

Ich würde gerne über eine for - Schleife eine bestimmte anzahl an Liniensegmenten aneinanderreihen.

Dazu habe ich mit dem Makro Aufzeichnungstool von Catia den Vorgang zunächst einmal aufgenommen und mir dann den Code angeschaut. Leider komme ich an einem Punkt nicht mehr weiter.

Der Code sieht folgendermaßen aus:

------------------------------------------------------------------------------------------

Language="VBSCRIPT"

Sub CATMain()

Set partDocument1 = CATIA.ActiveDocument

Set part1 = partDocument1.Part

Set hybridShapeFactory1 = part1.HybridShapeFactory

Set axisSystems1 = part1.AxisSystems

Set axisSystem1 = axisSystems1.Item("Achsensystem.1")

Set reference1 = part1.CreateReferenceFromBRepName("REdge:(Edge:(Face:(Brp:(AxisSystem.1;2);None:();Cf11:());Face:(Brp:(AxisSystem.1;1);None:();Cf11:());None:(Limits1:();Limits2:());Cf11:());WithPe rmanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", axisSystem1)

Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirection(reference1)

Set bodies1 = part1.Bodies

Set body1 = bodies1.Item("Hauptkörper")

Set hybridShapes1 = body1.HybridShapes

Set hybridShapeLinePtDir1 = hybridShapes1.Item("Linie.2")

Set reference2 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(GSMLine.2;2);None:(Limits1:();Limits2:();-1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureS upport;MFBRepVersion_CXR15)", hybridShapeLinePtDir1)

Set hybridShapeLinePtDir2 = hybridShapeFactory1.AddNewLinePtDir(reference2, hybridShapeDirection1, 0.000000, 20.000000, False)

body1.InsertHybridShape hybridShapeLinePtDir2

part1.InWorkObject = hybridShapeLinePtDir2

part1.Update

End Sub

-------------------------------------------------------------------------------------------------------------

Wenn ich bei

Set hybridShapeLinePtDir1 = hybridShapes1.Item("Linie.2")

und

Set reference2 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(GSMLine.2;2);None:(Limits1:();Limits2:();-1);Cf11:

die Zahl jeweils manuell um einen Schritt erhöhe - also aus der 2 eine drei, dann eine 4 usw. mache kann ich das Makro jeweils durchlaufen lassen und es erstellt auch die gewünschte Linie. Allerdings möchte ich das Ganze ja über eine Laufvariable i lösen.


Den Code habe ich zunächst ohne for-Schleife abgeändert zu:

--------------------------------------------------------------------------------------------------------------

Language="VBSCRIPT"

Sub CATMain()

Set partDocument1 = CATIA.ActiveDocument

Set part1 = partDocument1.Part

Set hybridShapeFactory1 = part1.HybridShapeFactory

Set axisSystems1 = part1.AxisSystems

Set axisSystem1 = axisSystems1.Item("Achsensystem.1")

Set reference1 = part1.CreateReferenceFromBRepName("REdge:(Edge:(Face:(Brp:(AxisSystem.1;2);None:();Cf11:());Face:(Brp:(AxisSystem.1;1);None:();Cf11:());None:(Limits1:();Limits2:());Cf11:());WithPe rmanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", axisSystem1)

Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirection(reference1)

Set bodies1 = part1.Bodies

Set body1 = bodies1.Item("Hauptkörper")

Set hybridShapes1 = body1.HybridShapes

i = 2

Set hybridShapeLinePtDir1 = hybridShapes1.Item("Linie." & i )

Set reference2 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(GSMLine.& i;2);None:(Limits1:();Limits2:();-1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", hybridShapeLinePtDir1)

Set hybridShapeLinePtDir2 = hybridShapeFactory1.AddNewLinePtDir(reference2, hybridShapeDirection1, 0.000000, 20.000000, False)

body1.InsertHybridShape hybridShapeLinePtDir2

part1.InWorkObject = hybridShapeLinePtDir2

part1.Update

End Sub

-------------------------------------------------------------------------------------------------------------

Allerdings kommt jetzt die Fehlermeldung:

Das Verfahren InsertHybridShape ist fehlgeschlagen.


Hat jemand eine Idee wo der Fehler liegt?


MFG

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 28. Jan. 2013 11:36    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 Sancho23 10 Unities + Antwort hilfreich

Hallo Sancho23,

unabhängig davon, dass man sich den Code sicher auch zurechtbiegen kann, dass er irgendwann zum gewünschten Ergebnis führt, ich würde die Sache gedanklich anders angehen.
Das verfahren, Elemente über einen starren Namen, welcher variabel iteriert, zu bekommen, findei ch z.B. gar nicht gut.

Ich würde mir an Deiner Stelle zunächst Gedanken machen, wie die Daten vorliegen und ob Du sie nicht vielleicht günstiger bekommen könntest.

Z.B. wenn die Linien alle in einem Geometrical Set liegen, dann brauchst Du dieses nur nach Linien zu durchsuchen und hast Deine gewünschten Objekte, ohne Namenssuche und auch direkt in einer Collection, über welche Du besser iterieren kannst, zumal Du dann die Gesamtanzahl kennst.

Dann halte ich die Idee mit der Direction für nicht gut, außer es hat einen speziellen Hintergrund. Wäre nicht eine Punkt zu Punkt-Verbindung deutlich besser? Dafür würde ich die Linien nach ihren Punkten fragen und dann über diese Features eine PunktPunktLinie spannen und fertig.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

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

Sancho23
Mitglied


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

Beiträge: 2
Registriert: 27.01.2013

erstellt am: 28. Jan. 2013 17:13    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 erstmal für deine Antwort,

leider gibt es die Linien zunächst überhaupt noch nicht. Ich habe in meinem Beispiel einfach vom Koordinatenursprung eine Linie in y-Richtung gezogen und mochte nun automatisiert sagen wir einmal 20 weitere Linien an das jeweilige Ende der zuletzt angefügten Linie setzen.
Seltsam ist esben, dass ich in dem aufgenommenen Code die beiden markierten Zahlenwerte immer händisch um 1 hochsetzen kann - dann das Makro speichere - und wenn ich es ablaufen lasse dann macht er mir die Linie. Es scheint also durhaus zu funktionieren, allerdings will sich das Ganze ja über eine for-Schleife lösen, so das er die beiden besagten Werte immer automatisch um 1 erhöht.
Irgendwie scheine ich da nicht recht zu wissen wie man das richtig programmiert bzw. darstellen muss.
Ein weiteres Ziel ist es im Anschluss eine Regel zu implementieen nach der der Algorithmus aufhört neue Linien anzusetzen, wenn eine Begrenzungslinie erreicht wird, aber soweit bin ich ja noch nicht.

MfG

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: 28. Jan. 2013 17:28    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 Sancho23 10 Unities + Antwort hilfreich

Servus
Ich empfehle dir auch, in einem Makro nicht per Namen auf ein Objekt zuzugreifen (in manchen eindeutigen Fällen ist es dann doch einfacher über den Namen).
Zusätzlich würde ich, falls möglich, die Verwendung von BREPs vermeiden.
Dein Code hat in der Zeile mit dem BREP-Zugriff einen Fehler:
Code:
Set reference2 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(GSMLine." & i & ";2);None:(Limits1:();Limits2:();-1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatu reSupport;MFBRepVersion_CXR15)", hybridShapeLinePtDir1)
Bei deinem Code würde nicht der Wert von i eingetragen sondern der String "i".

Gruß
Bernd

EDIT: " & i & " im Code korrigiert
------------------
Warum einfach, wenn es auch kompliziert geht.

[Diese Nachricht wurde von bgrittmann am 28. Jan. 2013 editiert.]

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

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


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

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 28. Jan. 2013 17:43    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 Sancho23 10 Unities + Antwort hilfreich

Da Du hybridShapeLinePtDir2 bereits aus dem letzten Durchlauf hast, brauchst Du es Dir nicht umständlich über den BRep holen, sondern einfach das Objekt weiter verwenden.

Für Dich als Anfänger würde ich aber Empfehlen die Punkte per Koordinaten in der jeweiligen Richtung zu erzeugen, die Werte kannst Du ja einfach iterieren.
Und dann zwischen den Punkten die PtPtLines erzeugen.

Ansonsten stimme ich Bernd zu, Deine Strings sind falsch verbunden. Es müsste nach dem Schema aussehen:

Code:

"blubb" & i & "noch mehr bla"

Ich habe auch immer noch große zweifel, dass Deine Linien immer so heißen werden. Das wird schon nicht mehr funktionieren, wenn auch nur eine Linie vorher erzeugt wurde.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

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