| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
| |
| Schweizer Premium-Anbieter von Flugzeuginnenausstattungen "fliegt" auf Modelsearch , ein Anwenderbericht
|
Autor
|
Thema: A point whether inside a part or not (442 / mal gelesen)
|
Andylau Mitglied
Beiträge: 56 Registriert: 07.06.2021
|
erstellt am: 08. Jun. 2022 05:10 <-- editieren / zitieren --> Unities abgeben:
Dear forum, How to judge a point whether inside a part or not? example 1: part: a ball, radius 10mm, center at 0,0,0 point 0,0,0 and 10,0,0 is inside the ball. and point 20,0,0 is outside the ball example 2: part: a hollow ball, outer radius 10mm, inner radius 8mm, center at 0,0,0 point 0,0,0 and 20,0,0 are not inside the ball, point 10,0,0 is inside the ball Is it possible to realize this in OSD? I didn't find a solution in the IK funtions. Thanks a lot! Andy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
achim96 Mitglied Konstrukteur
Beiträge: 130 Registriert: 08.07.2013 Creo Elements / Direct Modeling, V20.1.4.0 Model Manager V20.1.4.0 Part Library
|
erstellt am: 08. Jun. 2022 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für Andylau
Hallo Andy, mein Vorschlag: reduziere das Problem auf eine 2D-Ebene, auf der beide bekannten Punkte (Punkt und Mittelpunkt) liegen. Die Schnittfläche des Körpers mit der Ebene müsste nun mit dem Punkt verglichen werden, ob er innerhalb oder ausserhalb liegt. ------------------ freundliche Grüße Achim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andylau Mitglied
Beiträge: 56 Registriert: 07.06.2021
|
erstellt am: 08. Jun. 2022 09:29 <-- editieren / zitieren --> Unities abgeben:
Hi Achim, Thanks for you answer. The two examples I gave are simple, your idea may work. But if the part is complex, and has no center, it is hard to find such a plane.
Zitat: Original erstellt von achim96: Hallo Andy,mein Vorschlag: reduziere das Problem auf eine 2D-Ebene, auf der beide bekannten Punkte (Punkt und Mittelpunkt) liegen. Die Schnittfläche des Körpers mit der Ebene müsste nun mit dem Punkt verglichen werden, ob er innerhalb oder ausserhalb liegt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
achim96 Mitglied Konstrukteur
Beiträge: 130 Registriert: 08.07.2013 Creo Elements / Direct Modeling, V20.1.4.0 Model Manager V20.1.4.0 Part Library
|
erstellt am: 08. Jun. 2022 10:09 <-- editieren / zitieren --> Unities abgeben: Nur für Andylau
das ist richtig. Erzeuge dann eine Ebene, die beliebig positioniert ist und den zu prüfenden Punkt beinhaltet. Auf jeden Fall ist dann dieser Punkt mit der Schnittfläche des Körpers auf dieser Ebene zu vergleichen. Ich glaube, man muß das Problem auf jeden Fall auf eine zweidimensionale Ebene reduzieren. ------------------ freundliche Grüße Achim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
achim96 Mitglied Konstrukteur
Beiträge: 130 Registriert: 08.07.2013 Creo Elements / Direct Modeling, V20.1.4.0 Model Manager V20.1.4.0 Part Library
|
erstellt am: 08. Jun. 2022 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für Andylau
Es gibt den Befehl cross_section. Mit dem projizierst du dem Querschnitt auf eine Arbeitsebene. Nun müsste man von diesen Linien auf der Arbeitsebene einzeln Anfangs- und Endpunkte abfragen und "irgendwie" mit dem gesuchten Punkt vergleichen. ------------------ freundliche Grüße Achim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000
|
erstellt am: 08. Jun. 2022 10:53 <-- editieren / zitieren --> Unities abgeben: Nur für Andylau
|
achim96 Mitglied Konstrukteur
Beiträge: 130 Registriert: 08.07.2013 Creo Elements / Direct Modeling, V20.1.4.0 Model Manager V20.1.4.0 Part Library
|
erstellt am: 08. Jun. 2022 13:27 <-- editieren / zitieren --> Unities abgeben: Nur für Andylau
Zitat: Original erstellt von achim96: Es gibt den Befehl cross_section. Mit dem projizierst du dem Querschnitt auf eine Arbeitsebene.
Nochmals zurück zu dem Querschnitt. Mit dieser Geometrie einem Hilfskörper T01 erzeugen und mit Flächenanalyse die Fläche von T01 mit unserem Punkt antippen. Wenn unser Punkt auf der Fläche liegt, dann wird die Fläche gemessen. Wenn nicht, gibt es kein Ergebnis bei der Flächenmessung, bedeutet der Punkt liegt nicht auf der Fläche. ------------------ freundliche Grüße Achim Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andylau Mitglied
Beiträge: 56 Registriert: 07.06.2021
|
erstellt am: 11. Jun. 2022 05:16 <-- editieren / zitieren --> Unities abgeben:
Thanks a lot! That's a very brillant method.
Zitat: Original erstellt von Walter Geppert: Create a very small part "/T1" at the position you want to check, subtract the part you want to check. Afterwards (sd-inq-empty-part-p (sd-inq-curr-part))
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE60+80@home ● W10 Pro Build10.0.19045.4780 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.0.1
|
erstellt am: 11. Jun. 2022 18:34 <-- editieren / zitieren --> Unities abgeben: Nur für Andylau
Zitat: Original erstellt von Walter Geppert: Create a very small part "/T1" at the position you want to check, subtract the part you want to check. Afterwards (sd-inq-empty-part-p (sd-inq-curr-part))
Das haut aber nicht immer hin! gehen wir von einer Kugel aus die T1 = das Hilfsteil ist, radius 0,001mm. Gehen wir vom Grossen Part aus, hier: ein Würfel von 0,0,0 bis 10,10,10. Wenn der PrüfPunkt nun bei 5.3,4,8.2 liegt ist alles gut. Wenn der PrüfPunkt aber bei 0,0,5 liegt... ist das resultierende Hilfspart /T1 eben NICHT leer. Sondern nun angeschnitten. Daher folgender Ansatz:
Code: (defun point-in-part-p (pnt test-part :key (resolution 0.0001)) (let (part-at-pnt volumen-calculated volumen-measured (radius 0.001) ;; oder == resolution ?? * 2 ?? ) ;; create help part .. ;;; halbkreis geo + turn ... (setq volumen-calculated (calculate-volummen ... )) ; faster than a measure ;; subtract ... ;; check (if (sd-inq-empty-part-p part-at-pnt) T ;; else (progn (setq volumen-measured (sd-call-cmds .. etc)) ;; expensive call (not (sd-num-equal-p volumen-calculated volumen-measured :resolution resolution)) ) ) ) )
so in etwa. not tested . nur nach gedacht und runtergeschrieben Jaja. die 42 border cases lassen den Source Code eben immer komplizierter aussehen....
------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● [Diese Nachricht wurde von der_Wolfgang am 11. Jun. 2022 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Walter Geppert Moderator Frank und Frei
Beiträge: 2158 Registriert: 12.12.2000
|
erstellt am: 11. Jun. 2022 19:15 <-- editieren / zitieren --> Unities abgeben: Nur für Andylau
Zitat: Original erstellt von der_Wolfgang:
Das haut aber nicht immer hin!
War mir schon auch klar und nur als Denkanstoss gedacht. Sollen die Leute doch auch ein bissel was weiterentwickeln Jedenfalls einfacher als die Geschichte mit den Arbeitsebenen, 3D bleibt 3D ------------------ meine LISP-Makros sind mit vielen anderen aus diesem Forum auf osd.cad.de Disclaimer Grüße aus Wien Walter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |