#|
|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; condition: Online Help for Integration Kit should be installed ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; following examples are from Integration Kit Online Help ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Creo Elements/Direct Modeling ;; LISP examples extracted from dg_manual online help ;; description of Integration Kit Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (in-package :dg-examples) (use-package :oli) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 1 starting at HTML line 332 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'quick_extrude :dialog-title "Q. Extrude" :variables '((QE_PART :value-type :part-incl-new :modifies :contents :title "Part" :prompt-text "Identify part to be modified") (QE_WP :value-type :wp-with-profile :title "Workplane" :prompt-text "Identify workplane to extrude") (DISTANCE :value-type :length :prompt-text "Specify distance to extrude")) :ok-action '(sd-call-cmds (extrude :part qe_part :wp qe_wp :distance distance))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 2 starting at HTML line 445 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'dependent_enable_demo :dialog-title "Valid Part" :variables '((COLOR :value-type :string :after-input (if (string= color "red") (progn (setq valid_part nil) (sd-set-variable-status 'valid_part :enable nil)) (sd-set-variable-status 'valid_part :enable t))) (VALID_PART :value-type :part :modifies NIL :title "Part" :initial-value nil)) :ok-action '(pprint valid_part)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 3 starting at HTML line 516 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'dependent_check_demo2 :dialog-title "Valid Part2" :variables '((COLOR :value-type :string :after-input (case (colored-part-satisfies-name valid_part color) (:error (setq valid_part nil)) (:ok t))) ;Do nothing (VALID_PART :value-type :part :modifies NIL :title "Part" :prompt-text "Identify part to be shown" :check-function #'(lambda (a-part) (colored-part-satisfies-name a-part color)))) :ok-action '(pprint valid_part)) (defun colored-part-satisfies-name (new-part color) ;In: new-part {sel_item} ; color {string} ;Out: {:ok or (value :error a-message)} (let ((name (sd-inq-obj-basename new-part))) (if (and (string= color "red") (char-equal (elt name 0) #\p)) (values :error "Sorry, a red part with name p... is NOT selectable") :ok))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 4 starting at HTML line 593 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'full_extrude :dialog-title "Full Extrude" :variables '((FE_PART :value-type :part-incl-new :title "Part" :prompt-text "Identify part to be extruded" :modifies :contents) (FE_WP :value-type :wp-with-profile :title "Workplane" :prompt-text "Identify workplane to extrude from" :modifies nil :after-input (if (sd-inq-obj-parent-contents-read-only-p fe_wp) (progn (setq keep_wp t) (sd-set-variable-status 'keep_wp :enable nil)) (sd-set-variable-status 'keep_wp :enable t))) ("-") (DISTANCE :value-type :length :prompt-text "Specify distance to extrude") (TO_PART :value-type :part :initial-value nil :title "To Part" :prompt-text "Identify to part" :modifies nil) (DIRECTION :value-type :wp-normal :title "Reverse") ("-") (KEEP_WP :value-type :boolean :title "Keep WP" :initial-value t :initial-enable (if fe_wp (not (sd-inq-obj-parent-contents-read-only-p fe_wp)) t))) :mutual-exclusion '(distance to_part) :ok-action '(sd-call-cmds (extrude :part fe_part :wp fe_wp :distance distance :to_part (if to_part to_part "") (if (sd-vec-equal-p (sd-inq-wp-w-dir fe_wp) direction) "" :reverse) :keep_wp (if keep_wp :yes :no)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 5 starting at HTML line 2448 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'my_shared :variables '((A :value-type :boolean :after-input (sd-set-dialog-title (format nil "Title ~A" (if a "ON" "OFF")))) (NUM :value-type :number))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 6 starting at HTML line 2516 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'accepted1 :variables '((A :value-type :boolean) (NUM :value-type :number :next-variable (when a (sd-accept-dialog)))) :ok-action '(pprint (list a num))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 7 starting at HTML line 2531 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'accepted2 :variables '((A :value-type :boolean) (DO :push-action (when a (sd-accept-dialog)))) :ok-action '(pprint (list a))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 8 starting at HTML line 2582 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'canceled :variables '((NUM :value-type :number :toggle-type :invisible :next-variable (unless (number-is-legal num) (sd-abort-dialog))) (A_PART :value-type :part :modifies NIL)) :ok-action '(create-parts num a_part)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 9 starting at HTML line 4334 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'my_scale :variables '((NUM :value-type :number :initial-value 10 :after-input (setq scaled_num num)) (ENABLE :value-type :boolean :initial-value t :after-input (sd-set-variable-status 'scaled_num :enable enable)) (SCALED_NUM :value-type :scale :minimum 1 :maximum 20 :initial-value 10 :after-input (setq num scaled_num) :initial-enable t)) :ok-action '(pprint (list 'scaled_num scaled_num))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #10 starting at HTML line 4481 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar *scale-index* nil "Currently used dynamic scale index.") (defvar *scale-values* nil "Property list containing values for each index.") (sd-defdialog 'multiple_drags :dialog-title "Multiple Drags" :variables '((A_FACE :value-type :face) (DRAG :value-type :dynamic-scale :toggle-push-function #'my-toggle-push-function :drag-callback (my-track-slider-value "drag callback") :value-change-callback (my-track-slider-value "value change callback"))) :after-initialization-ui '(my-initialize-multiple-drags-scale) :ok-action '(pprint (list 'scale-values *scale-values*))) (defun my-toggle-push-function (index) (format t "~%Index ~A pushed." index) (my-set-drag-bounds index) (setq *scale-index* index)) (defun my-set-drag-bounds (index) (sd-set-dynamic-scale-bounds 'multiple_drags 'drag :minimum (case index (1 -10) (otherwise -100)) :maximum (case index (1 10) (otherwise 100)) :increment (case index (1 1) (otherwise 10)))) (defun my-track-slider-value (text) (let ((value (sd-get-slider-value 'multiple_drags 'drag))) (format t "~%~A ~A with index ~A." text value *scale-index*) (setf (getf *scale-values* *scale-index*) value))) (defun my-initialize-multiple-drags-scale () (sd-disable-control (sd-get-dynamic-slider-control 'multiple_drags 'drag 9)) (sd-set-togglebutton (sd-get-dynamic-slider-control 'multiple_drags 'drag 1) :callAction t) (my-set-drag-bounds 1) (setf *scale-values* nil)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #11 starting at HTML line 4822 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'calling_measure_dialog :variables '((PLANAR_FACE :value-type :face) (STRAIGHT_EDGE :value-type :edge) ("-") (CURVED_FACE :value-type :face :after-input (setq face_point (sd-get-pnt-on-face curved_face :dest-space :global))) (FACE_POINT :value-type :point-3d) ("-") (CURVED_EDGE :value-type :edge :after-input (setq edge_point (getf (sd-inq-edge-pnt curved_edge :s 2 :coordinates t :dest-space :global) :coordinates))) (EDGE_POINT :value-type :point-3d) ) :ok-action '(pprint (list :positive (sd-call-cmds (my_measure_dialog :my_direction :face_normal planar_face :my_vector :edge_tangent straight_edge :accept 34 :my_vector_list :edge_tangent curved_edge edge_point :accept 45)) :negative (sd-call-cmds (my_measure_dialog :my_direction :neg_face_normal planar_face :my_vector :edge_tangent straight_edge :reverse 34 :my_vector_list :neg_face_normal curved_face face_point 45)) ) ;list ) ;pprint ) ;sd-defdialog (sd-defdialog 'my_measure_dialog :variables '((MY_DIRECTION :value-type :measure-direction) (MY_VECTOR :value-type :measure-vector) (MY_VECTOR_LIST :value-type :measure-vector-list) ) :ok-action '(list :dir my_direction :vec my_vector :vec-list my_vector_list)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #12 starting at HTML line 5080 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'filename_demo :dialog-title "Filename" :variables '((PARTS :value-type :part :modifies NIL :multiple-items t) (FILE :value-type :filename :title "Save File" :initialdirectory "/tmp" :fileType :lisp)) :ok-action (progn ;... )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #13 starting at HTML line 5186 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'display_only :dialog-title "Stretch Edge" :variables '((AN_EDGE :value-type :edge :after-input (setq old_length (sd-call-cmds (measure_dist :edge_length an_edge)))) (OLD_LENGTH :value-type :display-only :display-units :length) (NEW_LENGTH :value-type :length))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #14 starting at HTML line 5245 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'black_box :dialog-title "Black Box" :variables '((PICTURE :value-type :image :image-file "E:/Programs/CoCreate/OSD_Modeling_16.0.0.594/personality/pixmaps/moldbaseadvisor/prewbmp/bk.xpm") (N1 :value-type :number) (N2 :value-type :number)) :ok-action '(create-black-box n1 n2)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #15 starting at HTML line 5495 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'range_demo :dialog-title "Ranges" :variables '((KEYWORDS1 :range (:val1 :val2 :val3)) (KEYWORDS2 :range ((:val1 :label "Val 1") (:val2 :label "Val 2") (:val3 :label "Val 3"))) ("-") (NUMBERS1 :range (1 2 3)) (NUMBERS2 :range ((1 :label "one") (2 :label "two") (3 :label "three"))) ("-") (SYMBOLS1 :range (val1 val2 val3)) (SYMBOLS2 :range ((val1 :label "Val 1") (val2 :label "Val 2") (val3 :label "Val 3"))) ("-") (STRINGS1 :range ("Val 1" "Val 2" "3")) (STRINGS2 :range (("Val 1" :label "1.st Val") ("Val 2" :label "2.nd Val") ("3" :label "3.rd Val"))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #16 starting at HTML line 5757 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'attach_country :variables '((REGION :value-type :string :proposals ("North America" "Europe" "Asia")) (A_PART :value-type :part :modifies NIL)) :ok-action '(pprint (list region a_part))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #17 starting at HTML line 5832 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'Token_String :variables '((HEIGHT :value-type :measure-vector :additional-token-string ":dir_len :edge_tangent") (OBJECT :value-type :face :multiple-items t :show-select-menu t :additional-token-string ":start")) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #18 starting at HTML line 6068 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'check_func :variables '((HEIGHT :value-type :length :check-function #'(lambda (new-value) (if (and (numberp new-value) (<= 0 new-value 10)) :ok (values :error "The input value is beyond the range [0 10]")))) )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #19 starting at HTML line 6283 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun number-in-bounds (candidate) (cond ((<= candidate 10) :ok) ;==> accept candidate ((<= 10 candidate 20) :bad) ;==> manual decision ((> 20 candidate) ;==> reject candidate (values :error "The value is too big!")))) (sd-defdialog 'confirmed_number :dialog-title "A number" :variables '((A_NUMBER :value-type :number :check-function number-in-bounds :confirmation (:bad :prompt "The value is rather large, do you want to accept it?" :severity :medium )))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #20 starting at HTML line 6443 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'next_demo :dialog-title "Trim" :variables '((A_PART :value-type :part :modifies NIL :title "Part") (HEIGHT :value-type :length) (WIDTH :value-type :length) (NEXT :push-action (trim-part a_part height width))) :ok-action '(trim-part a_part height width)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #21 starting at HTML line 6480 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'next2_demo :dialog-title "Actions" :variables '((ENTITY :value-type :face) (PREVIEW :toggle-type :grouped-toggle :initial-enable t :push-action (progn (pprint "Preview Action") (sd-set-variable-status 'preview :enable nil) (sd-set-variable-status 'entity :enable nil) (sd-set-variable-status 'next :enable nil) (sd-set-variable-status 'un_preview :enable t))) (UN_PREVIEW :toggle-type :grouped-toggle :initial-enable nil :push-action (progn (pprint "Unpreview Action") (sd-set-variable-status 'un_preview :enable nil) (sd-set-variable-status 'preview :enable t) (sd-set-variable-status 'entity :enable t) (sd-set-variable-status 'next :enable t))) (NEXT :push-action (pprint "Do it now")))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #22 starting at HTML line 6541 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'confirm_in_after_input :variables '((ASK :value-type :boolean :initial-value t) (NUM :value-type :number :after-input (progn (pprint "after-input-1") (when (and ask (eq (sd-display-question "Execute after-input-2?") :yes)) (pprint "after-input-2"))))) :ok-action '(pprint (list :ask ask :num num))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #23 starting at HTML line 6588 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'confirm_on_after_input :variables '((ASK :value-type :boolean :initial-value t) (NUM :value-type :number :after-input (pprint "after-input-1") :next-variable (when ask :push)) (PUSH :push-action :bad :confirmation (:bad :dialog :question :prompt "Execute after-input-2?" :ok-cleanup (pprint "after-input-2")) :toggle-type :invisible)) :ok-action '(pprint (list :ask ask :num num))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #24 starting at HTML line 6620 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'confirm_in_exit :variables '((ASK :value-type :boolean :initial-value t)) :ok-action '(progn (pprint "ok-action-1") (when (and ask (eq (sd-display-question "Execute ok-action-2?") :yes)) (pprint "ok-action-2")))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #25 starting at HTML line 6644 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'confirm_on_exit :variables '((ok-action-1-executed :initial-value nil) (ASK :value-type :boolean :initial-value t) (PUSH :push-action :bad :confirmation (:bad :dialog :question :prompt "Execute ok-action-2?" :ok-cleanup (progn (pprint "ok-action-2") (setq ask nil) (sd-accept-dialog)) :cancel-cleanup (progn (setq ask nil) (sd-accept-dialog))) :toggle-type :invisible)) :ok-action '(progn (unless ok-action-1-executed (pprint "ok-action-1") (setq ok-action-1-executed t)) (when ask (sd-return-from-ok-action))) :ok-action-next-variable '(when ask 'push)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #26 starting at HTML line 6700 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'confirm_before_exit :variables '((ok-action-1-executed :initial-value nil) (ASK :value-type :boolean :initial-value t) (DO_IT :push-action (ok-action-1) :next-variable (when ask 'push) :toggle-type :invisible) (PUSH :push-action :bad :confirmation (:bad :dialog :question :prompt "Execute ok-action-2?" :ok-cleanup (progn (pprint "ok-action-2") (setq ask nil) (sd-accept-dialog)) :cancel-cleanup (progn (setq ask nil) (sd-accept-dialog))) :toggle-type :invisible)) :local-functions '((ok-action-1 () (unless ok-action-1-executed (pprint "ok-action-1") (setq ok-action-1-executed t)))) :ok-action '(progn (ok-action-1) (when ask (sd-return-from-ok-action))) :ok-action-next-variable '(when ask 'push)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #27 starting at HTML line 6759 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'position_part_demo :dialog-title "Pos. Part" :variables '((A_PART :value-type :part :modifies NIL :title "Part") (POSITIONING :position-part a_part) (NEXT :push-action (install-part a_part)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #28 starting at HTML line 6771 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'position_wp_demo :dialog-title "Pos. WP" :variables '((WP :value-type :wp :title "Workplane") (POSITIONING :position-wp wp) (NEXT :push-action (install-wp wp)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #29 starting at HTML line 7034 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'toggle_type_demo :dialog-title "Toggles" :variables '(("Boolean Variables") (BOOL :value-type :boolean) (BOOL-LEFT :value-type :boolean :toggle-type :left-toggle) (BOOL-RIG. :value-type :boolean :toggle-type :right-toggle) (BOOL-WIDE :value-type :boolean :toggle-type :wide-toggle) (BOOL-G1 :value-type :grouped-boolean) (BOOL-G2 :value-type :grouped-boolean) ("Push Actions") (PUSH :push-action (pprint "push")) (PUSH-LEFT :push-action (pprint "push-l") :toggle-type :left-toggle) (PUSH-RIGHT :push-action (pprint "push-l") :toggle-type :right-toggle) (PUSH-WIDE :push-action (pprint "push-l") :toggle-type :wide-toggle) (PUSH-G1 :push-action (pprint "push-g1") :toggle-type :grouped-toggle) (PUSH-G2 :push-action (pprint "push-g1") :toggle-type :grouped-toggle) ("Combined Bool/Push") (BOOL-C1 :value-type :grouped-boolean) (PUSH-C2 :push-action (pprint "push-c2") :toggle-type :grouped-toggle) ("Indicator") (NUM :value-type :number) (NUM-IND :value-type :number :toggle-type :indicator-toggle-data))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #30 starting at HTML line 7117 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'size_demo :dialog-title "Size" :variables '(("Data Fields") (NUM1/2 :value-type :number) ;default :size = :half (NUM1/3 :value-type :number :size :third) ("Booleans") (BOOL1/2 :value-type :grouped-boolean) ;default :size = :half (BOOL2/2 :value-type :grouped-boolean) ;default :size = :half ("-") (B1/3 :value-type :grouped-boolean :size :third) (B2/3 :value-type :grouped-boolean :size :third) (B3/3 :value-type :grouped-boolean :size :third))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #31 starting at HTML line 7365 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'expand_push :dialog-title "Expand Push" :variables '((OBJECT :value-type :part :modifies NIL) (PARAMETERS :expand-shrink (a b)) (A :value-type :number :initial-value 5) (B :value-type :number :initial-value 6) (FILE :value-type :string))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #32 starting at HTML line 7451 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'expand_bool :dialog-title "Expand Bool" :variables '((OBJECT :value-type :part :modifies NIL) (PARAMETERS :expand-shrink (a b) :expand-shrink-toggle-type :boolean) (A :value-type :number :initial-value 5) (B :value-type :number :initial-value 6) (FILE :value-type :string))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #33 starting at HTML line 7475 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'expand_pair :dialog-title "Expand Pair" :variables '((OBJECT :value-type :part :modifies NIL) (PARAMETERS :expand-shrink (a b) :expand-shrink-toggle-type :toggle-pair :expand-token :with_ab :shrink-token :without_ab) (A :value-type :number :initial-value 5) (B :value-type :number :initial-value 6) (FILE :value-type :string))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #34 starting at HTML line 7514 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'expand_range :dialog-title "Expand Range" :variables '((OBJECT :value-type :part :modifies NIL) (PARAMETERS :expand-shrink ((a) (b c) (d e f)) :expand-shrink-range ((:small :label "Small") (:medium :label "Medium") (:large :label "Large"))) (A :value-type :number :initial-value 5) (B :value-type :number :initial-value 6) (C :value-type :number :initial-value 7) (D :value-type :number :initial-value 8) (E :value-type :number :initial-value 9) (F :value-type :number :initial-value 10) (FILE :value-type :string))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #35 starting at HTML line 7710 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'external_expand_push :dialog-title "External Push" :variables '((OBJECT :value-type :part :modifies NIL) (A :value-type :number :initial-value 5) (B :value-type :number :initial-value 6) (MORE :external-expand-shrink (c d) :title "More Parameters" :external-dialog-title "Detail Parameters") (C :value-type :number :initial-value 7) (D :value-type :number :initial-value 8) (A_FACE :value-type :face))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #36 starting at HTML line 7742 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'external_expand_bool :dialog-title "External Bool" :variables '((OBJECT :value-type :part :modifies NIL) (A :value-type :number :initial-value 5) (B :value-type :number :initial-value 6) (MORE :external-expand-shrink (c d) :external-expand-shrink-toggle-type :boolean :title "More Parameters" :external-dialog-title "Detail Parameters") (C :value-type :number :initial-value 7) (D :value-type :number :initial-value 8) (A_FACE :value-type :face))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #37 starting at HTML line 7842 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'my_area :variables '((NUM :value-type :number :after-input (setq str (format nil "x_~A" num))) (FO :embedded-area-definition (create-my-uict-area) :title "String" :frame t :height 73) (STR :value-type :string :initial-value "abc" :uict-tb "MY_AREA-STRING-TB" :uict-tx "MY_AREA-STRING-TX") (A_PART :value-type :part :modifies :contents :title "Part")) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #38 starting at HTML line 7866 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun create-my-uict-area () (let ((area-name (sd-get-embedded-area-name 'my_area :fo))) (sd-create-pushbutton-control "MY_AREA-STRING-TB" area-name :x 0 :y 0 :width (- (sd-get-default-dialog-client-area-width) 20) :height 22 :title "String") (sd-create-text-control "MY_AREA-STRING-TX" area-name :x 0 :y 30 :width (- (sd-get-default-dialog-client-area-width) 20) :height 20)) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #39 starting at HTML line 8029 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'do_with_item :variables '((TYPE :range (:edge :face)) (PUSH :push-action (progn) :next-variable (case type (:edge 'do_edge) (:face 'do_face))) (DO_EDGE :value-type :edge :toggle-type :invisible :after-input (item-function do_edge) :next-variable 'do_edge) (DO_FACE :value-type :face :toggle-type :invisible :after-input (item-function do_face) :next-variable 'do_face) ; ..... ) :local-functions '((item-function (item) (pprint (list :item item)) ; ..... )) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #40 starting at HTML line 8091 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'pick_several :variables '((OBJECTS) (TYPE :range (:by-face :by-edge) :next-variable (case type (:by-face 'p_face) (:by-edge 'p_edge))) (P_FACE :value-type :face :toggle-type :invisible :next-variable 'p_face :after-input (push p_face objects)) (P_EDGE :value-type :edge :toggle-type :invisible :next-variable 'p_edge :after-input (push p_edge objects))) :ok-action '(progn (if (< (length objects) 4) (progn (sd-display-error "Pick more than 3 objects.") (sd-return-from-ok-action)) (pprint objects))) :ok-action-next-variable '(case type (:by-face 'p_face) (:by-edge 'p_edge))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #41 starting at HTML line 8205 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'interpolate_demo :dialog-title "Curve" :variables '((POINT_LIST) ;internal non displayed variable (POINT_FEEDBACK_LIST) ;internal non displayed variable (NEW_POINT ;internal input variable :value-type :point-3d :toggle-type :invisible :prompt-text "Pick a point or press Back" :after-input (push-point new_point)) (DEGREE :range ((:linear :label "linear") (:quadratic :label "quadratic") (:cubic :label "cubic"))) (BACK :push-action (pop-point))) :local-functions '((PUSH-POINT (a-new-point) (push a-new-point point_list) (push (setup-point-feedback a-new-point) point_feedback_list) (if (= (length point_feedback_list) 1) (sd-set-variable-status 'back :enable t))) (POP-POINT () (cleanup-point-feedback (pop point_feedback_list)) (pop point_list) (unless point_list (sd-set-variable-status 'back :enable nil)))) :prompt-variable 'new_point :ok-action '(progn (interpolate-between-points degree point_list) (loop ;repeat until no items left (unless (pop-point) (return))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #42 starting at HTML line 8242 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun setup-point-feedback (point) (print (list :point point)) (progn "...")) ;returns feedback object (defun cleanup-point-feedback (point) (print (list :point point)) (progn "...")) ;return is not used ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #43 starting at HTML line 8606 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'my_help :variables '((bla :value-type :number)) :help-action '(sd-display-url "http://www.ptc.com")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #44 starting at HTML line 8617 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'my_dyn_help :variables '((A_PART :value-type :part :modifies NIL) (HELP_ON :range (:goodies :lego))) :help-action '(ecase help_on (:goodies (sd-display-url (format nil "~A/help/osdm/Common/documentation/goodies/Readme.html" (sd-inq-install-dir)))) (:lego (sd-display-url (format nil "~A/help/osdm/Common/documentation/integration_kit/home.html" (sd-inq-install-dir)))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #45 starting at HTML line 9144 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'a_non_embedded_subaction :dialog-type :subaction :embedded-ui nil ;; default = t :variables '((STRING_1 :value-type :string :initial-value (first default)) (A_PART :value-type :part) (STRING_2 :value-type :string :initial-value (third default)) (ACCEPT :push-action (sd-accept-dialog) :toggle-type :grouped-toggle) (ABORT :push-action (sd-abort-dialog) :toggle-type :grouped-toggle)) :ok-action '(list string_1 a_part string_2)) (sd-defdialog 'calling_dialog_nemb :dialog-title "Calling Dialog" :variables '((RESULT :value-type :list :title "SA Result" :subaction-name a_non_embedded_subaction :default result :after-input (setq parameter1 (first result))) (PARAMETER1 :value-type :display-only) (PARAMETER2 :value-type :string)) :ok-action '(pprint (list result parameter1 parameter2))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #46 starting at HTML line 9280 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'calling_push_dialog :dialog-title "Calling Push Dialog" :variables '((DO_IT :push-action (progn) :title "Do it" :subaction-name a_non_embedded_subaction :default (list parameter1 parameter2) :after-input (setq parameter1 (first do_it))) (PARAMETER1 :value-type :display-only) (PARAMETER2 :value-type :string)) :ok-action '(pprint (list do_it parameter1 parameter2))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #47 starting at HTML line 9362 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'an_embedded_subaction :dialog-type :subaction :variables '((STRING_1 :value-type :string :initial-value (extract-first-string default)) (A_PART :value-type :part) (STRING_2 :value-type :string :initial-value (extract-second-string default)) (ACCEPT :push-action (sd-accept-dialog) :toggle-type :grouped-toggle) (ABORT :push-action (sd-abort-dialog) :toggle-type :grouped-toggle)) :ok-action '(subaction-ok-action string_1 string_2)) (sd-defdialog 'a_calling_dialog :dialog-title "A Calling Dialog" :variables '((PARAMETER1 :value-type :string) (RESULT :value-type :string :title "SA Result" :subaction-name an_embedded_subaction :embedded-location parameter2 :default result) (PARAMETER2 :value-type :string)) :ok-action '(show-my-subaction-results result parameter1 parameter2)) (defun extract-first-string (a-str) (when (sd-string-p a-str) (car (sd-string-split a-str " ")))) (defun extract-second-string (a-str) (when (sd-string-p a-str) (cadr (sd-string-split a-str " ")))) (defun subaction-ok-action (str1 str2) (format nil "~A ~A" str1 str2)) (defun show-my-subaction-results (res p1 p2) (display (format nil "~%Result : ~A~%Param1 : ~A~%Param2 : ~A~%" res p1 p2))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #48 starting at HTML line 9415 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'visible_subdialog :dialog-type :subaction :embedded-ui nil ;;since calling dialog has no UI :variables '((A :value-type :number :initial-visible (getf default :a-visible)) (B :value-type :number :initial-visible (getf default :b-visible)) (C :value-type :number :initial-visible (getf default :c-visible)) (D :value-type :number :initial-visible (getf default :d-visible))) :after-initialization '(progn (sd-set-dialog-title (getf default :dialog-title)) (sd-set-variable-status 'c :title (getf default :c-title))) :ok-action '(format nil "~A-~A-~A-~A" a b c d)) (sd-defdialog 'caller_abc :dialog-control :sequential :variables '((DUMMY :value-type :string :subaction-name visible_subdialog :default '(:a-visible t :b-visible t :c-visible t :c-title "abC" :d-visible nil :dialog-title "ABC")))) (sd-defdialog 'caller_bcd :dialog-control :sequential :variables '((DUMMY :value-type :string :subaction-name visible_subdialog :default '(:a-visible nil :b-visible t :c-visible t :c-title "bCd" :d-visible t :dialog-title "BCD")))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #49 starting at HTML line 9801 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'pds_variant :persistent-data-storage-variant-variable 'mode :variables '((MODE :value-type :keyword) (BOOL :value-type :boolean :persistent-data-storage t) (NUM :value-type :number :persistent-data-storage t))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example #50 starting at HTML line 9830 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'pds_sub_variant :persistent-data-storage-variant-variable 'mode :dialog-type :subaction :variables '((MODE :initial-value (getf default :mode)) (S :value-type :string :persistent-data-storage t) (B :value-type :boolean :persistent-data-storage t) (D :value-type :face))) (sd-defdialog 'my_pds_with_sub_on :variables '((BOOL :value-type :boolean :initial-value t :persistent-data-storage t ) (SUB :value-type :list :subaction-name pds_sub_variant :default '(:mode :on)) )) (sd-defdialog 'my_pds_with_sub_off :variables '((BOOL :value-type :boolean :initial-value t :persistent-data-storage t ) (SUB :value-type :list :subaction-name pds_sub_variant :default '(:mode :off)) )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Creo Elements/Direct Modeling ;; LISP examples extracted from dg_3dcopilot online help ;; description of Integration Kit Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (in-package :dg-examples) (use-package :oli) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 1 starting at HTML line 1473 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'co_view :without-show t :prompt-variable 'ref :variables '((POLESTAR) (REF :selection (*sd-face-seltype* *sd-edge-3d-seltype* *sd-vertex-3d-seltype*) :incl-position :3d :after-input (progn (sd-delete-polestar POLESTAR) (setq POLESTAR (sd-create-polestar :pick-token ":polestar_pick" :forward-picking t :components (sd-classic-polestar-components (first ref) (second ref)) ) ) ) ) (POLESTAR_PICK :value-type :point-3d-pick :after-input (set-copilot-view (second ref) (sd-inq-polestar-pick polestar :dir)) ) ) ) (defun set-copilot-view (pos dir) (let ((vp-name (sd-inq-current-vp))) (when pos (set_vp_to_point vp-name pos) ;avoid sd-call-cmds in above interrupt action ;to obtain interpolated camera update. ) (when dir (sd-call-cmds (set_vp_direction vp-name (sd-vec-subtract 0,0,0 dir)))) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 2 starting at HTML line 1538 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'co_extrude :variables '((POLESTAR) (WP :value-type :wp-with-profile :incl-position :3d :after-input (progn (sd-delete-polestar polestar) (setq POLESTAR (sd-create-polestar :components (list (list :type :line :pick-token ":DISTANCE" :origin (second WP) :dir (sd-inq-wp-w-dir (first WP)) :backward-arrow nil :mid-disc t)))) (sd-modify-quickview 'distance distance)) ) (DISTANCE :value-type :length :drag-from-polestar POLESTAR :quickview-type :extrude-profile :quickview-wp WP ) (KEEP_PROFILE :value-type :boolean) ) :ok-action '(sd-call-cmds (extrude :wp (first wp) :auto_direction :yes :keep_wp :yes :keep_profile (if keep_profile :yes :no) :direction :+w :distance distance ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 3 starting at HTML line 1592 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'co_parcels ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; :variables `((POLESTAR) (FEV :selection (*sd-face-seltype* *sd-edge-3d-seltype* *sd-vertex-3d-seltype*) :incl-position :3d :after-input (progn (when POLESTAR (sd-delete-polestar POLESTAR)) (setq POLESTAR (sd-create-polestar :pick-token ":DRAG_VARIABLE" :components (sd-classic-polestar-components (first FEV) (second FEV))))) ) (DRAG_VARIABLE :drag-from-polestar POLESTAR :polestar-passenger t :quickview-type :qv-parcel :quickview-parcels (list (first FEV)) ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; example # 4 starting at HTML line 1644 ;; near ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'co_cable :prompt-variable 'MY_POINT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; :variables `( (POLESTAR :initial-value nil) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (NEIGHBORING-PNTS :initial-value nil) (DISC-DIRS :intiial-value nil) (LINE-DIRS :intiial-value nil) (FEEDBACKS :initial-value nil) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (MY_POINT :selection *sd-vertex-3d-seltype* :multiple-items nil :wire-part-allowed t :incl-position :3d :after-input (make-polestar) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (USE-DISCS :value-type :boolean :after-input (make-polestar) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (USE-GLOBAL-XYZ :value-type :boolean :toggle-type :wide-toggle :after-input (make-polestar) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (BLA :value-type :boolean ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (POLESTAR_PICK :drag-from-polestar POLESTAR :polestar-passenger t :quickview-type :lisp-feedback :feedback-update-function update-feedback :feedback-destroy-function destroy-feedback :feedback-apply-function apply-quickview :end-input-feedback (when (and POLESTAR (not POLESTAR_PICK)) ; dragging cancelled (sd-delete-polestar POLESTAR) (setq POLESTAR nil)) ) ) :local-functions '( ;;========================================================================== (make-polestar () (sd-delete-polestar POLESTAR) (setq POLESTAR (sd-create-polestar :origin (second MY_POINT) :pick-token ":POLESTAR_PICK" :components (get-polestar-components)))) ;;========================================================================== (get-polestar-components () (set-qp-data (first MY_POINT)) (let ((components nil)) (dolist (dir LINE-DIRS) (push (list :type :line :dir dir :origin (first MY_POINT)) components)) (dolist (dir DISC-DIRS) (push (list :type :disc :dir dir :origin (first MY_POINT)) components)) components) ) ;;========================================================================== (set-qp-data (vertex) (setq NEIGHBORING-EDGES (sd-call-cmds (GET_SELECTION :select :edge_3d :by_vertex_3d vertex))) (setq NEIGHBORING-PNTS nil) (dolist (edge NEIGHBORING-EDGES) (let* ((struc (sd-inq-edge-geo edge :dest-space :global)) (pnt (cond ((equal (sd-edge-start-pnt struc) (second MY_POINT)) (sd-edge-end-pnt struc)) ((equal (sd-edge-end-pnt struc) (second MY_POINT)) (sd-edge-start-pnt struc))))) (when pnt (push pnt NEIGHBORING-PNTS)))) (setq LINE-DIRS nil) (setq DISC-DIRS nil) ;; Build a list of non parallel vectors (dolist (edge NEIGHBORING-EDGES) ;; only works for lines as we don't know whether it's the start or ;; end of the edge that is incident at our vertex. For lines this ;; does not matter. (let ((sd-curve (sd-inq-geo-props edge :dest-space :global))) (when (sd-line-p sd-curve) (let ((dir (sd-line-dir sd-curve))) (when (not (vec-parallel-to-any dir LINE-DIRS)) (setq LINE-DIRS (cons dir LINE-DIRS))) ) ) ) ) (when USE-GLOBAL-XYZ ;; Use global x,y,z rather than the neighbouring edge basis. (setq LINE-DIRS '(1,0,0 0,1,0 0,0,1)) (when USE-DISCS (setq DISC-DIRS LINE-DIRS)) ) ;; We expect 1 or 2 dirs (case (length LINE-DIRS) (1 ;; Add two ortho normal lines (setq LINE-DIRS (cons (vec-orthogonal (first LINE-DIRS)) LINE-DIRS)) (setq LINE-DIRS (cons (sd-vec-normalize (sd-vec-cross-product (first LINE-DIRS) (second LINE-DIRS))) LINE-DIRS) ) ;; And make 2 planes ! (when USE-DISCS (setq DISC-DIRS (cons (first LINE-DIRS) DISC-DIRS)) (setq DISC-DIRS (cons (second LINE-DIRS) DISC-DIRS)) ) ) (2 ;; Cross these two (let ((dir (sd-vec-normalize (sd-vec-cross-product (first LINE-DIRS) (second LINE-DIRS))))) (unless (sd-vec-null-p dir) (when USE-DISCS (setq DISC-DIRS (cons dir DISC-DIRS)) ) (setq LINE-DIRS (cons dir LINE-DIRS)) ) ) ) ) ) ;;========================================================================== (update-feedback (quickview) ; 1. delete existing feedbacks (destroy-feedback quickview) ; 2. create new feedbacks (let ((pos (get-quickview-position quickview))) (setf FEEDBACKS (mapcar #'(lambda (start) (sd-start-polyline-feedback (list start pos) :color 1,0,0) ) NEIGHBORING-PNTS))) ;; NB: would be faster if there were a sd-modify-polyline-feedback ;; so we could avoid deleting and re-creating on each step. ) ;;========================================================================== (destroy-feedback (quickview) (declare (ignore quickview)) (dolist (fb FEEDBACKS) (sd-end-feedback fb)) (setf FEEDBACKS nil) ) ;;========================================================================== (get-quickview-position (quickview) (let* ((qv-result (sd-inq-quickview quickview :vector-transform)) (dir (getf qv-result :translation))) (when dir (sd-vec-add (second MY_POINT) dir)))) ;;========================================================================== (apply-quickview (qv) (let ((pos (get-quickview-position qv)) ;; Get the new position (part_sel ;; Find the part to modify, from the vertex (sd-call-cmds (get_selection :focus_type *sd-part-seltype* :single_selection :allow_wire_part :select (second MY_POINT))) ) ) (sd-delete-quickview 'POLESTAR_PICK) ;; delete the neighbouring edges and make new ones to the new pos (sd-call-cmds (progn (dolist (edge NEIGHBORING-EDGES) (curve_deletion edge) ) (dolist (start-point NEIGHBORING-PNTS) (straight_creation :wire_part part_sel :two_points start-point pos) ) ) ) ;; Update MY_POINT and the polestar (let ((vertex_sel (sd-call-cmds (get_selection :focus_type *sd-vertex-3d-seltype* :single_selection :select pos) ) ) ) ;; using set-variable-status forces the after-input to be run, which ;; remakes the polestar (sd-set-variable-status 'MY_POINT :value (list vertex_sel pos)) ) ) ) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; Vec Utils ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun vec-parallel-to-any (vec vec-list) (dolist (v vec-list) (when (vec-parallel v vec) (return-from vec-parallel-to-any t)) ) nil ) ;; There's no sd-vec-parallel includes anti-parallel (defun vec-parallel (vec1 vec2) (let ((uvec1 (sd-vec-normalize vec1)) (uvec2 (sd-vec-normalize vec2))) (or (equalp uvec1 uvec2) (equalp uvec1 (sd-vec-scale uvec2 -1.0)))) ) (defun vec-orthogonal (vec) (let ((x (gpnt3d_x vec)) (y (gpnt3d_y vec)) (z (gpnt3d_z vec))) ;scalar product must be zero. (if (or (> (* x x) 0) (> (* y y) 0)) (setq new-x (- y) new-y (- x) new-z 0) (setq new-x (- z) new-y 0 new-z (- x))) (sd-vec-normalize (make-gpnt3d :x new-x :y new-y :z new-z))) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; #|Minimized UI with sd-defdialog - Additional Example
Note: This is an example file showing concepts of the Integration Kit. The code itself is not supported and will never be supported.|# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (in-package :dg-examples) (use-package '( :oli)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; define a dialog with some buttons specified as ':minimal-ui T' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-defdialog 'present_minimized_ui_chances :dialog-control :parallel :dialog-title "Minimal UI example" :after-initialization-ui '(when (sd-control-visible-p "PRESENT_MINIMIZED_UI_CHANCES") (display "To see the possibilities of Minimized UI you should use the Tools/Customize command to push the ICON 'Minimized UI' out of 'SolidDesigner/Test' group into a toolbar of your choice and call it from over there.") ) :variables '( (ROT_ANGLE ;; this variable will be visible in minimized UI :minimal-ui T :minimal-ui-title "Absolute Angle" :minimal-ui-width 25 ;; the width in GRID unit :title "Abs Angle" :value-type :angle :proposals () :auto-add-proposals T ) (MOVE_LENGTH ;; this variable will be visible in minimized UI :minimal-ui T :title "Length" :value-type :length :proposals '() :auto-add-proposals T ) (COMMENT ;; this variable will NOT be visible in minimized UI, but will be shown ;; when user requests the complete UI :title "Comment" :value-type :string :initial-optional T :prompt-text "What do you want to tell me? [string]" :show-input-tool (sd-show-general-text-editor ;:title (sd-get-control-title (sd-get-variable-ui-properties 'present_minimized_ui_chances :comment :TB)) :title "What do you want to tell me?" :initialText comment :position `(,(sd-get-variable-ui-properties 'present_minimized_ui_chances :comment :TB) :leftcenter) ) :hide-input-tool (sd-hide-general-text-editor) :after-input (progn (pprint (format nil "I would like to tell you: ~A " comment)) ) :proposals '() :auto-add-proposals T ) (HIDDEN_TEXT ;; this variable will NOT be visible at all! (regardless of minimized or not) :toggle-type :invisible :prompt-text "What additional thing do you want to tell me? [string]" :value-type :string :after-input (pprint "There's only a hidden secret not to be told.... ") ) ) :ok-action '(display (format nil "You entered ~%~A ~A~%~A ~A~%~A ~A~%" "a rotation angle of " (sd-num-to-string (sd-sys-to-user-units :angle rot_angle)) "a move length of " (sd-num-to-string (sd-sys-to-user-units :length move_length)) "and (may be) the comment " (or comment ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; END of Example") )) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; to have access to the miminized UI the UI behaviour has ;; to be set to :on-request. Therefore we add an available ;; command now: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-define-available-command "SolidDesigner" "Test" "Present Minimized UI" :commandTitle "Minimized UI" :action "present_minimized_ui_chances" :description "Show the possibilities of minimized UI of OSD 12.x" :ui-behavior :on-request ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; well these (normally default) settings have to be set ;; to work with UI on request and minimal UI's ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (ui_settings :USE-VP-BUTTONS :ON :OPTION-DIALOG-POS :LEFT) ; END of Example