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";
}
在C#中利用AutoCAD进行二次开发时,修改属性值通常涉及到使用AutoCAD的对象模型API,例如.NET Interop for Autodesk.AutoCAD.Runtime。首先,你需要获取实例,这通常是通过遍历图层、选择特定名称的或者是从设计环境中直接获取。 下面是一个简单的步骤概述: 1. **加载AutoCAD对象模型**:通过`Document`类打开或创建一个AutoCAD文档。 2. **定位目标**:使用`SelectionSet`对象选择需要修改,或者使用`BlockTableRecord`对象查找指定名称的。 3. **访问属性**:每个都有对应的属性(也称为变量),你可以通过`BlockTableRecord.AttributeDictionary`来访问它们。属性名通常是字符串形式,如"DimA"或"$TEXT"。 4. **修改属性值**:找到想要修改属性后,可以设置其`Value`属性。如果是数值型属性,可以直接赋值;如果是字符串或者其他复杂类型的属性,可能需要使用相应的转换方法。 5. **保存更改**:最后别忘了调用`Document.SaveAs`或`Transaction.Commit`来保存你的修改。 ```csharp using (AcadDocument acadDoc = new AcadDocument()) { // ...其他打开或创建文档的代码... var block = acadDoc.ActiveSpace.GetObject("名称") as BlockTableRecord; if (block != null) { string attrName = "属性名"; object attrValue = "新的值"; // 这里替换为你想设的新值 var attrDict = block.AttributeDictionary; Attribute attr = attrDict[attrName]; if (attr != null) { attr.Value = attrValue; // 设置新值 } acadDoc.Database.Transaction?.Commit(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值