Autor
|
Thema: Von Unterroutinen Punkte an CatMain übergeben (478 mal gelesen)
|
BettinaRauch Mitglied BA-Studentin, Fahrzeug-System-Engineering
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 16. Jul. 2009 12:37 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für BettinaRauch
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
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 16. Jul. 2009 15:17 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für BettinaRauch
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
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 17. Jul. 2009 08:26 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 20. Jul. 2009 10:43 <-- editieren / zitieren --> Unities abgeben:
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 / zitieren -->
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
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 20. Jul. 2009 12:49 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 20. Jul. 2009 12:56 <-- editieren / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für BettinaRauch
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
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 20. Jul. 2009 13:07 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|