本帖最后由 transteel 于 2024-8-8 09:29 编辑
<2024-08-08更新>
我用另一个思路解决了这个难题:
不再使用块属性关联【距离】对象,而是采用变通的方法,也即用一个除了尺寸外关闭其他所有内容的【标注】来代替块【属性】。很巧妙的方法,完全能满足我的要求,并且还收获了意外的优点(显示的悬臂长度是实时刷新的,而不必入之前需要用re命令手动刷新图纸才更新)。
============================ <原问题> 有一个带属性的块,其属性的默认值关联的是某个对象的值,使用下面代码插入时,属性会被改为文本类型,失去和对象的关联。 如下图,第一次插入的块是采用代码插入,关联对象的属性被破坏了;第二次是使用CAD内置命令插入的块,还保留着关联的属性。 不知是否有哪位知道如何解决这个问题。 - ' 添加块参照到模型空间或块表记录空间
- Dim ms As BlockTableRecord = CType(trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite), BlockTableRecord)
- ms.AppendEntity(blkRef)
- trans.AddNewlyCreatedDBObject(blkRef, True)
- ' 处理块中的属性
- Dim btr As BlockTableRecord = CType(trans.GetObject(btrId, OpenMode.ForRead), BlockTableRecord)
- For Each objId As ObjectId In btr
- Dim obj As DBObject = trans.GetObject(objId, OpenMode.ForRead)
- If TypeOf obj Is AttributeDefinition Then
- Dim attDef As AttributeDefinition = CType(obj, AttributeDefinition)
- If Not attDef.Constant Then
- ' 创建属性并设置值
- Dim attRef As New AttributeReference()
- attRef.SetAttributeFromBlock(attDef, blkRef.BlockTransform)
- ' 添加属性到块参照
- blkRef.AttributeCollection.AppendAttribute(attRef)
- trans.AddNewlyCreatedDBObject(attRef, True)
- End If
- End If
- Next
|