;********************************************************************************************* ; Dateiname : SD_Multipaste.lsp ; Autor : Stephan Wörz ; Erstellt : 23.01.2008 ; geändert : ;********************************************************************************************* ; Beschreibung : - ; ; ; ; ; ; ; ; ; Optionen : - ; - ; - ;********************************************************************************************* ; ---------------------------------------------------------------------------------------- ; ä Ì Ä Ø ö Î Ö Ú ü Ï Ü Û ß Þ ° ³ ; ---------------------------------------------------------------------------------------- ; Änderungen ; (in-package :Teo) (use-package :OLI) (sd-defdialog 'SD_Multipaste :toolbox-button t :dialog-title "Multipaste" :variables '( ;;local (back-states :initial-value nil) (teil :initial-value nil) (RohlingBasename :initial-value nil) (RohlingPathname :initial-value nil) (ContainerName :initial-value nil) ;;dialog (Rohling :selection (*sd-part-seltype*) :face-part-allowed t :prompt-text "Rohling auswÌhlen" :title "Rohling" :initial-value nil :initial-enable t :after-input (progn (sd-set-variable-status 'Formelement :enable t) (setq RohlingBasename (sd-inq-obj-basename Rohling)) (setq RohlingPathname (sd-inq-obj-pathname Rohling)) ;; Name fÏr den Behälter setzen (setq ContainerName (format nil "Bh_~A" RohlingBasename)) (MakeContainer) );end progn );Ansicht (Formelement :value-type :point-3d-pick :prompt-text "Formelement wÌhlen" :title "Formelement" :initial-value nil :initial-enable nil :after-input (progn (sd-set-variable-status 'Startpunkt :enable t) (MakeFeature) (setf teil (sd-pathname-to-obj (format nil "~A/~A/FE" RohlingPathname ContainerName )) ) );end progn );Formelement (Startpunkt :value-type :point-3d :title "Startpunkt" :initial-value nil :initial-enable nil :prompt-text "Startpunkt fuer VervielfÌltigung angeben" :next-variable (if (not teil) 'teil 'Zielpunkt) :after-input (progn (sd-set-variable-status 'Zielpunkt :enable t) );;progn );;Startpunkt (Zielpunkt :value-type :point-3d :multiple-items t :show-select-menu t :prompt-text "Zielpunkt angeben" :title "Zielpunkt" :initial-value nil :initial-enable nil :next-variable (if (not teil) 'teil (if (not Startpunkt) 'Startpunkt 'Zielpunkt)) :after-input (progn (NextAction) );;progn );;Zielpunkt ("") (back :title "ZurÏck" :toggle-type :wide-toggle :push-action (progn (BackAction) );;progn );;back ("") (DoIt :title "AusfÏhren" :toggle-type :wide-toggle :push-action (progn (collectFE) (Multipaste) (CleanUp) );;progn );;DoIt ("INFO") (Info :title "Kurzanleitung" :toggle-type :wide-toggle :push-action (sd-display-message "Das Tool bietet folgende Funktion: - In einem Teil (Rohling) kann EIN Formelement gewÌhlt werden. Dieses Formelement kann dann nach Auswahl eines Startpunkts und beliebig vieler Endpunkte auf dem Rohling positioniert werden. - Durch klicken auf [AusfÏhren] werden die Formelmente dann in den Rohling kopiert! - Alle Formelemente werden dann gelÎscht und der Dialog steht fÏr die nÌchste Aufgabe zur VerfÏgung." :title "Multpaste - Kurzanleitung" :push "Alles Klar!" );;sd-display-message );;Info ) ;;variables :local-functions '( ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- ;zum einfügen aller Formelemente in Liste 'Teile' (Multipaste () (dolist (item AllParts) (progn (sd-call-cmds (paste_dia :tool :to-part RohlingPathname :TOOL (sd-inq-obj-pathname item) :KEEP_TOOL :No) );;sd-call-cmds );;progn );;dolist );end Multpaste ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- ;zum erstellen des Behälters unter Rohling (MakeContainer () (progn (sd-call-cmds (create_container :name ContainerName :owner RohlingPathname) );;sd-call-cmds );;progn );end MakeContainer ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- ;zum erstellen des Formelements (MakeFeature () (progn (sd-call-cmds (copy_faces :faces :to_part (format nil "~A/~A/FE" RohlingPathname ContainerName) :faces :feats Formelement) );;sd-call-cmds ;; Teil für "duplicate" setzen --> Formelement (setf Teil (sd-pathname-to-obj (format nil "~A/~A/FE" RohlingPathname ContainerName ))) ;; Besitzer für "duplicate" setzen (setf Besitzer (sd-pathname-to-obj (format nil "~A/~A" RohlingPathname ContainerName ))) );;progn );end MakeFeature ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- (NextAction () (if (and teil Besitzer Startpunkt) (progn ;; remember current model state: (push (sd-set-model-checkpoint) back-states) (sd-call-cmds (create_multiple_pa :share :source (sd-inq-obj-pathname teil) :owner (sd-inq-obj-pathname Besitzer) :keep_attr :on :translate :two_ptv Startpunkt Zielpunkt :next) );;sd-call-cmds (when back-states (sd-set-variable-status 'back :enable t)) );;progn (progn (sd-display-error "Zielpunkt zuletzt angeben!") (setf Zielpunkt nil) );;progn );;if );;NextAction ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- (BackAction () (let () (when back-states (progn (sd-return-to-model-checkpoint (pop back-states)) (unless back-states (sd-set-variable-status 'back :enable nil)) );;progn );;when );;let );;BackAction ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- ; Alle Teile rekursiv in Behälter auswählen (collectFE () (setf AllParts (sd-call-cmds (get_selection :focus_type *sd-part-seltype* :allow_face_part :select :recursive :in_assembly (format nil"~A/~A" RohlingPathname ContainerName) );;get_selection );;sd-call-cmds );;setf AllParts );; collectFE ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- ; zum aufräumen (CleanUp () (progn (sd-call-cmds (delete_3d (format nil"~A/~A" RohlingPathname ContainerName) ) );;sd-call-cmds (setq back-states nil) (setq teil nil) (setq RohlingBasename nil) (setq RohlingPathname nil) (setq ContainerName nil) (setq Rohling nil) (setq Formelement nil) (setq Startpunkt nil) (setq Zielpunkt nil) (sd-set-variable-status 'Formelement :enable nil) (sd-set-variable-status 'Startpunkt :enable nil) (sd-set-variable-status 'Zielpunkt :enable nil) );;progn );;CleanUp ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- ); end local-functions ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- :ok-action '(progn (collectFE) (Multipaste) (CleanUp) );;progn ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- :cleanup-action '(progn );end progn ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- :cancel-action '(progn );;progn ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- :help-action '(sd-display-message "Das Tool bietet folgende Funktion: - In einem Teil (Rohling) kann EIN Formelement gewÌhlt werden. Dieses Formelement kann dann nach Auswahl eines Startpunkts und beliebig vieler Endpunkte auf dem Rohling positioniert werden. - Durch klicken auf [AusfÏhren] werden die Formelmente dann in den Rohling kopiert! - Alle Formelemente werden dann gelÎscht und der Dialog steht fÏr die nÌchste Aufgabe zur VerfÏgung." :title "Multpaste - Kurzanleitung" :push "Alles Klar!" );;sd-display-message ;; ---------------------------------------------------------------------------------------------------------------------------------------------------- ) ;; end defdialog