;http://osd.cad.de (in-package :custom) (use-package :OLI) (sd-defdialog 'win-halb :dialog-title '(sd-multi-lang-string "Half Angle" :german "Winkelhalbierende") :variables '( (gerade-gerade :title (sd-multi-lang-string "Linear Linear" :german "Gerade Gerade")) (LA :value-type :edge-2d :title (sd-multi-lang-string "1. Line" :german "1. Linie") :prompt-text (sd-multi-lang-string "Specify 1. Line." :german "1. Linie angeben.") ;;:initial-enable nil :initial-optional t :check-function #'(lambda (gerade) (if (sd-line-p (sd-inq-geo-props gerade)) :ok (values :error (sd-multi-lang-string "Linear Lines Only!" :german "Nur Geraden erlaubt!")))) :after-input (gerade-gerade-action) ) (LB :value-type :edge-2d :title (sd-multi-lang-string "2. Line" :german "2. Linie") :prompt-text (sd-multi-lang-string "Specify 2. Line." :german "2. Linie angeben.") ;;:initial-enable nil :initial-optional t :check-function #'(lambda (gerade) (if (sd-line-p (sd-inq-geo-props gerade)) :ok (values :error (sd-multi-lang-string "Linear Lines Only!" :german "Nur Geraden erlaubt!")))) :after-input (gerade-gerade-action) ) (punkt-punkt :title (sd-multi-lang-string "4 Points" :german "4 Punkte")) (P1 :value-type :point-2d :title (sd-multi-lang-string "1. Point" :german "1. Punkt") :prompt-text (sd-multi-lang-string "Specify 1. Point." :german "1. Punkt angeben.") :initial-optional t :after-input (punkt-punkt-action) ) (P2 :value-type :point-2d :title (sd-multi-lang-string "2. Point" :german "2. Punkt") :prompt-text (sd-multi-lang-string "Specify 2. Point." :german "2. Punkt angeben.") :initial-optional t :after-input (punkt-punkt-action) ) (P3 :value-type :point-2d :title (sd-multi-lang-string "3. Point" :german "3. Punkt") :prompt-text (sd-multi-lang-string "Specify 3. Point." :german "3. Punkt angeben.") :initial-optional t :after-input (punkt-punkt-action) ) (P4 :value-type :point-2d :title (sd-multi-lang-string "4. Point" :german "4. Punkt") :prompt-text (sd-multi-lang-string "Specify 4. Point." :german "4. Punkt angeben.") :initial-optional t :after-input (punkt-punkt-action) ) ) :local-functions '( (gerade-gerade-action () (sd-set-variable-status 'LA :optional nil) (sd-set-variable-status 'LB :optional nil) (when (and LA LB) (progn (setf AR (sd-line-dir (sd-inq-geo-props LA))) (setf BR (sd-line-dir (sd-inq-geo-props LB))) (setf AP (sd-line-pnt (sd-inq-geo-props LA))) (setf BP (sd-line-pnt (sd-inq-geo-props LB))) (setf AR (gpnt2d (gpnt3d_x AR) (gpnt3d_y AR))) (setf BR (gpnt2d (gpnt3d_x BR) (gpnt3d_y BR))) (setf AP (gpnt2d (gpnt3d_x AP) (gpnt3d_y AP))) (setf BP (gpnt2d (gpnt3d_x BP) (gpnt3d_y BP))) (sd-set-variable-status 'LA :optional t) (sd-set-variable-status 'LB :optional t) (setf LA nil) (setf LB nil) (winkel-halb-action) );;progn );;when ) (punkt-punkt-action () (sd-set-variable-status 'P1 :optional nil) (sd-set-variable-status 'P2 :optional nil) (sd-set-variable-status 'P3 :optional nil) (sd-set-variable-status 'P4 :optional nil) (when (and P1 P2 P3 P4) (progn (setf AR (sd-vec-normalize (sd-vec-subtract P2 P1))) (setf BR (sd-vec-normalize (sd-vec-subtract P4 P3))) (setf AP P1) (setf BP P3) (sd-set-variable-status 'P1 :optional t) (sd-set-variable-status 'P2 :optional t) (sd-set-variable-status 'P3 :optional t) (sd-set-variable-status 'P4 :optional t) (setf P1 nil) (setf P2 nil) (setf P3 nil) (setf P4 nil) (winkel-halb-action) );;progn );;when ) (winkel-halb-action () (let (P5 P6 P7) (if (or (sd-vec-equal-p AR BR) (sd-vec-equal-p AR (sd-vec-scale BR -1))) (progn (setf P5 (sd-vec-scale (sd-vec-add AP BP) 0.5)) (setf P6 (sd-vec-add P5 AR)) (c_line_inf :angle P5 P6) );;progn );;if (if (and (not (sd-vec-equal-p AR BR)) (not (sd-vec-equal-p AR (sd-vec-scale BR -1)))) (progn (setf VT (/ (+ (* (- (gpnt2d_y AP) (gpnt2d_y BP)) (gpnt2d_x AR)) (* (- (gpnt2d_x BP) (gpnt2d_x AP)) (gpnt2d_y AR))) (- (* (gpnt2d_y BR) (gpnt2d_x AR)) (* (gpnt2d_x BR) (gpnt2d_y AR))))) (setf P5 (sd-vec-add BP (sd-vec-scale BR VT))) (setf P6 (sd-vec-add P5 (sd-vec-add AR BR))) (setf P7 (sd-vec-add P5 (sd-vec-subtract AR BR))) (c_line_inf :angle P5 P6) (c_line_inf :angle P5 P7) );;progn );;if (setf P5 nil) (setf P6 nil) (setf P7 nil) (setf AR nil) (setf BR nil) (setf AP nil) (setf BP nil) );;let ) ) :cancel-action '() :ok-action '() )