#|
|# (in-package :EXAMPLES) (use-package :OLI) ;; you can use the file: wpset.dat as example data file (sd-defdialog 'auto_loft :dialog-title "Auto Loft" :variables '(;;- - - - - local variables - - - - - (+RETURN-STATE+ :initial-value (sd-set-model-checkpoint)) (+MATCH-VERTICES+ :initial-value nil) (+WPSET-PATH+ :initial-value nil) ;;- - - - - visible variables - - - - - (LOFT_PART :value-type :part-incl-new :title "Part") (FILENAME :value-type :filename :direction :input :after-input (create-loft-wpset))) :local-functions '((create-loft-wpset () (let ((file-stream (open (first filename) :direction :input)) (wpset-name (sd-gen-obj-basename :wpset :prefix "auto_loft")) origin normal u-dir pnt_1 pnt_2 (vertex nil)) (setq +wpset-path+ (sd-pathlist-to-pathname (list "/" wpset-name))) ;; create loft wpset: (sd-call-cmds (create_wpset :name wpset-name)) ;; read data file: (loop ;; 1. wp origin (setq origin (read file-stream nil 'eof)) (when (eq origin 'eof) (return)) ;; 2. wp normal (setq normal (read file-stream nil 'eof)) (when (eq normal 'eof) (return)) ;; 3. wp u direction (setq u-dir (read file-stream nil 'eof)) (when (eq u-dir 'eof) (return)) ;; 4. first rectangle point (taken as match vertex) (setq pnt_1 (read file-stream nil 'eof)) (when (eq pnt_1 'eof) (return)) ;; 5. second rectangle point (setq pnt_2 (read file-stream nil 'eof)) (when (eq pnt_2 'eof) (return)) ;; create workplane: (sd-call-cmds (create_workplane :new :owner +wpset-path+ :pt_dir :origin origin :normal normal :u_dir u-dir)) ;; create rectangle: (sd-call-cmds (rectangle pnt_1 pnt_2)) ;; remember match vertex on list: (setq vertex (first (sd-call-cmds (get_selection :focus_type *sd-match-vertex-2d-seltype* :select pnt_1)))) (when (sel_item-p vertex) (push vertex +match-vertices+)) ) (close file-stream) (when +match-vertices+ (sd-call-cmds (apply #'create_match_line (nreverse +match-vertices+)))) ) ) ) :ok-action '(sd-call-cmds (add_loft :part loft_part :tool +wpset-path+)) :cancel-action '(sd-return-to-model-checkpoint +return-state+) :exception '(sd-return-to-model-checkpoint +return-state+)) ;;