oyxx1023 发表于 2006-9-8 14:47:00

这个问题不好形容.

;;;改进的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的绘图区当然是越大越好.我只想让命令行占两行宽度.包括输入行.

liu_kunlun 发表于 2006-9-8 17:21:00

<P>你去掉后面的(prinl)看一下.</P>

oyxx1023 发表于 2006-9-8 18:36:00

也不行的.贴上来之前就试过了.

phoenixdjq 发表于 2006-9-9 09:38:00

<P>最后一行是不是少个括号呀</P>
<P>我没有用过在最后写(princ)命令的程序</P>
<P>也许是我少见多怪,如果有,请大家多提意见</P>

oyxx1023 发表于 2006-9-9 11:16:00

不是的.最后一行是为了防止加载这个程序时出现命令名提示的.

liu_kunlun 发表于 2006-9-11 19:48:00

<P>经试验没有办法,即便一个只有一句打印操作(print或princ或prin1或prompt)的最简单的命令,也是一样的。</P>

phoenixdjq 发表于 2006-9-12 12:14:00

<P>会不会是“list”命令本身的问题呀</P>
<P>&nbsp;</P>

byghbcx 发表于 2006-9-15 10:29:00

将c:li改成li,用(li)命令

liu_kunlun 发表于 2006-9-15 12:03:00

<P>很奇怪,经试验只要在在程序前面进行undo编组即可达到目的:</P>
<P>(setq undo_setting (getvar "undoctl"))<BR>&nbsp; (cond<BR>&nbsp;&nbsp;&nbsp; ((= 2 (logand undo_setting 2))&nbsp;&nbsp;&nbsp;&nbsp; ; Undo is one<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "_.undo" "_control" "_all" "_.undo" "be")<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; ((/= 1 (logand undo_setting 1))&nbsp;&nbsp;&nbsp; ; Undo is disabled<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "_.undo" "_all" "_.undo" "be")<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; (t (command "_.undo" "be"))<BR>&nbsp; )</P>

oyxx1023 发表于 2006-9-15 12:49:00

<P>楼上的是牛人.这都被你试出来了.</P>
<P>确实是这样的.加上UNDO标志后就没有多余 的一行了.</P>
<P>非常感谢 .</P>
<P>结贴.送花一朵.</P>
页: [1] 2
查看完整版本: 这个问题不好形容.