检查嵌套与否
希望用户选择实体(多段线/直线/圆弧),无论其是否在外部参照中。除了提示输入一个点“near”,然后测试它是否嵌套,如果它返回一个有效的对象ID,我想不出任何其他方法。有更好的方法吗?**** Hidden Message ***** 不确定我是否完全遵循您的要求以及为什么需要提示输入它附近的点,但这里有一个示例,其中命令提示符选择外部参照中的对象,然后打开外部参照并缩放到它。它检查 ObjectId.Database.UnmangedObject 是否与当前 Database.UnmanagedObject 匹配, private static Handle? hnd = null;。
。
public void zoomxref()。
{。
hnd = 空;。
var pneo = new PromptNestedEntityOptions(“\nSelect xref object”);。
var pner = Ed.GetNestedEntity(pneo);。
如果 (pner.状态 != PromptStatus.OK)。
{。
返回;。
}。
。
var id = pner.对象 Id;。
if (id.Database.UnmanagedObject == Db.UnmanagedObject)。
{。
Ed.WriteLine(“Select xref object”);。
返回;。
}。
。
foreach (ObjectId conId in pner.GetContainers())。
{。
if (conId.Database.UnmanagedObject == pner.ObjectId.Database.UnmanagedObject)。
{。
id = conId;。
}。
。
}。
。
using (Transaction trx = Doc.TransactionManager.StartTransaction())。
{。
var ent = id.GetEntity();。
hnd = ent.手柄;。
trx.Commit();。
}。
。
var doc = Application.DocumentManager.Open(pner.ObjectId.Database.Filename, false);。
医生,SendStringToExecute(“zoomxrefobject ”, true, false, false);。
。
}。
。
。
。
public void zoomxrefobject()。
{。
如果 (!hnd.HasValue) 返回;。
var id = Db.GetObjectId(false, (Handle)hnd, 0);。
var ss = SelectionSet.FromObjectIds(new ObjectId[] { id });。
Ed.Command(“_Zoom”, “_Object”, ss, “”);。
}。
。
。
。
谢谢 令人窒息的是……一开始我甚至没有想过尝试……但提示嵌套实体的东西对我的对象有效,它不是外部参照或块XD,我不知道它会是这样的。哈哈哈 Jeff,
您能解释一下为什么要使用数据库的UnmanagedObject属性,而不仅仅是比较数据库吗?是不是更正确? 我试图记住为什么。
我稍后会更深入地研究,看看我为什么这样做。我认为在反射器中查看“==”它有一种严厉的检查方式。
我试图查看reflector中的数据库对象,但找不到==运算符。这次我会更彻底地检查。 它看起来像是从一次性包装机继承了它,并且几乎做了同样的事情?。
公共静态 bool operator ==(DisposableWrapper a, DisposableWrapper b)。
{。
如果 (a == null)。
{。
返回 (b == 空);。
}。
返回 a.等于(b);。
}。
。
。
public override bool Equals(object obj)。
{。
DisposableWrapper wrapper = obj as DisposableWrapper;。
if (wrapper == null)。
{。
返回 false;。
}。
断续器,KeepAlive(this);。
IntPtr unmanagedObject = wrapper,非托管对象;。
返回 (this.m_imp == 非托管对象);。
}。
。
我以为是有原因的,但也许不是。
谢谢。我只是想确保我没有错过任何东西。
Ahhh "== "调用Equals,它接受一个对象,在本例中不会产生太大的差别,但是当比较一堆对象时,转换可能是一个性能问题。
我认为这里有一个线索,Tony指出了这一点。
页:
[1]