#|
|# (in-package :EXAMPLES) (use-package :OLI) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'MOVE_5 :dialog-title "Move 5" :variables '((part-name) (feat-name) (translation) (moved) (JJ_FACE :value-type :face :title "Face" :prompt-text "Identify FACE." :check-function is-planar-face :after-input (after-face jj_face)) (NEXT :push-action (move-it))) :local-functions '((is-planar-face (f) (if (sd-plane-p (sd-inq-geo-props f)) :ok :error)) (after-face (f) (when (and part-name feat-name) (sd-call-cmds (remove_feature :full_name :start_name part-name :feature feat-name :end_name))) (multiple-value-setq (part-name feat-name) (jb-sel_item-to-feature f)) (setf translation (sd-vec-scale (sd-plane-normal (sd-inq-geo-props f)) 5))) (move-it () (setf moved (sd-call-cmds (move :nocheck :by_feature :full_name :start_name part-name :feature feat-name :end_name :transformation :translate translation) :success t)))) :start-variable 'jj_face :ok-action '(unless moved (move-it)) :cleanup-action '(sd-call-cmds (remove_feature :full_name :start_name part-name :feature feat-name :end_name) :failure nil)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun jb-sel_item-to-feature (s) (let* ((part-name (sd-inq-obj-pathname s)) (part (sd-pathname-to-obj part-name)) (all-feat (sd-inq-part-named-features part)) (feat-name)) (do* ((i 1 (incf i))) ((not (member (format nil "feat~A" i) all-feat :test #'sd-string=)) (setf feat-name (format nil "feat~A" i)))) (sd-call-cmds (define_feature :selection s :name feat-name)) (values part-name feat-name))) ;;