cad.net 外部参照功能
标签:return status cad block switch lock var resid iso
啥也不说,放代码
namespace JoinBox
{
public enum XrefEnum
{
///
/// 卸载
///
UnloadXrefs,
///
/// 重载
///
ReloadXrefs,
///
/// 拆离
///
DetachXref,
///
/// 绑定
///
BindXrefs,
}
public static class XrefTool
{
///
/// 修改外部参照
///
/// 数据库
/// 设置的枚举状态
/// 要处理的参照名称,null就处理所有的参照
public static void SetXref(this Database db, XrefEnum xe, IEnumerablestring> names = null)
{
db.ResolveXrefs(false, true);//解析外部参照(使用线性引擎,只做新的)
var ids = new ObjectIdCollection();
var xg = db.GetHostDwgXrefGraph(true);//神马是僵尸参照
for (int i = 0; i )
{
var xNode = xg.GetXrefNode(i) as XrefGraphNode;
// if (xNode.XrefStatus != XrefStatus.Resolved) //状态判断
if (xNode.BlockTableRecordId.IsOk())
{
if (names != null)
{
foreach (var item in names)
{
//只加入名称相同的
if (item.ToUpper() == xNode.Name.ToUpper())
{
ids.Add(xNode.BlockTableRecordId);
}
}
}
else
{
//每个都加入
ids.Add(xNode.BlockTableRecordId);
}
}
}
// btRec.IsFromOverlayReference //是覆盖?
// XrefStatus 外部参照状态
// GetXrefDatabase 外部参照数据库
if (ids.Count == 0)
{
return;
}
switch (xe)
{
case XrefEnum.BindXrefs://绑定后会自动拆离
{
db.BindXrefs(ids, true);
}
break;
case XrefEnum.DetachXref: //拆离
{
foreach (ObjectId item in ids)
{
db.DetachXref(item);
}
}
break;
case XrefEnum.UnloadXrefs://卸载
{
db.UnloadXrefs(ids);
}
break;
case XrefEnum.ReloadXrefs://重载
{
db.ReloadXrefs(ids);
}
break;
}
}
}
}
///
/// id有效,未被删除
///
///
///
public static bool IsOk(this ObjectId id)
{
return !id.IsNull && id.IsValid && !id.IsErased && !id.IsEffectivelyErased && id.IsResident;
}
cad.net 外部参照功能
标签:return status cad block switch lock var resid iso
原文地址:https://www.cnblogs.com/JJBox/p/12407217.html
评论