找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1817|回复: 12

[求助] 如何监视CAD当前选择的实体。

[复制链接]
发表于 2014-9-27 10:13:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
用LISP 能否监视CAD当前选择的实体。像CAD的属性对话框一样。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2014-9-27 10:23:48 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-9-27 10:24 编辑

监视用来干什么呢?
(if (not (setq ss (ssget "P")))
  (setq ss (ssget))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-27 12:49:17 | 显示全部楼层
编了一个可停靠对话框,像属性对话框。没有实体选中时,显示“无选择”,如果选中后,则显示选中实体的某些属性(主要是扩展属性)。选择的实体换了,对话框内容随时更新。所以要监视CAD选中的实体。
我认为CAD应该有一个选择集存放当时选中的实体,当调用(ssget "p")时,它便把这个选择集中的内容调出来。只是不知如何监视这个选择集。

点评

用 OPENDCL 做的可停靠对话框吗? 如何可能,希望把你这个功能的主要代码贴上了和大家分享,谢谢!  详情 回复 发表于 2014-9-27 16:26
VBA 中有这个事件方法,vlr- 没有 Private Sub AcadDocument_SelectionChanged() ' This example intercepts a drawing SelectionChanged event. ' ' This event is triggered when the current s  详情 回复 发表于 2014-9-27 13:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-27 13:02:54 | 显示全部楼层
zhaowchang 发表于 2014-9-27 12:49
编了一个可停靠对话框,像属性对话框。没有实体选中时,显示“无选择”,如果选中后,则显示选中实体的某些 ...

VBA   中有这个事件方法,vlr- 没有
Private Sub AcadDocument_SelectionChanged()
    ' This example intercepts a drawing SelectionChanged event.
    '
    ' This event is triggered when the current selection set in a drawing is modified.
    '
    ' To trigger this example event: Select or deselect objects in any open drawing

    MsgBox "The selection set in a drawing was just changed!"
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-27 14:12:54 | 显示全部楼层
测试 PickFirst 事件

Private Sub AcadDocument_SelectionChanged()

    Dim pfSS As AcadSelectionSet
    Set pfSS = ThisDrawing.PickfirstSelectionSet
    If pfSS.Count > 0 Then
    MsgBox "夹选了 " & pfSS.Count & " 个实体"
    End If
   
End Sub

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-27 16:15:23 | 显示全部楼层
本帖最后由 zhaowchang 于 2014-9-27 16:17 编辑

非常感谢free_lancer的帮助。我的问题已经解决,既然监视就要建立反应器,通过建立反应器解决。

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-27 16:26:05 | 显示全部楼层
zhaowchang 发表于 2014-9-27 12:49
编了一个可停靠对话框,像属性对话框。没有实体选中时,显示“无选择”,如果选中后,则显示选中实体的某些 ...

用 OPENDCL 做的可停靠对话框吗? 如何可能,希望把你这个功能的主要代码贴上了和大家分享,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-27 17:15:35 | 显示全部楼层
本帖最后由 zhaowchang 于 2014-9-27 17:19 编辑

opendcl 本身就有做可停靠对话框的功能。添加对话框直接添加可停靠对话框即可。现在仅有雏形,等整好后再发布。

点评

看的不仔细, vlr 有这个反应器  详情 回复 发表于 2014-9-27 20:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-27 20:35:43 | 显示全部楼层
zhaowchang 发表于 2014-9-27 17:15
opendcl 本身就有做可停靠对话框的功能。添加对话框直接添加可停靠对话框即可。现在仅有雏形,等整好后再发 ...

看的不仔细, vlr 有这个反应器
  1. (vlr-miscellaneous-reactor
  2.   nil
  3.   '((:vlr-pickfirstModified . pkcallback))
  4. )
  5. (defun pkcallback (var1 var2 /)
  6.   (princ "\nNumber of PickfirstSelections = ")
  7.   (princ (vla-get-count
  8.            (vla-get-pickfirstselectionset
  9.              (vla-get-activedocument (vlax-get-acad-object))
  10.            )
  11.          )
  12.   )
  13.   (princ)
  14. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-27 22:05:36 | 显示全部楼层
我用的ssget "i"
  1. (vl-load-com)
  2. (princ "\n*= ADD_MON: 添加监视;   MOVE_MON:去除监视      =*")
  3. (DEFUN sel_change(calling-reactor commandInfo / );sel i stgs dwdxf bmdxf )
  4.         (setq SEL (ssget "i"))
  5.         (if sel
  6.                 (PRINC (strcat "\n您选择了:" (itoa (SSLENGTH SEL)) "个实体。"))
  7.                 (PRINC (strcat "\n您选择了:0个实体。"))
  8.         )
  9. )

  10. (defun c:move_mon()
  11.         (vlr-remove sel_reactor)
  12. )
  13. (defun c:add_mon()
  14.         (sel_change nil nil)
  15.         (setq sel_reactor (vlr-miscellaneous-reactor (ssget "i") '((:vlr-pickfirstModified . sel_change))))
  16. )

点评

pickfirsetselection 是根据夹选自动更新的,不需要再选择  详情 回复 发表于 2014-9-27 22:20
你可以不用 (ssget "i")啊, 只要用户鼠标点中实体,夹点显示出来就激活反应器。  详情 回复 发表于 2014-9-27 22:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-9-27 22:17:00 | 显示全部楼层

你可以不用 (ssget "i")啊, 只要用户鼠标点中实体,夹点显示出来就激活反应器。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-9-27 22:20:31 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-9-27 22:22 编辑

pickfirsetselection 是根据夹选自动更新的,不需要再选择

ActiveX  自动维护两个选择集,还有一个是 CURRENT

点评

不知这个CURRENT 如何使用?请大师赐教。  详情 回复 发表于 2014-9-28 21:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-28 21:36:43 | 显示全部楼层
Free-Lancer 发表于 2014-9-27 22:20
pickfirsetselection 是根据夹选自动更新的,不需要再选择

ActiveX  自动维护两个选择集,还有一个是  ...

不知这个CURRENT 如何使用?请大师赐教。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-24 18:22 , Processed in 0.275888 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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