主要是因为atuocad中剖面线选择麻烦,我是搞机械的.就弄了个这个.应该考虑比较全面了.
也许我写得比较罗嗦,希望大虾们给斧正一下.另外
(while (/= 0 (getvar"cmdactive")) ;没有它回不到原来图层 (command pause) ) 这段话,我也不知道具体真正含义,,只是知道能使一个命令不中断.没它在这里就回不到原来的图层了.cmdactive这变量,说明写得我都看不懂.也无人可问.
另外,我想把输入行或是执行回车动作减少一个,比如输入间距的时候如果不输入,就可以直接插入选择点了,而不是需要回车一下.试了好多方法,不行.请高手指点.
还有,执行过程中按esc后,图层就返回不到原始层了,而是就在hatch层了.如果再加个判断呢?
;画剖面线,主要功能就是自己设定层,也考虑了其它影响因素 (defun c:xh(/ oldlay a xlt xoce xos angb angd) (setq xoce (getvar "cmdecho")) ;回显特性给xoce (setvar "cmdecho" 0) ;取消回显 (setq xos (getvar "osmode")) ;捕捉特性赋值给xos (setvar "osmode" 0) ;取消捕捉 (setq oldlay (getvar"clayer")) ;原始图层状态赋值给oldlay (setq angb (getvar "angbase" ));取角度起始方向 (setq angd (getvar "angdir" )) ;取角度旋转方向 (setvar "angbase" 0.0) ;x轴(东)为0 (setvar "angdir" 0) ;逆时针为正
(setq xlt (getvar "dimscale")) ;取得标注比例因子给xlt (if (null (tblsearch "LAYER" "hatch")) ;如果还没有hatch图层 (command "._layer" "_m" "hatch" "_c" 2 "" "_lt" "continuous" "" "") ;则创建hatch图层,颜色2,线型continuous (setvar"clayer" "hatch") ;否则直接转换到hatch图层 )
(if (not xjd) ;如果从未确定过剖面线角度 (setq xjd 45)) ;则令默认角度为45 (setq a xjd) ;将角度暂存在a中 (setq xjd (getreal(strcat"\n请输入剖面线角度<" (rtos xjd) "%%d>"))) ;输入角度令提示中出现角度值 (if (not xjd) ;如果空输入 (setq xjd a)) ;则从a中取值
(if (not xjj ) ;如果从未确定过剖面线间距 (setq xjj 2)) ;则令默认间距为2 (setq a xjj) ;将间距暂存于a中 (setq xjj (getreal(strcat "\n请输入剖面线间距<"(rtos xjj) ">"))) ;输入间距令提示中出现间距值 (if (not xjj ) ;如果空输入 (setq xjj a)) ;从a中取值
(princ"\n请选择剖面线插入点") ;纯粹提示,因为前面已经令回显关闭 (command ".-bhatch" "p" "u" xjd (* xlt xjj) "n" ) ;画剖面线,其中间距是考虑了比例因子的 (while (/= 0 (getvar"cmdactive")) ;没有它回不到原来图层 (command pause) )
(setvar"clayer" oldlay) ;返回原图层 (setvar "osmode" xos) ;回原捕捉方式 (setvar "angbase" angb) ;返回角度初始 (setvar "angdir" angd) ;返回角度旋转方向 (setvar "cmdecho" xoce) ;回原回显状态 (princ) ;打印空行 )
|