| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
Autor
|
Thema: Aussortieren falscher Schnittpunkte von sd-inq-edge-edge-int-pts (1425 / mal gelesen)
|
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 657 Registriert: 20.11.2006 Win7 Pro SP1 64Bit HP Z230, Core i5, 8GB RAM, nv Quadro K600 Creo Elements/Direct 19.0 M010 ModelManager 19.0 M010 clisp,VB.net,VBA,AHK,php,javascript
|
erstellt am: 24. Jan. 2017 10:33 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein Problem mit den Rückgabewerten der Funktion sd-inq-edge-edge-int-pts. Wenn eines der Elemente ein Bogen ist, so wird dieser wie ein Kreis behandelt. Das führt dazu, dass Schnittpunkte zurückgegeben werden, die nicht existieren. Um dieses Fehlverhalten abzufangen, habe ich mir gedacht, ich löse das mit einem der folgenden Kniffe: [1] get_selection auf die Schnittpunkte und schauen, ob zwei oder mehr 2D-Elemente selektiert wurden
[2] measure_dist: Abstand von Kante auf Kante sollte 0 sein
[3] measure_dist: Abstand der Schnittpunkte zu beide Kanten sollte 0 sein
[1] Ich kann nicht nachvollziehen warum, aber wenn ich einen Schnittpunkt mit get_selection und Fokus auf 2d-Kanten selektiere, bekomme ich höchstens ein Element zurück. Wo liegt mein Fehler? [2] "measure_dist :edge_edge" bringt einen Fehler. Woran liegt es hier? Im I-Kit ist nichts beschrieben, aber mit dem Recorder kann man die Funktion aufzeichnen. Existieren tut sie also.
[3] "measure_dist :point_edge" ist meine vorläufige Lösung. Wenn Abstand Kante zu Kante funktionieren würde, wäre mir das aber deutlich lieber.
Dateianhang: Das LISP-File habe ich zusammengeschrumpft, um sich auf die Grundproblematik fokusssieren zu können. Der Dialog beinhaltet eine Schaltfläche zur Erstellung einer Arbeitsebene mit auf dem Bild dargestellten Geometrien. Als Nockenkreis sollte erst einmal nur ein Vollkreis gewählt werden und als Scheibenkontur ein einzelner Bogen herhalten. Die blauen Elemente bringen falsche Schnittpunkte. ------------------ Patrick [Diese Nachricht wurde von Patrick Weber am 24. Jan. 2017 editiert.] [Diese Nachricht wurde von Patrick Weber am 31. Jan. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 27. Jan. 2017 10:57 <-- editieren / zitieren --> Unities abgeben: Nur für Patrick Weber
Hallo Patrick, so ganz habe ich nicht verstanden was du willst, aber wie willst du denn 2 Kanten messen die nicht parallel sind? Da bekomme ich, wenn ich übers Menü messe auch keine Info. Also was ich bekomme sind die beiden SChnittpunkte, die stimmen auch. Wenn ich die richtigen beiden Elemente anwählen, die kann ich mir auch ausgeben lassen. Was du dann aber messen willst mit 2 Kanten verstehe ich nicht. ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 657 Registriert: 20.11.2006 Win7 Pro SP1 64Bit HP Z230, Core i5, 8GB RAM, nv Quadro K600 Creo Elements/Direct 19.0 M010 ModelManager 19.0 M010 clisp,VB.net,VBA,AHK,php,javascript
|
erstellt am: 30. Jan. 2017 15:31 <-- editieren / zitieren --> Unities abgeben:
Ungeachtet der Lage der (endlichen) Kanten gibt es im zweidimensionalen Raum nur 2 Lösungen im Messen-Menü. Zurückgegeben wird immer der kürzeste Abstand zwischen den zwei Elementen. Die erste ist der Abstand 0, wenn Elemente sich berühren, schneiden oder deckungsgleich sind. Die zweite Möglichkeit ist ein messbarer Abstand bei allen anderen Fällen. Demzufolge ergibt das Messen des Abstands zwischen den blauen Kreisbögen eine Länge >0 und die Funktion sd-inq-edge-edge-int-pts liefert falsche Schnittpunkte. Der Abstand der weißen Kreisbögen, welche sich wirklich schneiden, ist dagegen 0. ------------------ Patrick [Diese Nachricht wurde von Patrick Weber am 30. Jan. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 30. Jan. 2017 19:38 <-- editieren / zitieren --> Unities abgeben: Nur für Patrick Weber
ok, also ich weiß immer noch nicht was du willst. Die beiden Schnittpunkte der weißen Linien bekomme ich richtig angezeigt. Bei den blauen Linien kann es keine Lösung geben, also Anzahl an Schnittpunkten ist null. Jetzt weiß ich nicht ob du trotzdem ein Ergebnis angezeigt bekommst oder was dein eigentliches ziel ist. ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 657 Registriert: 20.11.2006 Win7 Pro SP1 64Bit HP Z230, Core i5, 8GB RAM, nv Quadro K600 Creo Elements/Direct 19.0 M010 ModelManager 19.0 M010 clisp,VB.net,VBA,AHK,php,javascript
|
erstellt am: 31. Jan. 2017 08:02 <-- editieren / zitieren --> Unities abgeben:
Was ich für Probleme habe, hatte ich eigentlich sehr ausführlich im ersten Posting erläutert. Mein Problem ist nicht, dass sd-inq-edge-edge-int-pnts falsche Schnittpunkte zurückliefert. Das ist so und daran kann hier niemand etwas ändern. EDIT: Bild aktualisiert (im Browser mit Strg+F5 neu laden) Meine erste Frage bezog sich auf die get_selection-Anweisung. Frage ich dort am existierenden Schnittpunkt zweier Linien diese 2D-Kanten ab, bekomme ich nur eine zurück - müssten aber 2 sein. Das sollte aber doch irgendwie gehen. Meine zweite Frage bezog sich auf "measure_dist :edge_edge", einen Befehl, den man über das Messen-Menü (Abstand Kante zu Kante) auswählen kann. Hier scheine ich die Funktion nicht korrekt aufzurufen. In der Referenz finde ich keine Erläuterungen dazu. ------------------ Patrick [Diese Nachricht wurde von Patrick Weber am 31. Jan. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Greskamp Mitglied Ingenieur
Beiträge: 523 Registriert: 12.03.2003
|
erstellt am: 31. Jan. 2017 08:09 <-- editieren / zitieren --> Unities abgeben: Nur für Patrick Weber
gut, dann hilft dir vielleicht jemand der es besser versteht. ich würde ja wohl kaum fragen wenn ich es verstanden hätte. also bei mir werden 2 Punkte angezeigt, wenn es das ist was du wolltest... ------------------ Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lix b Mitglied Konstrukteur, CAD-Admin
Beiträge: 279 Registriert: 03.10.2014 Creo Elements / Direct Modeling 20.2 Creo Elements / Direct Model Manager 20.2 Creo 5.0 Simulate <P>Notepad++ Win 7
|
erstellt am: 31. Jan. 2017 13:06 <-- editieren / zitieren --> Unities abgeben: Nur für Patrick Weber
Hi! Zu deinem 2. Punkt: Wenn ich mir den Befehl
Code: (setf ABST (sd-call-cmds (measure_dist :edge_edge ELEM SCHEIBE)))
anschaue, möchtest du den Abstand zwischen "ELEM" und "SCHEIBE" ermitteln. Weiter oben definierst du ein Code: (dolist (ELEM SCHEIBE)
somit kann das nicht funktionieren. Der Befehl verlangt 2 Kanten und du gibst ihm eine Kante und eine Liste von Kanten. ------------------ Viele Grüße Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 657 Registriert: 20.11.2006 Win7 Pro SP1 64Bit HP Z230, Core i5, 8GB RAM, nv Quadro K600 Creo Elements/Direct 19.0 M010 ModelManager 19.0 M010 clisp,VB.net,VBA,AHK,php,javascript
|
erstellt am: 31. Jan. 2017 14:30 <-- editieren / zitieren --> Unities abgeben:
@Felix: Danke, wenn man eine Zeit lang am Script rumfummelt, ist man blind für solche "Kleinigkeiten" und sieht den Wald vor lauter Bäumen nicht. Muss natürlich (setf ABST (sd-call-cmds (measure_dist :edge_edge ELEM NOCKE))) heißen. Kleine Anmerkung am Rande: measure_dist :point_edge ist im Vergleich zu :edge_edge deutlich performanter.
------------------ Patrick
[Diese Nachricht wurde von Patrick Weber am 31. Jan. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lix b Mitglied Konstrukteur, CAD-Admin
Beiträge: 279 Registriert: 03.10.2014 Creo Elements / Direct Modeling 20.2 Creo Elements / Direct Model Manager 20.2 Creo 5.0 Simulate <P>Notepad++ Win 7
|
erstellt am: 31. Jan. 2017 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für Patrick Weber
Zu dem Problem in Punkt 1 Vermutlich verstehe ich dich auch falsch, aber mein Gedanke wäre folgender: - deine 2 Schnittpunkte werden zum Einen durch den Kreis und zum Anderen durch die gedachte Verlängerung des Bogens generiert => somit liefert get_selection doch richtigerweise 2x denselben vollständigen Kreis (der Bogen ist ja physisch nicht an diesem Schnittpunkt vorhanden)
------------------ Viele Grüße Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lix b Mitglied Konstrukteur, CAD-Admin
Beiträge: 279 Registriert: 03.10.2014 Creo Elements / Direct Modeling 20.2 Creo Elements / Direct Model Manager 20.2 Creo 5.0 Simulate <P>Notepad++ Win 7
|
erstellt am: 31. Jan. 2017 16:01 <-- editieren / zitieren --> Unities abgeben: Nur für Patrick Weber
Nachtrag: Ich kann dein Problem jetzt nachvollziehen. Mir fällt auch nichts auf, warum nur die erste Kurve gewählt wird, aber du kannst dir abhelfen indem du in einer Schleife die gefundenen Kurven in Hilfsgeometrie umwandelst und nach Fertigstellung wieder alle Kurve zurückwandelst. Code: (loop while (sd-call-cmds (get_selection :focus_type *sd-edge-2d-seltype* :curr_wp_only :select :edge_2d (sd-gpnt3d-to-2d S))) do (progn (display (sd-call-cmds (get_selection :focus_type *sd-edge-2d-seltype* :curr_wp_only :select :edge_2d (sd-gpnt3d-to-2d S)))) (setf S_ELEM (cons (sd-call-cmds (get_selection :focus_type *sd-edge-2d-seltype* :curr_wp_only :select :edge_2d (sd-gpnt3d-to-2d S))) S_ELEM)) (sd-call-cmds (toggle_type (sd-gpnt3d-to-2d S))) ) ) (dolist (obj S_ELEM) (sd-call-cmds (toggle_type obj)) )
------------------ Viele Grüße Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 657 Registriert: 20.11.2006 Win7 Pro SP1 64Bit HP Z230, Core i5, 8GB RAM, nv Quadro K600 Creo Elements/Direct 19.0 M010 ModelManager 19.0 M010 clisp,VB.net,VBA,AHK,php,javascript
|
erstellt am: 31. Jan. 2017 16:05 <-- editieren / zitieren --> Unities abgeben:
Ok, ich simplifiziere weiter: Man habe 2 Geraden gegeben, die sich im Punkt S(0,0) schneiden. Wendet man auf diesen Punkt get_selection an, wird nur eine der Geraden selektiert. Erstelle eine AE und 2 Linien durch den Nullpunkt. In die Eingabezeile gib dann (get_selection :focus_type *sd-edge-2d-seltype* :curr_wp_only :select :edge_2d (make-gpnt2d :x 0 :y 0)) ein. Eine Gerade wird selektiert, nicht beide.
------------------ Patrick Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lix b Mitglied Konstrukteur, CAD-Admin
Beiträge: 279 Registriert: 03.10.2014 Creo Elements / Direct Modeling 20.2 Creo Elements / Direct Model Manager 20.2 Creo 5.0 Simulate <P>Notepad++ Win 7
|
erstellt am: 31. Jan. 2017 16:06 <-- editieren / zitieren --> Unities abgeben: Nur für Patrick Weber
|
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 657 Registriert: 20.11.2006 Win7 Pro SP1 64Bit HP Z230, Core i5, 8GB RAM, nv Quadro K600 Creo Elements/Direct 19.0 M010 ModelManager 19.0 M010 clisp,VB.net,VBA,AHK,php,javascript
|
erstellt am: 01. Feb. 2017 08:02 <-- editieren / zitieren --> Unities abgeben:
Ja, dein Ansatz ist schlüssig. Anternativ könnte man auch alle Geometrien mit :all_2d selektieren und dann mit sd-point-on-edge-p prüfen, je nach Komplexität. Das habe ich schon in Erwägung gezogen, aber doch auf einen Einzeiler gehofft. Wie es scheint, gibt es den nicht. Vielen Dank für die Hilfe! ------------------ Patrick Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
lix b Mitglied Konstrukteur, CAD-Admin
Beiträge: 279 Registriert: 03.10.2014 Creo Elements / Direct Modeling 20.2 Creo Elements / Direct Model Manager 20.2 Creo 5.0 Simulate <P>Notepad++ Win 7
|
erstellt am: 01. Feb. 2017 08:16 <-- editieren / zitieren --> Unities abgeben: Nur für Patrick Weber
Nachdem das von dir festgestellte Fehlverhalten unlogisch ist, befürchte ich das der Weg über "2d alles wählen" und danach selektieren durch denselben Fehler misslingen wird. Aber hey, wenigstens läufts ------------------ Viele Grüße Felix Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 657 Registriert: 20.11.2006 Win7 Pro SP1 64Bit HP Z230, Core i5, 8GB RAM, nv Quadro K600 Creo Elements/Direct 19.0 M010 ModelManager 19.0 M010 clisp,VB.net,VBA,AHK,php,javascript
|
erstellt am: 01. Feb. 2017 10:49 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von lix b: Nachdem das von dir festgestellte Fehlverhalten unlogisch ist, befürchte ich das der Weg über "2d alles wählen" und danach selektieren durch denselben Fehler misslingen wird.
Läge durchaus im Bereich des Möglichen. ------------------ Patrick Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sinan Akyar Mitglied Maschinenbau Ingenieur, SW Entwickler
Beiträge: 64 Registriert: 17.09.2004 Creo Elements/Direct, SolidGenius, SpaceCable, ExtrusionPower, ProgressivePower, FramesLink, SpacePipe
|
erstellt am: 07. Feb. 2017 05:18 <-- editieren / zitieren --> Unities abgeben: Nur für Patrick Weber
Hallo Patrick, ich habe diesen Beitrag leider zu spät gelesen. Vielleicht kann ich noch helfen die Lösung doch einfacher zu gestalten. Dieses Problem löse ich seit Jahren erfolgreich einfach mit der Paremeterposition des Schnittpunktes auf dem gesuchten Elementes. Liegt die Parameterposition auf dem Element, ist es ein realer Schnittpunkt - liegt der Schnittpunkt ausserhalb des Parameterbereiches, ist er ein virtueller Schnittpunkt. (sd-proj-pnt-on-edge .... :cv-space NIL) Ich hoffe es hilft Dir weiter freundliche Grüße Sinan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |