| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
| |
| PLM ist mehr als Datensammeln, ein Anwenderbericht
|
Autor
|
Thema: :check_function (1528 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: 18. Jun. 2008 17:05 <-- editieren / zitieren --> Unities abgeben:
Hallo! ... hänge auch mal wieder! Ich wähle ein oder mehrere Teile, selektiere alle Flächen der Teile nacheinander und prüfe ob jede einzelne Fläche eine bestimmte Farbe hat. Wenn eine Fläche mit der entsprechenden Farbe gefunden wird, wird umgefärbt. Das klappt solange Teile gewählt sind welche eine Fläche mit der gesuchten Farbe haben. Sind in der Liste Teile drin die dem Kriterium nicht entsprechen kommt Fehler: Auswahl fehlgeschlagen. Bitte neu auswählen. (Fehler 301) Irgendwo passt da was noch nicht Was läuft hier falsch? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PeterO Mitglied Admin
Beiträge: 101 Registriert: 14.01.2003 Windows XP Modeling 15.50A Drafting 15.50A UI3 ModelManager 15.50A
|
erstellt am: 18. Jun. 2008 19:34 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Hallo, so sollte es funktionieren. Ich habe das ganze als Text eingefügt, da bei mir der Upload nicht funktioniert. ;********************************************************************************************* ; Dateiname : SD_UpdateThreadColor.lsp ; Autor : Stephan Wörz ; Erstellt : 18.06.2008 ; geändert : ;********************************************************************************************* ; Beschreibung : - Suchen aller Flächen welche die SolidLib typische rosa Farbe haben ; Ändern der Farbe dieser Flächen ; ; ; Optionen : - ; - ; - ;********************************************************************************************* (in-package :Teo) (use-package :OLI) (sd-hide-console-window) (sd-show-console-window) (setf si::*enter-break-handler* t) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'SD_UpdateThreadColor :dialog-title "Update ThreadColor" :toolbox-button t :variables '( (object :value-type art :initial-value nil :modifies nil :title "Teil(e) angeben" :multiple-items t :after-input (progn (GetFaces) ;; alte SolidLib-Gewindeflächen zusammensuchen (setf object nil) ;; Variable zurücksetzen );;progn :next-variable 'object );;object ("INFO")
(Info :title "Kurzanleitung" :toggle-type :wide-toggle ush-action (sd-display-message "Das Tool bietet folgende Funktion: Die gewÌhlten Teile werden auf rosa FlÌchen durchsucht! Diese FlÌchen werden dann umgefÌrbt! " ush "Alles Klar!" );;sd-display-message );;Info );;variables :local-functions '( (GetFaces () (let (ThreadColor OldThreadFaces) (setq ThreadColor (sd-rgb-to-color (read-from-string "0.0,0.0,0.5"))) ;;Gewindefarbe setzen (setf OldThreadFaces nil) (dolist (part object) (sd-call-cmds (get_selection :focus_type *sd-cylinder-seltype* ;;*sd-face-seltype* ;:check_function #'checkOldThreadFaces :check_function #'checkOldThreadFaces2 :select :selected_part part :all_3d) :failure (setf OldThreadFaces nil) :success (setf OldThreadFaces *SD-ACTION-RESULT*) );;sd-call-cmds (when OldThreadFaces (dolist (Threadface OldThreadFaces) (sd-call-cmds (set_face_color Threadface ThreadColor)) );;dolist );;when );;dolist );;let );;getfaces (checkOldThreadFaces2 (face) (if (equal (sd-inq-face-color face) (gpnt3d 1.0 0.63137257099151611 0.60000002384185791)) k :filter );;if );;checkOldThreadFaces2 );;local-functions k-action '() :help-action '(sd-display-message "Das Tool bietet folgende Funktion: Die gewÌhlten Teile werden auf rosa FlÌachen durchsucht! Diese FlÌchen werden dann umgefÌrbt! " :title "Update Threadcolor - Kurzanleitung" ush "Alles Klar!" );;sd-display-message ) ;; end defdialog
------------------ Gruß, Peter 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: 18. Jun. 2008 20:24 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Code:
(if (equal (sd-inq-face-color face) (gpnt3d 1.0 0.63137257099151611 0.60000002384185791))
R I S I K O hoch 27!!! equal!!!! Pfui!!! ein wackelndes bit, eine winz'ge ungenauigkeit und der Equal geht in die Hose. Laengen, Punkte, Richtungen, 3D Punkte (und damit eben auch Farben), vergleicht man nicht mit equal! Das waere genauso als wenn Du 2mal die Entfernung zum Mond misst und den Gliedermaßstab (formerly known as Zollstock) fuer die Genauigkeit verwendest. Ok Ich übertreibe... etwas. Man subtrahiert solche Dinge und guckt dann obs 'nahe Null ist. Oder man bemüht gleich die entsprechenden dokumentierten OLI funktionen: sd-vec-equal-p -> punkte, richtungen, farben sd-num-equal-p -> nummern eben.. Das habe ich erst kuerlich in einem anderem Forum geschrieben. ------ Und wenn du aus der OK-action noch eine help-action machst, und dafür den Info button entfernst, wäre es vielleicht etwas 'stimmiger' ------------------ ● Seamonkey Firefox Thunderbird Seamonkey auf deutsch ● OSD Hilfeseite (de) / help page (en) ● 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: 18. Jun. 2008 20:26 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
|
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: 18. Jun. 2008 20:28 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
|
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: 19. Jun. 2008 09:36 <-- 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: 19. Jun. 2008 09:48 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von der_Wolfgang: Den check sollte man vielleicht eh besser mit sd-inq-thread machen, oder? <meinjanur>
Grundsätzlich ist das OK! Wir haben halt viele Teile bei denen kein Gewindefeature dahintersteckt. Hier wurden halt die Gewindeflächen farblich gekennzeichnet (Kaufteile, Downloads vom Hersteller). Unser Häuptling will jetzt halt dass alle Gewinde in der aktuellen Farbe gekennzeichnet werden. 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: 01. Jul. 2008 00:23 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Zitat: Original erstellt von StephanWörz: Grundsätzlich ist das OK! Wir haben halt viele Teile bei denen kein Gewindefeature dahintersteckt. Hier wurden halt die Gewindeflächen farblich gekennzeichnet
Dann wuerde ich ein ODER nehmen.. When 's is 'ne ordentliche Gewindeflaeche (== (sd-inq-thread face) oder die Farbe so ungefähr passt (== (sd-vec-equal-p (sd-inq-face-color face) 1.0,0.63,0.6) :resolution 1e-3) die 'Vergleichsffarbe' würde ich im Dialog direkt reinschreiben. Ausserdem braucht die check-function nicht jedesmal aus 3 werten einen vector bauen. Das reicht wenn man das einmal macht. Immerhin nudelst Du u.U. ein ganzes Assembly durch mir allen cylindrischen flächen. Da will man auch etwas auf die performance achten, oder? Mit dem oder wird's wenigsten einheitlich.
uhh.... und dann habe ich da noch ne gänsehaut:
(setq ThreadColor (sd-rgb-to-color (read-from-string "0.0,0.0,0.5"))) ;;Gewindefarbe setzen was soll denn der read-from-string hier? folgendes reicht: (setq ThreadColor (sd-rgb-to-color 0,0,0.5)) ;;Gewindefarbe setzen zwecks code pflege:
Code:
:variables '((thread-color-old-rgb :initial-value 1.0,0.63,0.6) ;; dieses leichte rosa (thread-color-new-sd :initial-value (sd-rgb-to-color 0,0,0.5)) ;; half blue ....
------------------ ● Seamonkey Firefox Thunderbird Seamonkey auf deutsch ● OSD Hilfeseite (de) / help page (en) ●[Diese Nachricht wurde von der_Wolfgang am 01. Jul. 2008 editiert.] 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: 01. Jul. 2008 07:52 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von der_Wolfgang: uhh.... und dann habe ich da noch ne gänsehaut:
... herzlichen Dank für die Tipps! Werde ich gleich mal umsetzen!
Schönen Tag, guten Wirkungsgrad Stephan 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: 01. Jul. 2008 09:57 <-- editieren / zitieren --> Unities abgeben:
... jetzt hänge ich schon wieder! Zitat: die Farbe so ungefähr passt
Code: (== (sd-vec-equal-p (sd-inq-face-color face) 1.0,0.63,0.6) :resolution 1e-3)
... da kommt bei mir nix bei raus (Farbe 1.0 0.63137257099151611 0.60000002384185791 wird nicht erkannt). Was genau macht "==" ? Ich habe das mal so versucht: Code: (if (sd-vec-equal-p (sd-inq-face-color face) 1.0,0.63,0.60 :resolution 1e-3)
... wie umgehe ich den Fehler, der auftaucht wenn am Teil Flächen sind die KEINE Flächenfarbe haben? NIL cannot be coerced to a VECTOR3 Signalled by SD-VEC-EQUAL-P Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
clausb Ehrenmitglied V.I.P. h.c.
Beiträge: 2914 Registriert: 20.12.2000 Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.
|
erstellt am: 01. Jul. 2008 10:20 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Zitat: Original erstellt von StephanWörz: Was genau macht "==" ?
Einen Fehler verursachen. == gibt es in Lisp nicht, es sei denn, man definiert sich eine Funktion dieses Namens. Zitat:
... wie umgehe ich den Fehler, der auftaucht wenn am Teil Flächen sind die KEINE Flächenfarbe haben?
Indem Du das halt vor dem Vergleich abfragst. Claus
------------------ CoCreate Modeling FAQ: http://www.clausbrod.de/CoCreateModeling/ 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: 01. Jul. 2008 12:08 <-- editieren / zitieren --> Unities abgeben: Nur für StephanWörz
Zitat: Original erstellt von StephanWörz:Was genau macht "==" ?
Oh wie schreckerlich :( das war voll mistverständlich geschrieben von mir. Das eine war Klartext und dann sollte (in Klammer) die potentielle LISP syntax kommen, wobei == so viel wie "will heissen" heissen sollte. -- Tut mir leid. Also mal von hand: (pprint (oli:sd-vec-equal-p (oli:sd-inq-part-color (oli:sd-inq-curr-part)) 1,0,0 :resolution 1e-3)) das tut. gut. Zitat: ... wie umgehe ich den Fehler, der auftaucht wenn am Teil Flächen sind die KEINE Flächenfarbe haben? NIL cannot be coerced to a VECTOR3 Signalled by SD-VEC-EQUAL-P
ah.... vertrackt.. das wirkliche leben schlägt zu --> 'dein alter equal' kommt natuerich auch mit 'nem NIL klar, vec-equal-p leider nicht. (Aus meiner Sicht sollten alle equal-p functionen auch mit argumenten klarkommen die nicht dem typ entsprechen aber insbesondere mit NIL; da würde die Codierung wirklich erleichtern) Code: ;; untested (checkOldThreadFaces (face) (let (f-color (sd-inq-face-color face)) (if (and f-color (sd-vec-equal-p f-color thread-color-old-rgb :resolution 1e-3) ) :Ok :filter ));; if + let );;checkOldThreadFaces
Ich hoffe ich hab's nicht nochmal verbockt. Ob man ein let spendiert oder die Farbe 2 mal inquiered... nun ja.. Wolf<verwirrstifter>gang ------------------------------------------------ (defun apfel-vergleich (apf1 apf2) ...) (pprint (apfel-vergleich apfel-rot apfel-rot)) ==>> T (pprint (apfel-vergleich apfel-rot apfel-gruen)) ==>> NIL (pprint (apfel-vergleich apfel-rot birne-gruen)) ==>> NIL ich würde beim 3. Aufruf kein Fallobst erwarten
------------------ ● Seamonkey Firefox Thunderbird Seamonkey auf deutsch ● OSD Hilfeseite (de) / help page (en) ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |