;;--------------------------------------------------------------------------* ;; Dateiname: AM_Teilefarbe.lsp ;; Version : 5.3 ;; Datum : 03.05.2018 ;; Author : BFE ;;--------------------------------------------------------------------------* ;; Vereinfachtes Umfärben von Teilen und Baugruppen in Anno ;;--------------------------------------------------------------------------* ;; ü => Ï ä => Ì ö => Î Ä Ø Ö => Ú Ü => Û ß => Þ ° => ³ ;;--------------------------------------------------------------------------* (in-package :BFE-TOOLS) (use-package '( :oli)) ;;****************************** (setf *BFE-DEBUG* nil) ;;****************************** (sd-defdialog 'Teilefarbe ;;****************************** :dialog-title "Teile umfaerben" :trace nil :after-initialization '(progn (when (sd-inq-vp-exists-p "Teileauswahl") (sd-call-cmds (delete_vp "Teileauswahl")) );;when ;; Überprüfung ob Zeichnung ROT ist - Erklärung der Parameter siehe Kommentar ganz unten (if (sd-am-view-struct-view-set (sd-am-inq-view (first (first (sd-am-inq-all-3d-owners))))) (progn (ansichtssatz-aktiv-setzen) (pick) ) (progn (display "Zeichnung ist ROT - fehlendes 3D-Modell laden") (cancel) ) ) );;progn :variables '( (3D :value-type :boolean :toggle-type :wide-toggle :title (sd-multi-lang-string "3D-view" :german "im 3D-Fenster waehlen") :initial-value nil :after-input (if (equal 3D t) (progn (my-create-3D-viewport) ) (my-delete-3D-viewport) );;end if ) (teil_bgr ;:selection *sd-part-seltype* :value-type :part :modifies NIL :face-part-allowed t :wire-part-allowed t :multiple-items t :show-select-menu t :additional-token-string ":recursive :in_assembly" :prompt-text "Teile angeben" :title "Teil" :initial-value nil :after-input (progn (sd-restore-window-placement :all) ) ) (ansicht :selection *sd-anno-view-seltype* :title "Ansicht" :prompt-text "Ansichten angeben, in welcher die Teile/Baugruppen umgefaerbt werden soll" :multiple-items t :initial-optional nil :check-function #'(lambda (ansicht) (let () (if (sd-am-view-struct-view-3d (sd-am-inq-view ansicht)) :ok (values :error "Diese Ansicht hat keine 3D-Repraesentation!") );;if );;let );;lambda :after-input (when (sd-inq-obj-contents-read-only-p (second (car (sd-am-inq-all-3d-owners)))) (display "Der Ansichtsbesitzer ist schreibgeschÏtzt! Für Ønderungen zunÌchst den Ansichtsbesitzer reservieren") ) ) (auto-akt :value-type :boolean :toggle-type :wide-toggle :title (sd-multi-lang-string "Auto-update" :german "automatische Aktualisierung") :initial-value t ) (farbe :value-type :RGB-color :title "Farbe" :initial-value 16711680 ) (linart :range ((:SOLID :label "Solid") (:DASHED :label "Strichliert") (:LONG_DASHED :label "Lang Strichl.") (:DOT_CENTER :label "Strichpunkt") (:DASH_CENTER :label "Lang Strichp.") (:PHANTOM :label "___ _ _ __") (:CENTER_DASH_DASH :label "__..__") (:DOTTED :label "Punktiert")) :title "Linienart" :initial-value :LONG_DASHED ) (mit-unsichtbaren :value-type :boolean :toggle-type :wide-toggle :title "+Unsichtbare darstellen und einfÌrben" :initial-value nil ) (mit-tangenten :value-type :boolean :toggle-type :wide-toggle :title "+Tangenten darstellen und einfÌrben" :initial-value nil ) (next :push-action (next-action) ) ("Ansicht invertieren") (inv :value-type :boolean :toggle-type :wide-toggle :title (sd-multi-lang-string "Invert" :german "Ansicht invertieren (siehe Hilfe)") :initial-value nil :after-input (if (equal inv t) (progn (sd-set-variable-status 'linart :value :solid) (sd-set-variable-status 'farbe :value 16777215) ) (progn (sd-set-variable-status 'linart :value :long_dashed) (sd-set-variable-status 'farbe :value 16711680) ) ) ) ) :local-functions '( (ansicht-action () (progn (dolist (ansicht-einzeln ansicht) (progn (setf ansicht-path (sd-inq-obj-pathname (sd-am-view-struct-view-3d (sd-am-inq-view ansicht-einzeln))) );; setf );; progn (progn ;; Aktion für invertierten Modus (when inv t (sd-call-cmds (am_view_prop :the_view ansicht-path :NORMAL_LINE_TYPE :long_dashed :NORMAL_COLOR 16711680 :done ) ) ) ;; Aktion für Linien umfärben (sd-call-cmds (part_layout_geo_styles :for_parts teil_bgr :in_view ansicht-path :N_LTYPE linart :N_COLOR farbe :done )) (if mit-tangenten (sd-call-cmds (part_layout_geo_styles :for_parts teil_bgr :in_view ansicht-path :T_LTYPE linart ;:INVISIBLE :T_COLOR farbe ; :SUPRESS :done )) (sd-call-cmds (part_layout_geo_styles :for_parts teil_bgr :in_view ansicht-path :T_LTYPE :INVISIBLE :T_COLOR :SUPRESS :done )) ) (if mit-unsichtbaren (sd-call-cmds (part_layout_geo_styles :for_parts teil_bgr :in_view ansicht-path :done :H_LTYPE linart ; :INVISIBLE :H_COLOR farbe ; :INVISIBLE :done )) (sd-call-cmds (part_layout_geo_styles :for_parts teil_bgr :in_view ansicht-path :done :H_LTYPE :INVISIBLE :H_COLOR :SUPRESS :done )) ) ;; Aktiviert automatische Ansichtsaktualisierung (when auto-akt t (sd-call-cmds (am_view_update :do_forced_update :on :update_selected_views ansicht-path );;am_view_update );;sd-call-cmds );;when );;progn );;dolist );;progn ) ;;--------------------------------------------------------------------------* (next-action () (ansicht-action)) ;;--------------------------------------------------------------------------* (pick () (let () (progn (sd-show-graphical-browser "parcel-gbrowser") (sd-call-cmds (search_by_pick "parcel-gbrowser" "SEARCH-BY-PICK" (sd-inq-obj-pathname (sd-inq-parent-obj (sd-am-inq-curr-view-set))) )) );;progn );;let );;pick ;;--------------------------------------------------------------------------* (my-create-3D-viewport () (let (teil) (if (equal (sd-am-inq-curr-view-set) nil) (progn (display "Diese Zeichnung hat keinen aktiven Ansichtssatz!") (display "Bitte zuerst das Modell mit dem zugehoerigen Zeichnungssatz laden bzw. aktiv setzen.") (cancel) ) ;;progn ;;else (progn (setf teil (sd-inq-parent-obj (sd-am-inq-curr-view-set))) (sd-call-cmds (sd-store-window-placement :all)) (sd-call-cmds (create_vp :name "Teileauswahl" )) (sd-call-cmds (add_to_vp_drawlist "Teileauswahl" teil)) ) ;;progn ) ;;endif ) ;; let ) ;;--------------------------------------------------------------------------* (my-delete-3D-viewport () (when (sd-inq-vp-exists-p "Teileauswahl") (sd-call-cmds (delete_vp "Teileauswahl")) (sd-call-cmds (sd-restore-window-placement :all)) ) ;; when ) ;;--------------------------------------------------------------------------* ) :ok-action '(when teil_bgr (ansicht-action)) :help-action '(sd-sys-exec "start https://t1.sml.at/dave/402881eb55cb004a015fbe6d56b37b6e/Teilefarbe.pdf") :cancel-action '(progn (my-delete-3D-viewport) ) ) (defun ansichtssatz-aktiv-setzen () (let (status) (when *BFE-DEBUG* (display " ==> Beginn der Funktion ansichtssatz-aktiv-setzen <==")) ;; Liste aller 3D-Objekte aller Ansichten der aktuellen Zeichnung (setf liste (sd-am-inq-all-3d-owners)) ;; element0 = Liste bestehend aus 2 Elementen (ANSICHT + 1. zufälliges 3D-Objekt) (setf element0 (first liste)) ;; Wenn die gefundene Ansicht zu einem Ansichtssatz gehört (sprich wenn die Zeichnung nicht ROT ist) (if (not (equal (sd-am-view-struct-view-set (sd-am-inq-view (first element0))) nil)) (progn ;; element1 = das 3D-Objekt (setf element1 (second (first liste))) (setf element1-name (sd-inq-obj-pathname element1)) (when *BFE-DEBUG* (display (format nil "Pfad zum element1 => ~A" element1-name))) ;; viewset-list = Liste aller Ansichtssätze im Speicher (setf viewset-list (sd-am-inq-all-view-sets)) ;; Schleife: Untersuche jeden Ansichtssatz (dolist (viewset-list-einzeln viewset-list) (setf temp (sd-inq-obj-pathname (sd-inq-parent-obj viewset-list-einzeln))) (if (equal temp element1-name) (progn ;(setf status 1) wird nicht benötigt (setf viewset-curr viewset-list-einzeln) (sd-call-cmds (am_active_vset :VSET viewset-curr)) ;; dolist beenden => Performance (return) );; progn );; end IF );; end Dolist );;progn ;; ELSE (progn (display "Das assoziative 3D-Modell ist nicht geladen bzw. ist der korrekte Ansichtssatz nicht vorhanden!") );;progn );; END IF (when *BFE-DEBUG* (display " ==> Ende der Funktion ansichtssatz-aktiv-setzen <==")) );; let ) ;; ansichtsatz-aktiv-setzen