明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2747|回复: 15

[讨论] 如何移动圆后,该圆变为蓝色

[复制链接]
发表于 2013-7-9 16:59:00 | 显示全部楼层 |阅读模式
我有好多圆要移动,为了便于区分哪些移动了,哪些没移动,我就想让那些已经移动了的变为蓝色,因此我用了对象反应器中的对象已修改事件,但是在程序运行时提示“错误:对象正在通知”,我想应该是对象变为蓝色也是已修改事件,因此就造成了死循环,希望哪位高手帮忙解决这个问题!
  1. (defun c:yqfyq()
  2.   (setq ss(ssget'((0 . "circle")))j -1 dxb'())
  3.   (repeat(sslength ss)
  4.     (setq vla(vlax-ename->vla-object(ssname ss(setq j(1+ j)))))
  5.     (setq dxb(cons vla dxb))
  6.   )
  7.   (vlr-pers(VLR-Object-Reactor dxb nil'((:VLR-modified . yqbs))))
  8. )
  9. (defun yqbs(not-o rea-o para)
  10.   (vla-put-color not-o 5)
  11. )
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-7-9 17:21:23 | 显示全部楼层
你是要这样的程序吗?            

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

应该不是楼主要的结果,他就是要区分圆到底被移动过没有  发表于 2013-7-9 17:28
发表于 2013-7-9 17:23:57 | 显示全部楼层
记得坛子里有类似的帖子,可以搜索下
发表于 2013-7-9 17:31:38 | 显示全部楼层
帮你搜索了下,不知道这个帖子是否对楼主有用:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=92263
还有这个:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=68745
 楼主| 发表于 2013-7-9 17:34:00 来自手机 | 显示全部楼层
ymcui 发表于 2013-7-9 17:21  你是要这样的程序吗?

手机上的没法看啊!
 楼主| 发表于 2013-7-9 17:37:19 | 显示全部楼层
ymcui 发表于 2013-7-9 17:21
你是要这样的程序吗?

这有点复杂了啊,我的意思就是移动指定的一个圆后,该圆就改变颜色,但是改变颜色会诱导已修改事件,比较郁闷,不知怎么解决。
发表于 2013-7-9 17:38:38 来自手机 | 显示全部楼层
手机大巴上,不好查。我猜是VLA—put—coLor
 楼主| 发表于 2013-7-9 17:38:44 | 显示全部楼层
zyhandw 发表于 2013-7-9 17:31
帮你搜索了下,不知道这个帖子是否对楼主有用:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=92263; ...

老兄,那俩帖子感觉用不上啊,你能给个思路不?
发表于 2013-7-9 17:43:42 | 显示全部楼层
changyiran 发表于 2013-7-9 17:38
老兄,那俩帖子感觉用不上啊,你能给个思路不?

再看看这个帖子,好多高手给出了自己的解决方法,应该有适合你的!
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=92227
发表于 2013-7-9 19:10:40 | 显示全部楼层
本帖最后由 Gu_xl 于 2013-7-9 19:14 编辑

  1. ;;命令反应器  (or *cmdvlr*
  2.       (setq *cmdvlr* (vlr-command-reactor nil '((:vlr-commandWillStart . cmdstart) (:VLR-commandEnded . cmdEnd))))
  3.       )
  4.   ;;数据库反应器
  5.   (or *acdbvlr*
  6.       (setq *acdbvlr* (vlr-acdb-reactor nil
  7.        '((:VLR-objectModified . acdbstart))))
  8.       )
  9. ;;命令开始反应器回调函数
  10. (defun cmdstart (vlr lst)
  11.   (if (= "MOVE" (car lst))
  12.     (setq *Move_Start* t ;_ 设置Move命令标志
  13.           *Move_Obj* nil ;_ 清空Move的对象图元名列表
  14.           )
  15.     )
  16.   )
  17. ;;命令结束反应器回调函数
  18. (defun cmdEnd (vlr lst)
  19.   (if (= "MOVE" (car lst))
  20.     (progn
  21.       (setq *Move_Start* nil) ;_ 清除启动Move命令标志
  22.       ;;此处可自行添加对 *Move_Obj* 处理的代码,如将夹点拖拽物体颜色变红
  23.       (mapcar
  24.         '(lambda (x / o)
  25.            (if
  26.              (=        "AcDbCircle"
  27.                 (vla-get-objectname (setq o (vlax-ename->vla-object x)))
  28.              )
  29.               (vla-put-color o 5)
  30.            )
  31.          )
  32.         *Move_Obj*
  33.       )
  34.     )
  35.   )
  36. )
  37. ;;数据库反应器回调函数
  38. (defun acdbstart (vlr obj)
  39.   (if *Move_Start*
  40.     (setq *Move_Obj*
  41.            (append *Move_Obj* (cdr obj)) ;_ Move的对象图元名列表
  42.     )
  43.   )
  44. )

评分

参与人数 1明经币 +1 收起 理由
自贡黄明儒 + 1 神马都是浮云

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-21 04:10 , Processed in 0.206226 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表