| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo |
| |
| SF DRAWING , eine App
|
Autor
|
Thema: Flächennormale (1838 mal gelesen)
|
StephanWörz Mitglied Maschinenbautechniker
Beiträge: 785 Registriert: 11.10.2000 exone - Win10 i9-12900K 3187MHz 32GB Ram nVidia RTX A5000 creo elements/direct V20.5.1.0 SolidPower V20.4 ModelSearch KeyShot 11 CADdoktor SX PHOENIX V11
|
erstellt am: 08. Nov. 2013 10:42 <-- editieren / zitieren --> Unities abgeben:
...eine weiter Hürde ist aufgetaucht: In einem Dialog habe ich eine Variable des Typ :face Wie komme ich nun an die Flächennormale dieser Fläche, damit ich diese im Code weiterverwenden kann?? Im Modeling kann ich via Flächeneigenschaften >> Statistik >> GeoEigenschaften [Bericht] genau diese Werte abfragen. Im IKit habe ich folgendes gefunden: Code:
(sd-inq-face-geo face :Dest-space space) Description: Returns generic geometric data describing a face in a designated coordinate system. Parameters: face {SEL_ITEM} - The face to inquire. :Dest-space {KEYWORD or SEL_ITEM [:local]} :local - Data is returned in the coordinate system of the part containing the face. :global - Data is returned in the global coordinate system. SEL_ITEM - Represents either an object or an element. Data is returned in the coordinate system of the object or the part/workplane owning the element. Return Value: data {SD-FACE} - A Lisp structure. nil - An error occurred.
Code:
SD-FACE [structure](sd-face-p sd-face) (sd-face-u-start sd-face) (sd-face-u-end sd-face) (sd-face-v-start sd-face) (sd-face-v-end sd-face) (sd-face-ll-pnt sd-face) (sd-face-ur-pnt sd-face) (sd-face-u-closed sd-face) (sd-face-u-periodic sd-face) (sd-face-v-closed sd-face) (sd-face-v-periodic sd-face) Description: A Lisp structure containing generic geometric data for a face. Slots: u-start {LONG-FLOAT} - Initial U parameter value on the surface describing the face. u-end {LONG-FLOAT} - Final U parameter value on the surface describing the face. v-start {LONG-FLOAT} - Initial V parameter value on the surface describing the face. v-end {LONG-FLOAT} - Final V parameter value on the surface describing the face. ll-pnt {GPNT3D} - Coordinates of lower-left point of bounding box. ur-pnt {GPNT3D} - Coordinates of upper-right point of bounding box. u-closed {BOOLEAN} - t if face is closed in the U direction; nil if face is open in the U direction. u-periodic {BOOLEAN} - t if face is periodic in the U direction; nil if face is non-periodic in the U direction. v-closed {BOOLEAN} - t if face is closed in the V direction; nil if face is open in the V direction. v-periodic {BOOLEAN} - t if face is periodic in the V direction; nil if face is non-periodic in the V direction. See Also: SD-INQ-FACE-GEO [function] SD-GPNT3D-TO-2D [function]
Leider bekomme ich die Flächennormale hier auch nicht zu packen... Noch ein Schubs in die richtige Richtung wäre super... ------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Patrick Weber Mitglied Konstruktionstechniker, Admin
Beiträge: 659 Registriert: 20.11.2006
|
erstellt am: 08. Nov. 2013 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Hier ein LISP, das alle auf einer Ebenen befindlichen Flächen eines Teils einfärbt. Da kannst du das benötigte rausziehen (siehe sd-plane-normal). Code:
(sd-defdialog 'pw-faces-on-plane :dialog-title "Flächen auf Ebene" :toolbox-button t :variables '( (BACKSTATES :initial-value nil) (AF :value-type :face :multiple-items nil :check-function #'(lambda (new-value) (if (sd-plane-p (sd-inq-geo-props new-value)) :ok (values :error "Ebene Fläche erforderlich!") ) ) :after-input (preview) :title "Bezugsfläche" :prompt-text "Bezugsfläche angeben." ) ) ; end variables :ok-action '(clear-backstates) :cancel-action '(clear-backstates) :local-functions '( (preview () (let ( (P1 (sd-plane-origin (sd-inq-geo-props AF :dest-space :global))) (DIR1 (sd-plane-normal (sd-inq-geo-props AF :dest-space :global))) (FACES (sd-call-cmds (get_selection :focus_type *sd-plane-seltype* :select :in_part (sd-inq-parent-obj AF)))) ) (when BACKSTATES (sd-return-to-model-checkpoint (pop BACKSTATES))) (push (sd-set-model-checkpoint) BACKSTATES) ;(sd-call-cmds (part_prop :the_part (sd-inq-parent-obj AF) :color 11393254 :trans :semi :edge_color 0000000)) (dolist (CURR_FACE FACES) (setf P2 (sd-plane-origin (sd-inq-geo-props CURR_FACE :dest-space :global))) (setf DIR2 (sd-plane-normal (sd-inq-geo-props CURR_FACE :dest-space :global))) (when (sd-vec-dir-equal-p DIR1 DIR2) (when (sd-num-equal-p 0 (sd-vec-scalar-product (sd-vec-subtract P2 P1) DIR1)) (sd-call-cmds (face_prop :the_face CURR_FACE :color 205)) ) ) ) ) ) (clear-backstates () (loop while BACKSTATES do (sd-return-to-model-checkpoint (pop BACKSTATES)) ) ) ) )
------------------ Patrick 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 Konstruktion von Sondermaschinen, Montageautomaten, Meß- und Prüfeinrichtungen, Vorrichtungen und Produktentwicklung mit Creo Elements/Direct Modeling 20.6, AdvancedDesign, Surfacing, Simulate, SolidPower, ModelManager auf HP ZBook Fury 16 G9, Windows 10 Pro 64
|
erstellt am: 08. Nov. 2013 11:20 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Willst du jede beliebige Fläche verarbeiten können? Dann musst du für die Flächennormale ja auch einen speziellen Punkt auf der Fläche angeben. Wenn du aber (denk ich mal) eigentlich eh nur ebene Flächen verarbeiten willst, dann schränke gleich im Auswahldialog die Variable so ein Code: MY_FACE :selection (*sd-plane-seltype*)
, dann gehts nachher im Makro einfacher mit SD-PLANE und sd-plane-normal weiter ------------------ meine LISP-Makros sind auf osd.cad.de Disclaimer Grüße aus Wien
Walter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanWörz Mitglied Maschinenbautechniker
Beiträge: 785 Registriert: 11.10.2000 exone - Win10 i9-12900K 3187MHz 32GB Ram nVidia RTX A5000 creo elements/direct V20.5.1.0 SolidPower V20.4 ModelSearch KeyShot 11 CADdoktor SX PHOENIX V11
|
erstellt am: 08. Nov. 2013 11:27 <-- editieren / zitieren --> Unities abgeben:
|
StephanWörz Mitglied Maschinenbautechniker
Beiträge: 785 Registriert: 11.10.2000 exone - Win10 i9-12900K 3187MHz 32GB Ram nVidia RTX A5000 creo elements/direct V20.5.1.0 SolidPower V20.4 ModelSearch KeyShot 11 CADdoktor SX PHOENIX V11
|
erstellt am: 12. Nov. 2013 10:11 <-- editieren / zitieren --> Unities abgeben:
Nun bin ich soweit fertig mit dem neuen Tool Die Aufgabenstellung war folgende: Wir müssen in Zukunft bestimmte Teile mit einer Artikelnummer versehen. Diese soll direkt im Modell 0.1mm eingefräst werden. Der Konstrukteur soll durch Anwahl der zu beschriftenden Fläche, des Textursprungs und der Textrichtung die Artikelnummer bequem aufbringen können. Bei underen Teilen ist die Artikelnummer in einem Attribut gespeichert. Wenn vorhanden, wird diese Nummer als Default-Beschriftungstext gesetzt. Der Text kann aber beliebig geändert werden. Die Textgröße ist auf 3 Varianten beschränkt. Ich stell das Ganze hier mal zur Vefügung um wieder mal was an das Forum zurück zu geben... Das ist jetzt nichts spektakuläres, aber vielleicht kann die/der Eine oder Andere ja was damit anfangen oder Ideen daraus ziehen. ------------------ ...viele Grüße Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michib Mitglied Einzelkämpfer
Beiträge: 124 Registriert: 12.12.2007 OSD-Modeling 16.00 OSD-Drafting 16.00 BOM/AdvancedDesign MM 16.00 VirtualBox MM HP Z620 WIN10 SD-Modeling/Drafting HP-Z440 WIN-7 HP-xw4600 WIN-XP+WIN-7
|
erstellt am: 23. Okt. 2014 09:55 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Hallo, ich habe mir den lisp-code von Stefan füe meine Zwecke angepasst. Schönheitsfehler: die Anzeige Fräsen oder Extrudieren stimmt beim Aufruf nicht mit dem ausgeführten Verfahren überein => es wird immer das zuletzt gewählte Verfahren ausgeführt, nicht das in der Anzeige gewählte. Nur durch vorherige Anwahl wird das richtige Verfahren gewählt. Wie kann man das beheben? Gruß Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |