changyiran 发表于 2012-6-21 18:39:47

关于cmdactive的奇怪现象

我在命令栏里输入cmdactive查询得到的值是1,但是用getvar得到的居然是0。我原本在程序里是想让用户根据需要自己画一个多段线,代码如下:(command"pline")(while(>(getvar"cmdactive")0)(command pause))但因为得到的是0以至于程序直接执行了后面的程序,并没有实现让用户根据需要自己画线的效果,所以望各位高手指导下!

caoyin 发表于 2012-6-21 18:58:15

命令行输入当然返回1,cmdactive本身既是系统变量,也是命令

Andyhon 发表于 2012-6-21 18:59:19

未审何因?
参考先
http://www.google.com/search?as_q=%28command+%22pline%22%29+while+pause&as_epq=getvar%22cmdactive&as_oq=&as_eq=&as_nlo=&as_nhi=&lr=&cr=&as_qdr=all&as_sitesearch=http%3A%2F%2Fbbs.mjtd.com

hao3ren 发表于 2012-6-21 19:01:06

(command"pline")(getvar"cmdactive")

changyiran 发表于 2012-6-22 07:19:34

caoyin 发表于 2012-6-21 18:58命令行输入当然返回1,cmdactive本身既是系统变量,也是命令

那为什么在执行过程中它的值会变为0呢,导致多段线都画不了,请教版主!

byghbcx 发表于 2012-6-22 09:48:08

(command"pline")(while(>(getvar"cmdactive")0)(command pause)),可以达到你的效果。不妨把你的程序贴上来看看

changyiran 发表于 2012-8-28 17:57:26

本帖最后由 changyiran 于 2012-8-28 18:05 编辑

byghbcx 发表于 2012-6-22 09:48 http://bbs.mjtd.com/static/image/common/back.gif
(command"pline")(while(>(getvar"cmdactive")0)(command pause)),可以达到你的效果。不妨把你的程序贴上来 ...

不好意思,前段时间太忙了,没时间上网,这是源码
(defun fjdb(en / x);返回轻量多段线的点表
(vl-remove-if'not
   (mapcar'(lambda(x)(if(=(car x)10)(cdr x)))(entget en));mapcar返回的是一个表,lambda构造一个匿名函数
)   
)
(defun gzxdb(dyzb dezb ddxdb / DED DYD DYDWZB GZDB);将指定两坐标间的点位坐标构造成一个新表(适用于顺时针多段线)
(if(<(vl-position dyzb dydwzb)(vl-position dezb dydwzb))
   (setq gzdb(reverse(member dezb(reverse(member dyzb ddxdb)))))
   (progn
       (setq dyd(member dyzb ddxdb));构造新表第一段
       (setq ded(reverse(member dezb(reverse ddxdb))));构造新表第二段
       (setq gzdb(append dyd ded))
   )
)
)
(defun c:cjx(/ CHBFZB DEDWZB DYDWZB EL EN1 EN2 EN3 PAUSE SZB WZB X);可将一多段线与另一多段线的目标重合部分完全重合(适用于顺时针多段线)
(setvar "osmode"1)
(setq en1(car(entsel"\请选择有重合部分的多段线")))
(command"pline")
(while(>(getvar"cmdactive")0)(command pause))
(setvar "osmode"0)
(setq en2(entlast))
(setq dedwzb(fjdb en2));建立第二个多段线拐点坐标表
(setq szb(car dedwzb)wzb(last dedwzb));获得首坐标、尾坐标
(setq dydwzb(fjdb en1));建立第一个多段线拐点坐标表
(setq chbfzb(gzxdb szb wzb dydwzb));重合部分坐标
(setq chbfzb(mapcar'(lambda(x)(cons 10 x))chbfzb)); 组码10
(setq el(append'((0 . "lwpolyline")(100 . "AcDbEntity")(100 . "AcDbPolyline"))(list(cons 90(length chbfzb)))chbfzb))
(entmake el)
(setq en3(entlast))
(command"POLYJOIN"en2 en3"")
(setvar "osmode"1)
(princ)
)

changyiran 发表于 2012-8-28 17:59:21

byghbcx 发表于 2012-6-22 09:48 static/image/common/back.gif
(command"pline")(while(>(getvar"cmdactive")0)(command pause)),可以达到你的效果。不妨把你的程序贴上来 ...

那是源码,为什么不能交互画pl线呢?

changyiran 发表于 2012-8-28 18:08:00

byghbcx 发表于 2012-6-22 09:48 static/image/common/back.gif
(command"pline")(while(>(getvar"cmdactive")0)(command pause)),可以达到你的效果。不妨把你的程序贴上来 ...

while第一次循环时(getvar"cmdactive")的值是1,第二次循环前变成了0,导致不能再进行以下循环,不知道是不是因为这个原因,但是若是就是因为这个原因的话该怎么修改源码好呢?

smartstar 发表于 2012-8-28 18:15:28

我是来学习的。
页: [1] 2
查看完整版本: 关于cmdactive的奇怪现象