关于cmdactive的奇怪现象
我在命令栏里输入cmdactive查询得到的值是1,但是用getvar得到的居然是0。我原本在程序里是想让用户根据需要自己画一个多段线,代码如下:(command"pline")(while(>(getvar"cmdactive")0)(command pause))但因为得到的是0以至于程序直接执行了后面的程序,并没有实现让用户根据需要自己画线的效果,所以望各位高手指导下! 命令行输入当然返回1,cmdactive本身既是系统变量,也是命令 未审何因?参考先
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 (command"pline")(getvar"cmdactive") caoyin 发表于 2012-6-21 18:58命令行输入当然返回1,cmdactive本身既是系统变量,也是命令
那为什么在执行过程中它的值会变为0呢,导致多段线都画不了,请教版主! (command"pline")(while(>(getvar"cmdactive")0)(command pause)),可以达到你的效果。不妨把你的程序贴上来看看 本帖最后由 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)
) byghbcx 发表于 2012-6-22 09:48 static/image/common/back.gif
(command"pline")(while(>(getvar"cmdactive")0)(command pause)),可以达到你的效果。不妨把你的程序贴上来 ...
那是源码,为什么不能交互画pl线呢? byghbcx 发表于 2012-6-22 09:48 static/image/common/back.gif
(command"pline")(while(>(getvar"cmdactive")0)(command pause)),可以达到你的效果。不妨把你的程序贴上来 ...
while第一次循环时(getvar"cmdactive")的值是1,第二次循环前变成了0,导致不能再进行以下循环,不知道是不是因为这个原因,但是若是就是因为这个原因的话该怎么修改源码好呢? 我是来学习的。
页:
[1]
2