这个问题不好形容.
;;;改进的LIST命令,去除多余的显示内容.(defun c:li ()
(vl-load-com)
(setvar "cmdecho" 0)
(setq ss (ssget))
(setq ent (ssname ss 0))
(setq entdata (entget ent))
(setq entype (cdr (assoc 0 entdata)))
(setq vla-ent (vlax-ename->vla-object ent))
(if (and (= 1 (sslength ss))
(or (= entype "ARC")
(= entype "CIRCLE")
(= entype "LWPOLYLINE")
(= entype "SPLINE")
(= entype "LINE")
(= entype "POLYLINE")
)
)
(progn
(if (= "ARC" entype)
(progn
(setq radius (cdr (assoc 40 entdata)))
(setq curlen (vla-get-arclength vla-ent)
)
(setq stang (vla-get-startangle vla-ent))
(setq endang (vla-get-endangle vla-ent))
(setq arcang (angtos (- (+ (* 2 pi) endang) stang) 0 4))
(princ (strcat "\n 圆弧 半径:"
(rtos radius 2 3)
" 长度:"
(rtos curlen 2 3)
" 包含角度:"
arcang
"度."
)
)
)
)
(if (= "LINE" entype)
(progn
(setq llen (vla-get-length vla-ent))
(princ (strcat "\n直线长:" (rtos llen 2 3)))
)
)
(if (= "CIRCLE" entype)
(progn
(setq cradius (vla-get-radius vla-ent))
(princ (strcat "\n圆半径:" (rtos cradius 2 3)))
)
)
(if (= "SPLINE" entype)
(progn
(setq spllen (vlax-curve-getdistatpoint
vla-ent
(vlax-curve-getendpoint vla-ent)
)
)
(princ (strcat "\n样条曲线长:" (rtos spllen 2 3)))
)
)
(if (OR (= entype "LWPOLYLINE")
(= entype "POLYLINE")
)
(progn
(setq pllen (vlax-curve-getdistatpoint
vla-ent
(vlax-curve-getendpoint vla-ent)
)
)
(setq ple (vla-get-elevation vla-ent))
(prompt (strcat "\n多义线长:"
(rtos pllen 2 3)
" Z="
(rtos ple 2 3)
)
)
)
)
)
(command ".list" ss "")
)
(prin1)
)
(princ)
大家给看看.这个命令执行显示结果后在CAD命令行总会空一行,是何缘故.
就是在"多义线长..."下面会显示一个空行,再下面才是命令输入行.
这个空行是哪来的?如何取消.
(请在测试命令的时候选择一条多义线.)
因为CAD的绘图区当然是越大越好.我只想让命令行占两行宽度.包括输入行.
<P>你去掉后面的(prinl)看一下.</P> 也不行的.贴上来之前就试过了. <P>最后一行是不是少个括号呀</P>
<P>我没有用过在最后写(princ)命令的程序</P>
<P>也许是我少见多怪,如果有,请大家多提意见</P> 不是的.最后一行是为了防止加载这个程序时出现命令名提示的. <P>经试验没有办法,即便一个只有一句打印操作(print或princ或prin1或prompt)的最简单的命令,也是一样的。</P> <P>会不会是“list”命令本身的问题呀</P>
<P> </P> 将c:li改成li,用(li)命令 <P>很奇怪,经试验只要在在程序前面进行undo编组即可达到目的:</P>
<P>(setq undo_setting (getvar "undoctl"))<BR> (cond<BR> ((= 2 (logand undo_setting 2)) ; Undo is one<BR> (command "_.undo" "_control" "_all" "_.undo" "be")<BR> )<BR> ((/= 1 (logand undo_setting 1)) ; Undo is disabled<BR> (command "_.undo" "_all" "_.undo" "be")<BR> )<BR> (t (command "_.undo" "be"))<BR> )</P> <P>楼上的是牛人.这都被你试出来了.</P>
<P>确实是这样的.加上UNDO标志后就没有多余 的一行了.</P>
<P>非常感谢 .</P>
<P>结贴.送花一朵.</P>
页:
[1]
2