Autor
|
Thema: Punkt auf Kurve (1278 mal gelesen)
|
BettinaRauch Mitglied BA-Studentin, Fahrzeug-System-Engineering
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 03. Aug. 2009 14:43 <-- editieren / zitieren --> Unities abgeben:
Hallo, hab ein Makro programmiert und möchte jetzt prüfen, ob ein bestimmter Punkt auf einer Kurve liegt (3D-Elemente). Hab schon versucht, es über den Abstand zwischen Punkt und Kurve zu lösen. Also wenn Abstand = 0, dann liegt der Punkt auf der Kurve. Leider funktioniert das nicht, da wegen der 3D-Geometrie nicht immer "0" ausgegeben wird, obwohl der Punkt auf der Kurve liegt. Hat jemand ne andere Idee? Bin für jeden Tipp dankbar. Gruß Betty Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 06. Aug. 2009 15:14 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Vielleicht kann man einen kleinen Umweg gehen: eine Projektion des Punktes auf die Kurve erzeugen, den neuen Punkt zum alten ausmessen (Wenn du DMU-Lizenzen hast um SPAWorkbench zu nitzen) bzw. eine Line mit den Punkten zu erzeugen. Läuft die Line-Erzeugung auf einen Fehler (weil Anfangspunkt und Endpunkt gleich liegen und die Strecke der Linie 0 wird) könnte man den Fehler abfangen und den Abstand "0" annehmen, also damit "Punkt auf Kurve". ------------------ Grüße aus dem Rheinland Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... "Phase 2 in CATIA V5" - www.tobeplus.de 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: 07. Aug. 2009 09:49 <-- editieren / zitieren --> Unities abgeben:
Hallo, Danke für den Beitrag. Die Idee gefällt mir. Mein Problem ist jetzt nur: wie kann ich einen Fehler abfangen? Mit einer If-Verzweigung? Wie muss dann die Anweisung lauten? Set ref1 = part1.CreateReferenceFromObject(Punkt1) Set ref2 = part1.CreateReferenceFromObject(Punkt2) Set Line1 = hybridShapeFactory1.AddNewLinePtPtOnSupport(reference1, reference2) If Error Then ... Else If ... End If 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: 07. Aug. 2009 10:59 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Hallo Bettina, dazu musst du erstmal den internen ErrorHandler ausschalten. Das geht mit der Anweisung Code:
On Error Resume next
Tritt jetzt ein Fehler auf läuft das Script einfach weiter und die Fehlernummer wird in der Systemvariable Err.Number gespeichert. Mit dem Code: On Error Goto 0
schaltest du den internen ErrorHandler wieder ein (das ist wichtig sonst führt es zu einem unkontrollierten Scriptverhalten) Hier jetzt mal ein kleines Beispeil Code:
Dim myIntergerInput as Integer On Error Resume next 'Hier wird der ErrorHandler ausgeschaltet myIntergerInput = InputBox("Bitte geben Sie nur eine Zahl ein",0) If Err.Number <> 0 'Abfagen eines allgemeinen Fehlers (du konntest auch If Err.Number = 123 schreiebn wenn du die genaue Fehlernummer weißt) On Error Goto 0 'hier wird der ErrorHandler weider eingeschaltet den brauchst du jetzt wieder Box = MsgBox("Die Eingabe war keine Zahl",vbCritical,"Hinweis") End If
[Edit] Was schreibst du dir den Überhaupt? Ein CATScript (dann siehe oben) oder ein CATvba? Bei einer CATvba solltest du es mit einer Try...Catch...[Finally]...End try Anweisung machen. Hier kann man sehr egnau auf die Fehler eingehen die ausgeworfen werden. Außerdem kann man selber einen Fehler "werfen"
Dazu gibt es aber viele Seiten im Internet also einfach mal bei google suchen. ------------------ 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: 07. Aug. 2009 12:56 <-- editieren / zitieren --> Unities abgeben:
Danke für die Antwort. Ich schreibe das Ganze im Moment in VBScript. Werde mich mal im Internet schlau machen, sobald ich ein bißchen Zeit hab, und dann wird wieder mal probiert... Grüße vom Bodensee Betty 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: 11. Aug. 2009 09:42 <-- editieren / zitieren --> Unities abgeben:
Hallo, hab jetzt mal nach Try...Catch im Internet gesucht und mir folgendes Programm dazu gebastelt, welches nicht funktioniert (bei dem Update der Linie kommt eigentlich eine Fehlermeldung, da die zwei Punkte genau aufeinander liegen): ---------------------------------- Language="VBSCRIPT" Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set hybridShapeFactory1 = part1.HybridShapeFactory Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item("Tool") Set hybridBodies2 = hybridBody1.HybridBodies Set hybridBody2 = hybridBodies2.Item("Ergebnis") Set hybridBodies3 = hybridBody2.HybridBodies Set hybridBody3 = hybridBodies3.Item("Punkte") Set hybridShapes1 = hybridBody3.HybridShapes Set hybridShapePointOnCurve1 = hybridShapes1.Item("Point.6067") Set reference1 = part1.CreateReferenceFromObject(hybridShapePointOnCurve1) Set hybridShapePointOnCurve2 = hybridShapes1.Item("Point.6066") Set reference2 = part1.CreateReferenceFromObject(hybridShapePointOnCurve2) Try Set hybridShapeLinePtPt1 = hybridShapeFactory1.AddNewLinePtPt(reference1, reference2) hybridBody4.AppendHybridShape hybridShapeInverse1 part1.InWorkObject = hybridShapeInverse1 part1.UpdateObject hybridShapeInverse1 Catch ex MsgBox ("Linie wurde nicht erstellt!") End Try End Sub ---------------------------------- Dabei kommt die erste Fehlermeldung im Anhang. Wenn ich nun anstatt 'End Try' 'EndTry' schreibe, kommt die zweite Fehlermeldung. Hat jemand ne Ahnung, was an meinem Code falsch ist? Hab im Internet auch gelesen, dass es Try Catch in VBA gar nicht gibt. Meinen Code schreibe ich in VBScript. Kann das darauf auch zutreffen? 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: 11. Aug. 2009 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für BettinaRauch
Hallo Bettina, sag mal ließt du meine Beiträge nicht oder erkläre ich so schlecht? In einem CATscript kannst du keine Try...Catch...End Try einsetzen da das eine interen VBA Funktion ist. Das Try Statement kannst du AUSSCHLIEßLICH in einer CATvba einsetzen. Wenn du ein CATScript hast dann musst du den Fehler mit "On Error Resume next" -> "If err.Number <> 0" und "On error goto 0" abfangen. Hier mal den Script umgeschrieben auf ein CATScript (OHNE TRY-Statement) Code:
Language="VBSCRIPT" Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.PartSet hybridShapeFactory1 = part1.HybridShapeFactory Set hybridBodies1 = part1.HybridBodies Set hybridBody1 = hybridBodies1.Item("Tool") Set hybridBodies2 = hybridBody1.HybridBodies Set hybridBody2 = hybridBodies2.Item("Ergebnis") Set hybridBodies3 = hybridBody2.HybridBodies Set hybridBody3 = hybridBodies3.Item("Punkte") Set hybridShapes1 = hybridBody3.HybridShapes Set hybridShapePointOnCurve1 = hybridShapes1.Item("Point.6067") Set reference1 = part1.CreateReferenceFromObject(hybridShapePointOnCurve1) Set hybridShapePointOnCurve2 = hybridShapes1.Item("Point.6066") Set reference2 = part1.CreateReferenceFromObject(hybridShapePointOnCurve2) On Error Resume next Set hybridShapeLinePtPt1 = hybridShapeFactory1.AddNewLinePtPt(reference1, reference2) If Err.Number <> 0 then On Error goto 0 MsgBox ("Linie wurde nicht erstellt!") else hybridBody4.AppendHybridShape hybridShapeInverse1 part1.InWorkObject = hybridShapeInverse1 part1.UpdateObject hybridShapeInverse1 End If End Sub
------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Project Engineer Mechanical (m/w/d) | Die Motherson Group ist einer der 25 größten und am schnellsten wachsenden Anbieter von Komplettsystemlösungen für die globale Automobilindustrie und bedient eine Vielzahl weiterer Branchen wie Eisenbahn, Luft- und Raumfahrt, Medizin, IT und Logistik mit über 168.000 Mitarbeitern in 41 Ländern weltweit. Samvardhana Motherson Reflectec (SMR) ist der Spezialist der Gruppe für Rücksichtsysteme für die Automobilindustrie.... | Anzeige ansehen | Projektmanagement |
|
BettinaRauch Mitglied BA-Studentin, Fahrzeug-System-Engineering
Beiträge: 65 Registriert: 06.07.2009 Catia V5 R19
|
erstellt am: 11. Aug. 2009 10:00 <-- editieren / zitieren --> Unities abgeben:
Hallo, Danke nochmal für die schnelle Antwort. Nein, das liegt wohl weniger an deinen Erklärungen als an meinem Verständnis für die ganzen Script-Sprachen... hört sich alles so ähnlich an und von der Programmierung ist das ja teilweise auch nicht sooo unterschiedlich... CATScript, VBScript, CATVBA, ... Deine Antwort war da jetzt wohl aber mehr als deutlich. Ich werde das jetzt mit dem Error-Zeug abfragen. Ich denke mal, dass ich das hinkriegen müsste. Ansonsten sieht man wieder einen Beitrag von mir im Forum... Also, Danke nochmal. Gruß Betty Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |