如何添加 实体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中呢?请各位大哥多指点,急啊!!
注意:
1、SelectionAddedEventArgs参数中SelectionSet(最终选择集)和AddedObjects(当前选择的部分)都是选择集,你的任务就是对AddedObjects进行操作,加入到SelectionSet是Cad自己的事,不需要你操心
2、e.Remove(index),这个要注意,一边遍历一边删除index会变的
3、选择集是selectedobject的集合,而不仅仅包含id! 我的想法,不知是否能够实现,是个新手,只是个想法!请飞狐老师不要笑我。
想法是: 使用AUTOCAD的命令(注意不是我定义的命令),在命令开始前的 选择实体阶段,加入我想要加入的实体,这样就可以实现,“我的实体” 与 AutoCAD操作人”在屏幕上选定的实体“在以后一同执行AutoCAD操作人指定的”AUTOCAD的命令“。
不知是否可行?
请飞狐老师明示,解惑!!
谢谢!
使用 e.AddedObjects.FromObjectIds() 未能成功!
但 程序有迹象表明,已经被第二次执行了SelectionAdded事件,可是查询Object数量没有变化,
并且 我添加的实体也并没有被执行”AUTOCAD命令“ 试下selectionset.fromobjectids获取选集 用了!selectionset.fromobjectids
selectionset.fromobjectids 与e.AddedObjects.FromObjectIds() 是一样的!
用e.AddedObjects.FromObjectIds() 时系统要求改为selectionset.fromobjectids
奇怪的是,明明有了 加入我的ID 的SelectionAdded事件(我在该事件中写了MSGBOX 用来显示SelectionAdded执行时对象的ID),为什么在后面的”AUTOCAD命令“中却不被一同执行呢?
请大师写个例子如何?!
谢谢!! 上一选集 上一选集 ? 不明白! 能否详解!
请不吝赐教!
谢谢! ssget p 本帖最后由 雪山飞狐_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