(in-package :my-custom-package) (use-package :oli) (sd-defdialog 'arc-text :dialog-title (sd-multi-lang-string "Text on arc" :german "Text auf Bogen") :toolbox-button :force :variables '( (strt-pnt :title (sd-multi-lang-string "Start point" :german "Startpunkt") :value-type :point-3d) (arc-edge :title (sd-multi-lang-string "Arc edge" :german "Bogenkante") :selection (*sd-circle-2d-seltype* *sd-arc-2d-seltype* *sd-circle-3d-seltype* *sd-arc-3d-seltype*)) (edge-offset :title (sd-multi-lang-string "Edge offset" :german "Kantenversatz") :initial-value 10 :value-type :number) (txt :title (sd-multi-lang-string "Text" :german "Text") :value-type :string) (txt-type :title (sd-multi-lang-string "Text type" :german "Textart") :range ("osd_default" "arial" "arial_black" "courier_new" "tahoma" "wingdings" "wingdings_2" "wingdings_3")) (txt-size :title (sd-multi-lang-string "Text size" :german "Textgröße") :initial-value 10 :value-type :positive-number) (txt-angle :title (sd-multi-lang-string "Text angle" :german "Textwinkel") :initial-value 0 :value-type :number) (txt-gap :title (sd-multi-lang-string "Character gap (angle)" :german "Buchst. Abstand (Winkel)") :initial-value 5 :value-type :positive-number) (go-action :title (sd-multi-lang-string "Create text" :german "Text erstellen") :toggle-type :wide-toggle :push-action (go-create-text strt-pnt arc-edge txt txt-size txt-angle txt-gap txt-type edge-offset)))) (defun go-create-text (strt-pnt arc-edge txt txt-size txt-angle txt-gap txt-type edge-offset) (let* ( (wp-rot-ang 0) (wp-temp (sd-gen-obj-basename :workplane :parent "/" :prefix "txt-temp-plane")) (wp-master (sd-gen-obj-basename :workplane :parent "/" :prefix "txt-master-plane")) (all-prop (sd-inq-geo-props arc-edge :dest-space :global)) (cnt-pnt (sd-circle-center all-prop)) (radi (sd-circle-radius all-prop)) (u-dir (sd-vec-subtract strt-pnt cnt-pnt)) (axis-r (sd-circle-normal all-prop))) (sd-set-model-checkpoint) (sd-call-cmds (create_workplane :new :name wp-master :owner "/" :pt_dir :origin cnt-pnt :normal axis-r :u_dir u-dir)) (loop for char across txt do (sd-call-cmds (create_workplane :new :name wp-temp :owner "/" :pt_dir :origin cnt-pnt :normal axis-r :u_dir u-dir)) (sd-call-cmds (position_wp :current :rotate :axis :w :rotation_angle (/ pi -2))) (sd-call-cmds (position_wp :current :rotate :axis :w :rotation_angle (/ (* pi wp-rot-ang) 180))) (decf wp-rot-ang txt-gap) (sd-call-cmds (create_geo_text :text (format nil "~a" char) :pos (make-gpnt2d :x 0 :y (- radi edge-offset)) :angle txt-angle :size txt-size :font txt-type)) (when (not (string= char " ")) (proj-curr-wp-geo-to-master wp-master)) (sd-call-cmds (delete_3d (format nil "/~a" wp-temp)))))) (defun proj-curr-wp-geo-to-master (wp-master) (let ( (all-2d-edges-on-wp (sd-call-cmds (get_selection :focus_type *sd-edge-2d-seltype* :curr_wp_only :select :all_2d)))) (sd-call-cmds (current_wp (format nil "/~a" wp-master))) (dolist (2d-edge-proj all-2d-edges-on-wp) (sd-call-cmds (uic_project_2d_edge 2d-edge-proj)))))