Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Von Unterroutinen Punkte an CatMain übergeben

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:  Von Unterroutinen Punkte an CatMain übergeben (478 mal gelesen)
BettinaRauch
Mitglied
BA-Studentin, Fahrzeug-System-Engineering


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

Beiträge: 65
Registriert: 06.07.2009

Catia V5 R19

erstellt am: 16. Jul. 2009 12:37    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 hab inzwischen ein ziemlich langes Makro geschrieben. Da ich gelesen hab, dass man im CatMain allein wegen der Übersichtlichkeit nur wenige Schleifen und Programmzeilen unterbringen soll, möchte ich meinen Code ein bisschen vereinfachen.
Hab auch schon was von Unterroutinen gehört, bin mir aber nicht sicher, ob das in meinem Fall anwendbar ist.

Hab mal versucht ein einfaches Beispiel zu erfinden:
Ich erstelle mit einer Unterroutine zwei 3D-Punkte (Punkt1, Punkt2).
Im CatMain lass ich die Unterroutine laufen und möchte dann eine Linie Punkt1-Punkt2 erstellen.

Die Unterroutine läuft durch und dann meckert er, weil er im CatMain die Punkte1 und 2 nicht finden kann, um sie als Referenzen für die Linie zu nehmen. (Das find ich ja sogar logisch.)
Gibt es nicht irgendeine Möglichkeit, die erstellten Punkte dem CatMain zu übergeben? Geht das bei Funktionen? Aber da können doch nur Werte, also ich meine Zahlenwerte übergeben werden, oder? Zumindest hat bis jetzt keiner meiner Versuche funktioniert.

Hoffe, dass jemand ne Ahnung davon hat. Bin für jeden Tipp dankbar.

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 16. Jul. 2009 13: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 BettinaRauch 10 Unities + Antwort hilfreich

Hallo,
das sind absolute Grundlagen, zu denen du hier im Forum eigentlich massenhaft Bsp. finden solltest. Oder kauf dir ein Buch.

Es gibt mehrere Möglichkeiten, die 2 Grundlegenden sind:

1) Objekte Public machen, d.h. sie sind überall bekannt

Public oTest

Sub CATMain()
   Set oTest = CATIA.ActiveDocument
   CATMsgBox
End Sub

Sub CATMsgBox
   Msgbox oTest.Name
End Sub

2) Objekte Übergeben

Sub CATMain()
   Dim oTest
   Set oTest = CATIA.ActiveDocument
   CATMsgBox oTest
End Sub

Sub CATMsgBox (oBsp)
   Msgbox oBsp.Name
End Sub

Mit Funktionen geht das genauso. Du kannst mehre Objekte / Parameter übergeben, immer durch "," getrennt.

Gruß


------------------
tomtom1972

[Diese Nachricht wurde von tomtom1972 am 16. Jul. 2009 editiert.]

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

BettinaRauch
Mitglied
BA-Studentin, Fahrzeug-System-Engineering


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

Beiträge: 65
Registriert: 06.07.2009

Catia V5 R19

erstellt am: 16. Jul. 2009 15:17    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

Hi,

Danke für den Tipp, aber ich habe bereits 3 Bücher auf dem Tisch liegen und arbeite mich seit knapp 2 Wochen in das Thema ein.

Ich vermute mal, dass du mich falsch verstanden hast (wahrscheinlich beschreibe ich meine Probleme nicht sehr eindeutig), denn das was du geschrieben hast, habe ich selber anhand der Bücher rausbekommen: (auf mein Beispiel angewendet)

Language="VBSCRIPT"
Sub CATMain()
Set …
Set reference1 = part1.CreateReferenceFromObject(Curve1)
'Jetzt kommt die Funktion
Punkterzeugung reference1, hybridBody3
End Sub
'Das ist die Funktion
Function Punkterzeugung (reference1, hybridBody3)
'Punkt 1 erzeugen
Set hybridShapePointOnCurve1 = hybridShapeFactory1.AddNewPointOnCurveFromPercent(reference1, 0.000000, False)
hybridBody3.AppendHybridShape hybridShapePointOnCurve1
part1.InWorkObject = hybridShapePointOnCurve1
part1.UpdateObject hybridShapePointOnCurve1
'Punkt 2 erzeugen
Set hybridShapePointOnCurve2 = hybridShapeFactory1.AddNewPointOnCurveFromPercent(reference1, 1.000000, False)
hybridBody3.AppendHybridShape hybridShapePointOnCurve2
part1.InWorkObject = hybridShapePointOnCurve2
part1.UpdateObject hybridShapePointOnCurve2
End Function


Ich schreib jetzt mal meinen NICHT-funktionierenden Code hierhin, vielleicht versteht man dann mein Problem besser:

Language="VBSCRIPT"
Sub CATMain()
Set …
Set reference1 = part1.CreateReferenceFromObject(Curve1)
'Jetzt kommt die Funktion
Punkterzeugung reference1, hybridBody3
'Erstellung einer Linie
Set reference2 = part1.CreateReferenceFromObject(hybridShapePointOnCurve1)
Set reference3 = part1.CreateReferenceFromObject(hybridShapePointOnCurve2)
Set hybridShapeLinePtPt1 = hybridShapeFactory1.AddNewLinePtPt(reference2, reference3)
hybridBody3.AppendHybridShape hybridShapeLinePtPt1
part1.InWorkObject = hybridShapeLinePtPt1
part1.UpdateObject  hybridShapeLinePtPt1
End Sub
'Das ist die Funktion
Function Punkterzeugung (reference1, hybridBody3)
'Punkt 1 erzeugen
Set hybridShapePointOnCurve1 = hybridShapeFactory1.AddNewPointOnCurveFromPercent(reference1, 0.000000, False)
hybridBody3.AppendHybridShape hybridShapePointOnCurve1
part1.InWorkObject = hybridShapePointOnCurve1
part1.UpdateObject hybridShapePointOnCurve1
'Punkt 2 erzeugen
Set hybridShapePointOnCurve2 = hybridShapeFactory1.AddNewPointOnCurveFromPercent(reference1, 1.000000, False)
hybridBody3.AppendHybridShape hybridShapePointOnCurve2
part1.InWorkObject = hybridShapePointOnCurve2
part1.UpdateObject hybridShapePointOnCurve2
Function = hybridShapePointOnCurve1, hybridShapePointOnCurve2
End Function

Die fett-markierten Sachen sind die, die ich im CatMain wieder verwenden will. Mir ist klar, dass der Code - so wie er oben steht - nicht funktioniert. Hab auch schon einiges probiert, aber es will nicht funktionieren. Deswegen will ich wissen, ob jemand weiß, ob sowas überhaupt geht.

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 17. Jul. 2009 06:53    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 BettinaRauch 10 Unities + Antwort hilfreich

Moin,

geht dann so (sofern ich dich richtig verstanden habe)

Sub CATMain()
   .....
   Set hybridShapePointOnCurve1 = Punkterzeugung (reference1, HybridBody3)
   Set hybridShapePointOnCurve2 = Punkterzeugung (reference2, HybridBody3)
End Sub

Function Punkterzeugung (reference1, hybridBody3)
   ....
   'hier erzeugst du deinen Punkt
   Set Punkterzeugung = hybridShapePointOnCurve1
End Function

Und wenn du zwei Punkte erzeugten willst, dann rufst du die Funktion 2 mal auf.

Eine Funktion hat immer einen Rückgabewert.

Woher weiß deine Funktion, was hybridShapeFactory1 und part1 ist?
Sind die Publik?

Gruß


------------------
tomtom1972

[Diese Nachricht wurde von tomtom1972 am 17. Jul. 2009 editiert.]

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

BettinaRauch
Mitglied
BA-Studentin, Fahrzeug-System-Engineering


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

Beiträge: 65
Registriert: 06.07.2009

Catia V5 R19

erstellt am: 17. Jul. 2009 08:26    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

Guten Morgen,

bin ja total baff, dass manche Leute es schaffen, so früh was ins Forum zu schreiben.

Also ich würde jetzt mal einfach so behaupten, dass du mich richtig verstanden hast. Es funktioniert nämlich jetzt einwandfrei und ich hab gelernt wie ne Rückgabe von Objekten funktioniert *freu*.
Vielen Dank also für deine Antwort. Hat mir wirklich sehr weitergeholfen. Und sorry, wenn es manchmal so aussieht, als ob hier Banalitäten gefragt werden. Ich bemüh mich, alles selber hinzukriegen, aber manchmal werde ich aus den Büchern nicht schlau und andere Forum-Einträge helfen auch nicht immer weiter.

Schöne Grüße aus dem verregneten Süden...
Betty

PS: Noch zu deiner Frage: Ja, hybridShapeFactory1 und part1 hab ich global deklariert. Diesen Teil der Bücher hab ich soweit verstanden. 

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

BettinaRauch
Mitglied
BA-Studentin, Fahrzeug-System-Engineering


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

Beiträge: 65
Registriert: 06.07.2009

Catia V5 R19

erstellt am: 20. Jul. 2009 10: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


Funktion_Spline.JPG

 
Hallo,

hoffe mir kann noch mal jemand helfen. Ich habe in einer Schleife Punkte erzeugt und diese durch ein Spline verbunden. Das funktioniert alles perfekt…

-----------------------
'Spline1 erstellen
Set Spline1 = hybridShapeFactory1.AddNewSpline()
Spline1.SetSplineType 0
Spline1.SetClosing 0

'Laenge1 der "Boundary" messen
Set Laenge1 = TheSPAWorkbench.GetMeasurable(ref1)
Var2 = Laenge1.Length

Var3 = Var2 / Var1

For Var4 = 1 To Var3
Var5 = Var1 * Var4

'Punkt2 auf Verschneidung2 erzeugen
Set Punkt1 = hybridShapeFactory1.AddNewPointOnCurveFromDistance(ref1, Var5, False)
Punkt1.DistanceType = 1
hybridBody4.AppendHybridShape Punkt1
part1.InWorkObject = Punkt1
part1.UpdateObject Punkt1

Spline1.AddPointWithConstraintExplicit Punkt1, Nothing, -1.000000, 1, Nothing, 0.000000
Next

hybridBody3.AppendHybridShape Spline1
part1.InWorkObject = Spline1
part1.UpdateObject Spline1

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

… nun möchte ich die Punkterzeugung durch eine Function abbilden. Meinen erzeugten Code seht ihr unten. Nun kommt aber ne Fehlermeldung (im Anhang) Hat jemand ne Idee, was der Fehler sein könnte?

-----------------------
'Spline1 erstellen
Set Spline1 = hybridShapeFactory1.AddNewSpline()
Spline1.SetSplineType 0
Spline1.SetClosing 0

'Laenge1 der "Boundary" messen
Set Laenge1 = TheSPAWorkbench.GetMeasurable(ref1)
Var2 = Laenge1.Length

Var3 = Var2 / Var1

For Var4 = 1 To Var3
Var5 = Var1 * Var4

Punkt1 = Punkterzeugung (Var5)

Spline1.AddPointWithConstraintExplicit Punkt1, Nothing, -1.000000, 1, Nothing, 0.000000 '<-hier wird gemeckert!
Next

hybridBody3.AppendHybridShape Spline1
part1.InWorkObject = Spline1
part1.UpdateObject Spline1

End Sub

Function Punkterzeugung (Var5)

'Punkt2 auf Verschneidung2 erzeugen
Set Punkt1 = hybridShapeFactory1.AddNewPointOnCurveFromDistance(ref1, Var5, False)
Punkt1.DistanceType = 1
hybridBody4.AppendHybridShape Punkt1
part1.InWorkObject = Punkt1
part1.UpdateObject Punkt1

End Function
-----------------------

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


Ex-Mitglied

erstellt am: 20. Jul. 2009 12:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hallo Bettina,

Punkt1 = Punkterzeugung (Var5)

damit weist du Punkt1 das Rückgabeergebnis der Funktion zu
aber in der Funktion wird Punkt1 ein Object

darum die Fehlermeldung Typen unverträglich

Function Punkterzeugung (Var5)

'Punkt2 auf Verschneidung2 erzeugen
Set Punkt1 = hybridShapeFactory1.AddNewPointOnCurveFromDistance(ref1, Var5, False)

das Resultat einer Funktion ist immer der Funktionsname

also

Punkterzeugung = Punkt1
End Function


Gruß Martin

------------------
mb 

BettinaRauch
Mitglied
BA-Studentin, Fahrzeug-System-Engineering


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

Beiträge: 65
Registriert: 06.07.2009

Catia V5 R19

erstellt am: 20. Jul. 2009 12:49    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


Funktion_Spline.JPG

 
Hallo,

Vielen Dank für die schnelle Antwort. Deine Begründung klingt für mich sehr logisch, aber funktionieren tut es bei mir trotzdem noch nicht. Hier ist mein jetziger Code. So hast du es doch auch gemeint, oder? (Im Anhang noch die jetzige Fehlermeldung)

'-------------------
'Spline1 erstellen
Set Spline1 = hybridShapeFactory1.AddNewSpline()
Spline1.SetSplineType 0
Spline1.SetClosing 0

'Laenge1 der "Boundary" messen
Set Laenge1 = TheSPAWorkbench.GetMeasurable(ref1)
Var2 = Laenge1.Length

Var3 = Var2 / Var1

For Var4 = 1 To Var3
Var5 = Var1 * Var4

Set ref = Punkterzeugung (Var5)

Spline1.AddPointWithConstraintExplicit ref, Nothing, -1.000000, 1, Nothing, 0.000000
Next

hybridBody3.AppendHybridShape Spline1
part1.InWorkObject = Spline1
part1.UpdateObject Spline1

End Sub

Function Punkterzeugung (Var5)

'Punkt2 auf Verschneidung2 erzeugen
Set Punkt1 = hybridShapeFactory1.AddNewPointOnCurveFromDistance(ref1, Var5, False)
Punkt1.DistanceType = 1
hybridBody4.AppendHybridShape Punkt1
part1.InWorkObject = Punkt1
part1.UpdateObject Punkt1

Punkterzeugung = Punkt1 '<- Hier wird gemeckert!

End Function
'-------------------

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

BettinaRauch
Mitglied
BA-Studentin, Fahrzeug-System-Engineering


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

Beiträge: 65
Registriert: 06.07.2009

Catia V5 R19

erstellt am: 20. Jul. 2009 12: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

Hallo,

hab es jetzt doch selber rausbekommen (hätte nur noch ein bißchen probieren müssen  ).
In der Funktion muss es heißen: Set Punkterzeugung = Punkt1
Also, Danke noch mal für deine Antwort. Hat mir auf jeden Fall sehr geholfen.

Gruß Betty

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

DanielFr.
Moderator
Manager


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

Beiträge: 2506
Registriert: 10.08.2005

HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3

erstellt am: 20. Jul. 2009 13:01    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 BettinaRauch 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von BettinaRauch:
Hallo,

hab es jetzt doch selber rausbekommen (hätte nur noch ein bißchen probieren müssen  :( ).
In der Funktion muss es heißen: Set Punkterzeugung = Punkt1
Also, Danke noch mal für deine Antwort. Hat mir auf jeden Fall sehr geholfen.

Gruß Betty


Hallo,

das ist ja auch logisch den der "Punkt1" ist ja ein Objekt und kein Wert. Deswegen brauchst du die "Set-Anweisung" 

------------------
MFG Daniel

Die KATJA ist halt doch nur ne zickige Französin

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

BettinaRauch
Mitglied
BA-Studentin, Fahrzeug-System-Engineering


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

Beiträge: 65
Registriert: 06.07.2009

Catia V5 R19

erstellt am: 20. Jul. 2009 13: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

Jep. So langsam sollte ich das auch kapiert haben. Aber ich gebe die Hoffnung noch nicht auf...
An dieser Stelle ein ganz dickes "Danke" an alle, die immer so nett helfen.

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