如何不用每次都指定方向
各位大神,这个程序,每次输入距离完成后都需要指定方向,应该怎么修改,才能不用每次都输入方向,默认使用前一次的方向,只有按空格键才需要改变方向。想了很久也找不到方法,各位大神帮帮忙。代码如下:(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)
(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
非常感谢,就是要这样的效果。 Thanks for sharing and downloaded ^^ 支持源码! 太高深了,看不懂啊
页:
[1]