slw7310 发表于 2015-3-29 07:34:38

如何添加 实体ID?

以下是一段在选择阶段对实体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中呢?请各位大哥多指点,急啊!!

雪山飞狐_lzh 发表于 2015-3-29 09:25:34

注意:
1、SelectionAddedEventArgs参数中SelectionSet(最终选择集)和AddedObjects(当前选择的部分)都是选择集,你的任务就是对AddedObjects进行操作,加入到SelectionSet是Cad自己的事,不需要你操心
2、e.Remove(index),这个要注意,一边遍历一边删除index会变的
3、选择集是selectedobject的集合,而不仅仅包含id!

slw7310 发表于 2015-3-30 12:34:03

我的想法,不知是否能够实现,是个新手,只是个想法!请飞狐老师不要笑我。
想法是: 使用AUTOCAD的命令(注意不是我定义的命令),在命令开始前的 选择实体阶段,加入我想要加入的实体,这样就可以实现,“我的实体” 与 AutoCAD操作人”在屏幕上选定的实体“在以后一同执行AutoCAD操作人指定的”AUTOCAD的命令“。
不知是否可行?
请飞狐老师明示,解惑!!
谢谢!

slw7310 发表于 2015-3-30 12:42:18

使用 e.AddedObjects.FromObjectIds() 未能成功!

但 程序有迹象表明,已经被第二次执行了SelectionAdded事件,可是查询Object数量没有变化,
并且 我添加的实体也并没有被执行”AUTOCAD命令“

雪山飞狐_lzh 发表于 2015-3-30 12:44:24

试下selectionset.fromobjectids获取选集

slw7310 发表于 2015-3-30 12:53:45

用了!selectionset.fromobjectids
selectionset.fromobjectids 与e.AddedObjects.FromObjectIds() 是一样的!
用e.AddedObjects.FromObjectIds() 时系统要求改为selectionset.fromobjectids

奇怪的是,明明有了 加入我的ID 的SelectionAdded事件(我在该事件中写了MSGBOX 用来显示SelectionAdded执行时对象的ID),为什么在后面的”AUTOCAD命令“中却不被一同执行呢?

请大师写个例子如何?!
谢谢!!

ivde 发表于 2015-3-30 13:12:40

上一选集   

slw7310 发表于 2015-3-30 14:09:46

上一选集 ? 不明白! 能否详解!
请不吝赐教!
谢谢!

ivde 发表于 2015-3-30 15:12:35

ssget   p      

雪山飞狐_lzh 发表于 2015-3-30 21:36:10

本帖最后由 雪山飞狐_lzh 于 2015-3-30 21:37 编辑

好像想多了 如果不复杂的话 用组就可以了

我的测试结果。。。总在不停的崩溃

      
      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);
                            }
                        }
                  }
                }
            }
      }
页: [1] 2
查看完整版本: 如何添加 实体ID?