明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1232|回复: 6

[提问] 如何不用每次都指定方向

[复制链接]
发表于 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)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 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)
回复 支持 0 反对 1

使用道具 举报

发表于 2019-8-19 10:45:23 | 显示全部楼层


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2019-8-19 10:53:11 | 显示全部楼层

非常感谢,就是要这样的效果。
发表于 2019-8-29 00:36:05 | 显示全部楼层
Thanks for sharing and downloaded ^^
发表于 2022-12-10 15:31:02 | 显示全部楼层
太高深了,看不懂啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 04:13 , Processed in 0.484094 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表