;
(in-package :thread)
(use-package :oli)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Begin of page;;
;;
;; example how to use the function sd-am-create-standard-view
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(sd-defdialog 'thread_extension
:dialog-title "Thread Define"
:after-initialization
'(trace oli::sd-define-thread
oli::sd-inq-thread
oli::sd-destroy-thread
)
:variables
'(
(t-feedbacks :initial-value nil) ;; all feedbacks shown
(result :initial-value nil) ;; saved return value of sd-*-thread functions
(props :initial-value nil) ;; cylinder face properties
(a-cyl-face
:value-type :face
:title "Cyl Face"
:check-function
#'(lambda (this-face)
(if (sd-cylinder-p (SD-INQ-GEO-PROPS this-face))
:ok
(values :error "No cylindrical face selected. Thread Information is only valid for a cylindrical face.")))
:after-input
(let (center axis start radius)
(dolist (a-fb t-feedbacks) (sd-end-point-feedback a-fb)) ;; remove old feedback
(setf props (sd-inq-geo-props a-cyl-face :dest-space :global))
(setf center (sd-cylinder-center props)) ;; really the center , also in axis direction!
(setf axis (sd-cylinder-axis-dir props))
(setf start (sd-cylinder-start-dir props)) ;; this is for rotaion,
(setf radius (sd-cylinder-radius props))
(push ;; center of cylinder
(sd-start-direction-feedback
:point center :direction axis :disc t :color 0,0,1)
t-feedbacks)
(sd-set-variable-status 't-define :enable t)
(sd-set-variable-status 't-inq :enable t)
(sd-set-variable-status 't-destroy :enable t)
) ;; end after-input
) ;; end a-cylface
;; -------------------------------------------------------------------
("Thread Define")
(nomi-dia
:title "Nominal Dia."
:value-type :positive-length
)
(pitch
:title "Pitch"
:value-type :positive-length
)
(core-dia
:title "Core Dia."
:value-type :positive-length
)
(thread-type :title "Type" :range ( :inner :outer))
(chamfer
:title "Include adjacent Cone"
:value-type :boolean
:toggle-type :wide-toggle
:initial-value T
)
(thread-name
:title "Name"
:value-type :string
:initial-value ""
)
(a-dir-reverse
:title "Reverse Dir"
:value-type :boolean
:toggle-type :wide-toggle
)
(t-define
:initial-enable NIL
:toggle-type :wide-toggle
:title "Define"
:push-action
(progn
(setf result
(oli::sd-define-thread a-cyl-face
:nominal-diameter nomi-dia
:core-diameter core-dia
:pitch pitch
:thread-type thread-type
;:thread-unit thread-unit
:thread-color 1,0,0
:include-chamfer chamfer
:thread-direction (if a-dir-reverse :REVERSE-CYL-AXIS :CYL-AXIS)
:thread-name thread-name
)
)
(unless result (display "no thread created - look to trace output in concole"))
)
) ;; end t-define
;; -------------------------------------------------------------------
("Thread Inquire")
(t-inq
:initial-enable NIL
:toggle-type :wide-toggle
:title "Inquire"
:push-action
(progn
(setf result
(oli::sd-inq-thread a-cyl-face))
(if result
(progn
(display (format nil "thread detected~%~%~{:~A ~A~%~}~%look also to trace output in concole~%" (nthcdr 2 result)))
(setf nomi-dia (getf result :nominal-diameter))
(setf core-dia (getf result :core-diameter))
(setf pitch (getf result :pitch))
(setf thread-type (getf result :thread-type))
(setf chamfer (getf result :include-chamfer))
(setf a-dir-reverse (NOT (sd-vec-equal-p (getf result :thread-direction) (sd-cylinder-axis-dir props))))
(setf thread-name (getf result :thread-name))
) ; end progn
(display "no thread information available"))
)
) ;; end t-inq
;; -------------------------------------------------------------------
("Thread Destroy")
(t-destroy
:initial-enable NIL
:toggle-type :wide-toggle
:title "Destroy"
:push-action
(progn
(setf result
(oli::sd-destroy-thread a-cyl-face))
(if result
(display "thread deleted")
(display "no thread information available or no thread deleted - look to trace output in concole"))
)
) ;; end t-destroy
) ;; end variables
:cleanup-action
'(progn
(dolist (a-fb t-feedbacks) (sd-end-point-feedback a-fb)) ;; remove old feedback
(untrace oli::sd-define-thread
oli::sd-inq-thread
oli::sd-destroy-thread
)
)
) ;; end
; END of Example