Conveyor1 发表于 2018-9-24 11:07:46

按其控制柄选择块

早上好,
有人知道如何通过控制柄选择块吗?目前,我有一些代码用于将图形中的动态块属性与excel文件中的属性进行比较。然而,我不得不花很长时间运行代码,因为它循环遍历blocktablerecord中的每一项,以找到需要更改的块
正在寻找更直接的方法,因为我有需要更改的块的块句柄/// //句柄,。
///所需的ObjectId或ObjectId.Null。
公共静态ObjectId GetObjectIDFromHandle(字符串句柄)。
{。
if(handle.Length。
尝试。
{。
//将十六进制字符串转换为64位。
long ln=Convert.ToInt64(句柄,16);。
//现在从长整数创建句柄。
句柄hn=new句柄(ln);。
//并尝试获取句柄的ObjectId。
ObjectId id=Active.Database.GetObjectId(false, hn,0);。
//返回对象ID,如果它存在,ObjectId.Null如果它不存在。
如果(id.IsEffectivelyErased

gile 发表于 2018-9-24 11:32:11

id.IsErased)返回ObjectId.Null;。
返回id;。
}。
捕捉。
{。
返回ObjectId.Null;。
}。
}。
我喜欢Gile的TryGetObjectId方法,但BricsCAD不支持它,太糟糕了,对我来说似乎是一个更好的方法。

Atook 发表于 2018-9-24 12:06:33

@a的,你可以为BricsCAD实现一个TryGetObjectId扩展方法,也可以重载它直接取字符串作为参数静态类扩展。
{。
公共静态bool TryGetObjectId(此数据库db、句柄句柄、out ObjectId id)。
{。
尝试。
{。
id=db.GetObjectId(false,句柄,0);。
返回true;。
}。
捕捉。
{。
id=ObjectId.Null;。
返回false;。
}。
}。


公共静态bool TryGetObjectId(此数据库db,字符串句柄,输出ObjectId id)。
{。
返回db.TryGetObjectId(新句柄(Convert.ToInt64(句柄,16)), out id);。
}。
}。

gile 发表于 2018-9-24 12:29:14

非常感谢吉尔,我喜欢看你如何把事情放在一起!
页: [1]
查看完整版本: 按其控制柄选择块