AutoCAD .Net二次开发之Attribute块内属性的修改

1、炸开块,获取块内AttributeDefinition类型对象

DBObjectCollection subObjCol = new DBObjectCollection();
block.Explode(subObjCol);

List<AttributeDefinition> AttriDefList = new List<AttributeDefinition>();

for (int i = 0; i < subObjCol.Count; i++)
{
	DBObject obj = subObjCol[i];

	if (obj is AttributeDefinition == true)
		AttriDefList.Add((AttributeDefinition)obj);
}

此方法无法获得属性的文本数据,你会发现所有炸开后的AttributeDefinition对象文本属性为空。
此方法无法改变原块的属性,Explode接口炸开后输出的对象是一个新的对象

2、通过块参照的AttributeCollection属性访问属性集合

AttributeCollection attriCol = block.AttributeCollection;

不要用for循环来遍历attriCol集合,因为索引器[]输出的类型为ObjectId类型,当block不在模型空间时,得到的ID为空

使用ForEach遍历,当block不在模型空间,元素为AttributeReference类型,当block在模型空间,元素为ObjectId类型

AttributeCollection attriCol = block.AttributeCollection;
foreach(var attri in attriCol)
{
	AttributeReference pAttri = null;

	if (attri is ObjectId)
		pAttri = trans.GetObject((ObjectId)attri, OpenMode.ForWrite) as AttributeReference;
	else if (attri is AttributeReference)
		pAttri = (AttributeReference)attri;

	pAttri.TextString = "hello";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值