乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 134|回复: 9

如何添加 实体ID?

[复制链接]

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2015-3-29 07:34:00 | 显示全部楼层 |阅读模式
以下是一段在选择阶段对实体ID的Remove操作,可以用来增减实体!
  Private Shared AddObjs As SelectedObject
Private Shared Sub M_SelectionAdded(ByVal sender As Object, ByVal e As SelectionAddedEventArgs)’实体被选择时触发
           
                If e.AddedObjects.Count > 0 Then
                    Dim selIds As ObjectId()
                    selIds = Nothing
                    selIds = e.AddedObjects.GetObjectIds()
                  Using tr As Transaction =Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()
                        Dim index As Integer = 0
                        For Each id As ObjectId In selIds
                            If ID Then '###################对ID的条件筛选为 true时
                                e.Remove(index) '###########  是移除
                               ‘问题 -------上面 e.Remove(index)  是从e中减去。如果是增加则是
                                ’ e.Add(AddObjs)  AddObjs必须是SelectedObject
                                ‘ 我如何把实体的ID加入到AddObjs中呢?
                            End If
                            System.Math.Max(System.Threading.Interlocked.Increment(index), index - 1)
                        Next
                    End Using
                End If
           
End Sub
‘ 我如何把实体的ID加入到AddObjs中呢?  请各位大哥多指点,急啊!!
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2015-3-29 09:25:00 | 显示全部楼层
注意:
1、SelectionAddedEventArgs参数中SelectionSet(最终选择集)和AddedObjects(当前选择的部分)都是选择集,你的任务就是对AddedObjects进行操作,加入到SelectionSet是Cad自己的事,不需要你操心
2、e.Remove(index),这个要注意,一边遍历一边删除index会变的
3、选择集是selectedobject的集合,而不仅仅包含id!
回复

使用道具 举报

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2015-3-30 12:34:00 | 显示全部楼层
我的想法,不知是否能够实现,是个新手,只是个想法!请飞狐老师不要笑我。
想法是: 使用AUTOCAD的命令(注意不是我定义的命令),在命令开始前的 选择实体阶段,加入我想要加入的实体,这样就可以实现,“我的实体” 与 AutoCAD操作人”在屏幕上选定的实体“在以后一同执行AutoCAD操作人指定的”AUTOCAD的命令“。
不知是否可行?
请飞狐老师明示,解惑!!
谢谢!
回复

使用道具 举报

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2015-3-30 12:42:00 | 显示全部楼层
使用 e.AddedObjects.FromObjectIds() 未能成功!
但 程序有迹象表明,已经被第二次执行了SelectionAdded事件,可是查询Object数量没有变化,
并且 我添加的实体也并没有被执行”AUTOCAD命令“
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2015-3-30 12:44:00 | 显示全部楼层
试下selectionset.fromobjectids获取选集
回复

使用道具 举报

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2015-3-30 12:53:00 | 显示全部楼层
用了!selectionset.fromobjectids
selectionset.fromobjectids 与  e.AddedObjects.FromObjectIds() 是一样的!
用e.AddedObjects.FromObjectIds() 时系统要求改为selectionset.fromobjectids
奇怪的是,明明有了 加入我的ID 的  SelectionAdded事件(我在该事件中写了MSGBOX 用来显示SelectionAdded执行时对象的ID),为什么在后面的”AUTOCAD命令“中却不被一同执行呢?
请大师写个例子如何?!
谢谢!!
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2015-3-30 13:12:00 | 显示全部楼层
上一选集
回复

使用道具 举报

21

主题

60

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
144
发表于 2015-3-30 14:09:00 | 显示全部楼层
上一选集 ? 不明白! 能否详解!
请不吝赐教!
谢谢!
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2015-3-30 15:12:00 | 显示全部楼层
ssget   p
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2015-3-30 21:36:00 | 显示全部楼层

好像想多了 如果不复杂的话 用组就可以了
我的测试结果。。。总在不停的崩溃
        [CommandMethod("t10")]
        public static void Test10()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            ed.SelectionAdded -= new SelectionAddedEventHandler(ed_SelectionAdded);
            ed.SelectionAdded += new SelectionAddedEventHandler(ed_SelectionAdded);
        }
        static void ed_SelectionAdded(object sender, SelectionAddedEventArgs e)
        {
            if (e.Flags == SelectionFlags.PickfirstSet)
            {
                Editor ed = (Editor)sender;
                Document doc = ed.Document;
                Database db = doc.Database;
                using (var tr = db.TransactionManager.StartTransaction())
                {
                    foreach (SelectedObject selobj in e.AddedObjects)
                    {
                        Line line = tr.GetObject(selobj.ObjectId, OpenMode.ForRead) as Line;
                        if (line != null)
                        {
                            var res = ed.SelectAll(
                                new ResultTree
                                {
                                    {0, "circle"},
                                    new ResultTree("or")
                                    {
                                        {10, line.StartPoint},
                                        {10, line.EndPoint}
                                    }
                                });
                            if (res.Status == PromptStatus.OK)
                            {
                                foreach (SelectedObject obj in res.Value)
                                    e.Add(obj);
                            }
                        }
                    }
                }
            }
        }
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-28 19:02 , Processed in 2.775387 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表