如何移动圆后,该圆变为蓝色
我有好多圆要移动,为了便于区分哪些移动了,哪些没移动,我就想让那些已经移动了的变为蓝色,因此我用了对象反应器中的对象已修改事件,但是在程序运行时提示“错误:对象正在通知”,我想应该是对象变为蓝色也是已修改事件,因此就造成了死循环,希望哪位高手帮忙解决这个问题!(defun c:yqfyq()(setq ss(ssget'((0 . "circle")))j -1 dxb'())
(repeat(sslength ss)
(setq vla(vlax-ename->vla-object(ssname ss(setq j(1+ j)))))
(setq dxb(cons vla dxb))
)
(vlr-pers(VLR-Object-Reactor dxb nil'((:VLR-modified . yqbs))))
)
(defun yqbs(not-o rea-o para)
(vla-put-color not-o 5)
) 你是要这样的程序吗? 记得坛子里有类似的帖子,可以搜索下 帮你搜索了下,不知道这个帖子是否对楼主有用:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=92263;
还有这个:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=68745 ymcui 发表于 2013-7-9 17:21你是要这样的程序吗?
手机上的没法看啊! ymcui 发表于 2013-7-9 17:21 static/image/common/back.gif
你是要这样的程序吗?
这有点复杂了啊,我的意思就是移动指定的一个圆后,该圆就改变颜色,但是改变颜色会诱导已修改事件,比较郁闷,不知怎么解决。 手机大巴上,不好查。我猜是VLA—put—coLor zyhandw 发表于 2013-7-9 17:31 static/image/common/back.gif
帮你搜索了下,不知道这个帖子是否对楼主有用:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=92263; ...
老兄,那俩帖子感觉用不上啊,你能给个思路不? changyiran 发表于 2013-7-9 17:38 static/image/common/back.gif
老兄,那俩帖子感觉用不上啊,你能给个思路不?
再看看这个帖子,好多高手给出了自己的解决方法,应该有适合你的!
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=92227 本帖最后由 Gu_xl 于 2013-7-9 19:14 编辑
;;命令反应器(or *cmdvlr*
(setq *cmdvlr* (vlr-command-reactor nil '((:vlr-commandWillStart . cmdstart) (:VLR-commandEnded . cmdEnd))))
)
;;数据库反应器
(or *acdbvlr*
(setq *acdbvlr* (vlr-acdb-reactor nil
'((:VLR-objectModified . acdbstart))))
)
;;命令开始反应器回调函数
(defun cmdstart (vlr lst)
(if (= "MOVE" (car lst))
(setq *Move_Start* t ;_ 设置Move命令标志
*Move_Obj* nil ;_ 清空Move的对象图元名列表
)
)
)
;;命令结束反应器回调函数
(defun cmdEnd (vlr lst)
(if (= "MOVE" (car lst))
(progn
(setq *Move_Start* nil) ;_ 清除启动Move命令标志
;;此处可自行添加对 *Move_Obj* 处理的代码,如将夹点拖拽物体颜色变红
(mapcar
'(lambda (x / o)
(if
(= "AcDbCircle"
(vla-get-objectname (setq o (vlax-ename->vla-object x)))
)
(vla-put-color o 5)
)
)
*Move_Obj*
)
)
)
)
;;数据库反应器回调函数
(defun acdbstart (vlr obj)
(if *Move_Start*
(setq *Move_Obj*
(append *Move_Obj* (cdr obj)) ;_ Move的对象图元名列表
)
)
)
页:
[1]
2