烟盒迷唇 发表于 2019-8-19 09:49:38

如何不用每次都指定方向

各位大神,这个程序,每次输入距离完成后都需要指定方向,应该怎么修改,才能不用每次都输入方向,默认使用前一次的方向,只有按空格键才需要改变方向。想了很久也找不到方法,各位大神帮帮忙。代码如下:(defun c:hgl()
(setq cmdmode (getvar "cmdecho"))
(setvar "cmdecho" 0)
        (entmakex (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord")
                                                        '(70 . 0) '(6 . "Continuous") (cons 2 "1_ZWCAD") (cons 62 3)
                                                )
)
(dcl_ganlu)
(princ "\n绘制完成!")
        (princ)
)
(defun dcl_ganlu(/ dcl_file dcl_id)
        (if (> (setq dcl_id (load_dialog (setq dcl_file (wf-scgldcl)))) 0)
                (progn
                        (if (new_dialog "NextSetting" dcl_id)
                                (progn
                                        (def_ganlu)
                                        (action_tile "bilihz" "(setq ddtype 1)")
                                        (action_tile "djjhz" "(setq ddtype 2)")
                                        (action_tile "xinjian" "(setq ddtype 3)")
                                        (action_tile "yuanyou" "(setq ddtype 4)")
                                        (action_tile "accept" "(ok_bili)(done_dialog 1)")
                                        (setq dd (start_dialog))
                                )
                                (princ "\n无法显示对话框!")
                        )
                        (unload_dialog dcl_id)
                        (vl-file-delete dcl_file)
                )
                (princ "\n无法加载对话框!")
        )
        (if (= dd 1) (draw_ganlu))
)
(defun def_ganlu ()
(set_tile "bili_draw" (if bl_draw (rtos bl_draw 2) "2500"))
)
(defun ok_bili ()
        (setq bl_draw (atof (get_tile "bili_draw")))
)

(defun cfzfu()
        (setq zfcgs (strlen srlanju))
        (setq zfc_t "")
        (setq lanjulist nil)
        (while (> zfcgs 0)
                (setq dgzfc (substr srlanju 1 1))
                (if (/= dgzfc "+")
                        (setq zfc_t (strcat zfc_t dgzfc))
                        (if (/= zfc_t "")
                                (progn
                                        (setq lanjulist (cons zfc_t lanjulist))
                                        (setq zfc_t "")
                                )
                        )                                                       
                )
                (setq srlanju (substr srlanju 2 (- (strlen srlanju) 1)))
                (if (and (< zfcgs 2) (/= zfc_t ""))
                        (progn
                                (setq lanjulist (cons zfc_t lanjulist))
                                (setq zfc_t "")
                        )                                                       
                )
                (setq zfcgs (1- zfcgs))                               
        )
        (setq lanjulist (reverse lanjulist))
)

(defun draw_ganlu (/ ang1 ang2 bjr bl ctp5 edp2 i_t jdp3 jdp4 jjx lanju leth_auto oce osm p5 stp1 xchd zgh)
(setq jjx 2.25 ;设定直线上面的字偏离直线的距离为ls
                zgh 2.5 ;设定字高zgh
                bjr 1.5) ;电杆半径
(setvar "TEXTSTYLE" "Standard")    ;切换到默认的字体
(graphscr) ;切换到图形窗口
(setq oce (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq bl bl_draw
                stp1 (getpoint "\n指定起点:")         
)
(setq osm (getvar "osmode"));储存对象捕捉的系统变量
(setvar "osmode" 0)         ;关闭对象捕捉
        (cond
                ((= ddtype 3)
                        (entmakex (list (cons 0 "CIRCLE") (cons 10 stp1) (cons 40 bjr) (cons 8 "1_ZWCAD")))                       
                )
        )
(while (setq ang1 (getangle stp1 "\n指定方向:")) ;;不希望每次都提示,改成按空格键才出现,默认使用前一次的方向
                (setq srlanju (getstring "\n请输入距离:"))
                (cfzfu)
                (setq i_t 0)
                (repeat (length lanjulist)
                        (/= (nth i_t lanjulist) nil)
                        (setq leth_auto (nth i_t lanjulist))                                                                                               
                        (if (= ddtype 1) (setq xchd (/ (* leth_auto 1000) bl)) (setq xchd 20))
                        (setq edp2 (polar stp1 ang1 xchd)   ;计算edp2的坐标   
                                jdp3 (polar stp1 ang1 bjr)
                                jdp4 (polar stp1 ang1 (- xchd bjr))
                                ctp5 (list (/ (+ (car stp1) (car edp2)) 2.0) (/ (+ (cadr stp1) (cadr edp2)) 2.0)) ;计算p1p2的中点ctp5的坐标
                        )
                        (cond
                                ((= ddtype 3)
                                        (entmakex (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")
                                                                                        (cons 100 "AcDbPolyline") (cons 90 2) (cons 8 "1_ZWCAD")
                                                                                        (cons 10 jdp3) (cons 10 jdp4) (cons 43 0.7)                                                                                                                       
                                                                                )                                                              
                                        )
                                        (entmakex (list (cons 0 "CIRCLE") (cons 10 edp2) (cons 40 bjr) (cons 8 "1_ZWCAD")))
                                )
                        )
                        (if (< (* pi 0.5) ang1 (* pi 1.5))
                                (setq ang2 (angle edp2 stp1))
                                (setq ang2 ang1)
                        )
                        (setq p5 (polar ctp5 (+ ang2 (/ pi 2)) jjx))
                        (entmakex (list '(0 . "TEXT") (cons 1 leth_auto) (cons 62 1) (cons 10 p5)       
                                                                        (cons 40 zgh) (cons 11 p5) (cons 41 0.75)        (cons 50 ang2)(cons 8 "0")
                                                                        (cons 7 (getvar "textstyle")) (cons 71 0) (cons 72 1) (cons 73 2)
                                                                )               
                        )
                        (setq stp1 edp2)
                        (setq edp2 (polar stp1 ang2 (* (atof leth_auto) xchd)))
      (setq i_t (1+ i_t))                       
                )
)
(setvar "osmode" osm)         
(setvar "cmdecho" oce)
(princ)
)


(defun wf-scgldcl(/ lst_str str file f)
        (setq f (open (setq file (vl-filename-mktemp "" "" ".dcl")) "w"))
        (foreach str
                '(
                       "NextSetting : dialog{"
                       "      label = \"参数设置\";"
                       ":row{"
                       "         :boxed_row{"
                       "                label=\"绘制方式\";"
                       "                :radio_column{"
                       "                              key=\"ratio1\";"
                       "                              :radio_button{label=\"按比例绘制\"; key=\"bilihz\";}"
                       "                              :radio_button{label=\"等间距绘制\"; key=\"djjhz\";}"
                       "                        spacer_1;"
                       "                        spacer_1;"
                       "                }"
                       "                :column{"
                       "                        :edit_box{label=\"1:\";key=\"bili_draw\";edit_width=6;}"
                       "                        :text{label=\"间距为:20\"; key=\"valRatio2\";}"
                       "                        spacer_1;"
                       "                        spacer_1;"
                       "                        }"
                       "                }"
                       ":boxed_column{"
                       "   label=\"线缆类型\";"
                       "                :radio_column{"
                       "                              :radio_button{label=\"新建\"; key=\"xinjian\";}"
                       "                              :radio_button{label=\"原有\"; key=\"yuanyou\";}"
                       "                }"
                       ""
                       "                        }"
                       ""
                       ""
                       "                "
                       "}         "
                       "ok_cancel;"
                       ""
                       "}"
               )
                (write-line str f)
        )
        (close f)
        ;;返回
        file
)
;;;===================================================================*
(princ)

ymcui 发表于 2019-8-19 10:41:24

(defun c:hgl()
(setq cmdmode (getvar "cmdecho"))
(setvar "cmdecho" 0)
        (entmakex (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord")
                                                        '(70 . 0) '(6 . "Continuous") (cons 2 "1_ZWCAD") (cons 62 3)
                                                )
)
(dcl_ganlu)
(princ "\n绘制完成!")
        (princ)
)
(defun dcl_ganlu(/ dcl_file dcl_id)
        (if (> (setq dcl_id (load_dialog (setq dcl_file (wf-scgldcl)))) 0)
                (progn
                        (if (new_dialog "NextSetting" dcl_id)
                                (progn
                                        (def_ganlu)
                                        (action_tile "bilihz" "(setq ddtype 1)")
                                        (action_tile "djjhz" "(setq ddtype 2)")
                                        (action_tile "xinjian" "(setq ddtype 3)")
                                        (action_tile "yuanyou" "(setq ddtype 4)")
                                        (action_tile "accept" "(ok_bili)(done_dialog 1)")
                                        (setq dd (start_dialog))
                                )
                                (princ "\n无法显示对话框!")
                        )
                        (unload_dialog dcl_id)
                        (vl-file-delete dcl_file)
                )
                (princ "\n无法加载对话框!")
        )
        (if (= dd 1) (draw_ganlu))
)
(defun def_ganlu ()
(set_tile "bili_draw" (if bl_draw (rtos bl_draw 2) "2500"))
)
(defun ok_bili ()
        (setq bl_draw (atof (get_tile "bili_draw")))
)

(defun cfzfu( srlan )
        (setq zfcgs (strlen srlan))
        (setq zfc_t "")
        (setq lanjulist nil)
        (while (> zfcgs 0)
                (setq dgzfc (substr srlan 1 1))
                (if (/= dgzfc "+")
                        (setq zfc_t (strcat zfc_t dgzfc))
                        (if (/= zfc_t "")
                                (progn
                                        (setq lanjulist (cons zfc_t lanjulist))
                                        (setq zfc_t "")
                                )
                        )                                                       
                )
                (setq srlan (substr srlan 2 (- (strlen srlan) 1)))
                (if (and (< zfcgs 2) (/= zfc_t ""))
                        (progn
                                (setq lanjulist (cons zfc_t lanjulist))
                                (setq zfc_t "")
                        )                                                       
                )
                (setq zfcgs (1- zfcgs))                               
        )
        (setq lanjulist (reverse lanjulist))
)

(defun draw_ganlu (/ ang1 ang2 bjr bl ctp5 edp2 i_t jdp3 jdp4 jjx lanju leth_auto oce osm p5 stp1 xchd zgh)
(setq jjx 2.25 ;设定直线上面的字偏离直线的距离为ls
                zgh 2.5 ;设定字高zgh
                bjr 1.5) ;电杆半径
(setvar "TEXTSTYLE" "Standard")    ;切换到默认的字体
(graphscr) ;切换到图形窗口
(setq oce (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq bl bl_draw srlanju ""
                stp1 (getpoint "\n指定起点:")         
)
(setq osm (getvar "osmode"));储存对象捕捉的系统变量
(setvar "osmode" 0)         ;关闭对象捕捉
        (cond
                ((= ddtype 3)
                        (entmakex (list (cons 0 "CIRCLE") (cons 10 stp1) (cons 40 bjr) (cons 8 "1_ZWCAD")))                       
                )
        )
(while (or (/= srlanju "") (setq ang1 (getangle stp1 "\n指定方向:")))
                (setq srlanju (getstring "\n请输入距离:"))
                (if (/= srlanju "")
                (progn
                (cfzfu srlanju)
                (setq i_t 0)
                (repeat (length lanjulist)
                        (/= (nth i_t lanjulist) nil)
                        (setq leth_auto (nth i_t lanjulist))                                                                                               
                        (if (= ddtype 1) (setq xchd (/ (* leth_auto 1000) bl)) (setq xchd 20))
                        (setq edp2 (polar stp1 ang1 xchd)   ;计算edp2的坐标   
                                jdp3 (polar stp1 ang1 bjr)
                                jdp4 (polar stp1 ang1 (- xchd bjr))
                                ctp5 (list (/ (+ (car stp1) (car edp2)) 2.0) (/ (+ (cadr stp1) (cadr edp2)) 2.0)) ;计算p1p2的中点ctp5的坐标
                        )
                        (cond
                                ((= ddtype 3)
                                        (entmakex (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")
                                                                                        (cons 100 "AcDbPolyline") (cons 90 2) (cons 8 "1_ZWCAD")
                                                                                        (cons 10 jdp3) (cons 10 jdp4) (cons 43 0.7)                                                                                                                       
                                                                                )                                                              
                                        )
                                        (entmakex (list (cons 0 "CIRCLE") (cons 10 edp2) (cons 40 bjr) (cons 8 "1_ZWCAD")))
                                )
                        )
                        (if (< (* pi 0.5) ang1 (* pi 1.5))
                                (setq ang2 (angle edp2 stp1))
                                (setq ang2 ang1)
                        )
                        (setq p5 (polar ctp5 (+ ang2 (/ pi 2)) jjx))
                        (entmakex (list '(0 . "TEXT") (cons 1 leth_auto) (cons 62 1) (cons 10 p5)       
                                                                        (cons 40 zgh) (cons 11 p5) (cons 41 0.75)        (cons 50 ang2)(cons 8 "0")
                                                                        (cons 7 (getvar "textstyle")) (cons 71 0) (cons 72 1) (cons 73 2)
                                                                )               
                        )
                        (setq stp1 edp2)
                        (setq edp2 (polar stp1 ang2 (* (atof leth_auto) xchd)))
      (setq i_t (1+ i_t))                       
                )
        )
        )
)
(setvar "osmode" osm)         
(setvar "cmdecho" oce)
(princ)
)


(defun wf-scgldcl(/ lst_str str file f)
        (setq f (open (setq file (vl-filename-mktemp "" "" ".dcl")) "w"))
        (foreach str
                '(
                       "NextSetting : dialog{"
                       "      label = \"参数设置\";"
                       ":row{"
                       "         :boxed_row{"
                       "                label=\"绘制方式\";"
                       "                :radio_column{"
                       "                              key=\"ratio1\";"
                       "                              :radio_button{label=\"按比例绘制\"; key=\"bilihz\";}"
                       "                              :radio_button{label=\"等间距绘制\"; key=\"djjhz\";}"
                       "                        spacer_1;"
                       "                        spacer_1;"
                       "                }"
                       "                :column{"
                       "                        :edit_box{label=\"1:\";key=\"bili_draw\";edit_width=6;}"
                       "                        :text{label=\"间距为:20\"; key=\"valRatio2\";}"
                       "                        spacer_1;"
                       "                        spacer_1;"
                       "                        }"
                       "                }"
                       ":boxed_column{"
                       "   label=\"线缆类型\";"
                       "                :radio_column{"
                       "                              :radio_button{label=\"新建\"; key=\"xinjian\";}"
                       "                              :radio_button{label=\"原有\"; key=\"yuanyou\";}"
                       "                }"
                       ""
                       "                        }"
                       ""
                       ""
                       "                "
                       "}         "
                       "ok_cancel;"
                       ""
                       "}"
               )
                (write-line str f)
        )
        (close f)
        ;;返回
        file
)
;;;===================================================================*
(princ)

ymcui 发表于 2019-8-19 10:45:23



烟盒迷唇 发表于 2019-8-19 10:53:11

ymcui 发表于 2019-8-19 10:45


非常感谢,就是要这样的效果。

ketxu 发表于 2019-8-29 00:36:05

Thanks for sharing and downloaded ^^

594826903 发表于 2019-12-13 13:37:13

支持源码!

zmzk 发表于 2022-12-10 15:31:02

太高深了,看不懂啊
页: [1]
查看完整版本: 如何不用每次都指定方向