明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1208|回复: 14

插入带特殊属性的块的问题

[复制链接]
发表于 2024-8-7 20:17:12 | 显示全部楼层 |阅读模式
本帖最后由 transteel 于 2024-8-8 09:29 编辑

<2024-08-08更新>


我用另一个思路解决了这个难题:


不再使用块属性关联【距离】对象,而是采用变通的方法,也即用一个除了尺寸外关闭其他所有内容的【标注】来代替块【属性】。很巧妙的方法,完全能满足我的要求,并且还收获了意外的优点(显示的悬臂长度是实时刷新的,而不必入之前需要用re命令手动刷新图纸才更新)。


============================

<原问题>

有一个带属性的块,其属性的默认值关联的是某个对象的值,使用下面代码插入时,属性会被改为文本类型,失去和对象的关联。

如下图,第一次插入的块是采用代码插入,关联对象的属性被破坏了;第二次是使用CAD内置命令插入的块,还保留着关联的属性。

不知是否有哪位知道如何解决这个问题。

  1. ' 添加块参照到模型空间或块表记录空间
  2.                         Dim ms As BlockTableRecord = CType(trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite), BlockTableRecord)
  3.                         ms.AppendEntity(blkRef)
  4.                         trans.AddNewlyCreatedDBObject(blkRef, True)
  5. ' 处理块中的属性
  6.                         Dim btr As BlockTableRecord = CType(trans.GetObject(btrId, OpenMode.ForRead), BlockTableRecord)
  7.                         For Each objId As ObjectId In btr
  8.                             Dim obj As DBObject = trans.GetObject(objId, OpenMode.ForRead)
  9.                             If TypeOf obj Is AttributeDefinition Then
  10.                                 Dim attDef As AttributeDefinition = CType(obj, AttributeDefinition)
  11.                                 If Not attDef.Constant Then
  12.                                     ' 创建属性并设置值
  13.                                     Dim attRef As New AttributeReference()
  14.                                     attRef.SetAttributeFromBlock(attDef, blkRef.BlockTransform)
  15.                                     ' 添加属性到块参照
  16.                                     blkRef.AttributeCollection.AppendAttribute(attRef)
  17.                                     trans.AddNewlyCreatedDBObject(attRef, True)
  18.                                 End If
  19.                             End If
  20.                         Next


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2024-8-7 20:19:05 | 显示全部楼层
使用ACAD官方给的.net代码也不能实现。(VBA是可以实现的。)

下面是官方代码:ttps://help.autodesk.com/view/OARX/2023/CHS/?guid=GUID-2107599E-9405-4D8B-A6DD-83D603B41568

  1. For Each objID As ObjectId In acBlkTblRec
  2.     ' 遍历块表记录中的每一个对象ID
  3.     Dim dbObj As DBObject = acTrans.GetObject(objID, OpenMode.ForRead)
  4.     ' 通过事务获取数据库对象(DBObject),以供读取
  5.     If TypeOf dbObj Is AttributeDefinition Then
  6.         ' 如果数据库对象是属性定义(AttributeDefinition)类型
  7.         Dim acAtt As AttributeDefinition = dbObj
  8.         ' 将数据库对象转换为属性定义对象(AttributeDefinition)
  9.         If Not acAtt.Constant Then
  10.             ' 如果属性定义对象不是常量属性
  11.             Using acAttRef As New AttributeReference
  12.                 ' 使用属性引用对象(AttributeReference)
  13.                 acAttRef.SetAttributeFromBlock(acAtt, acBlkRef.BlockTransform)
  14.                 ' 从块中的属性定义设置属性引用对象的属性
  15.                 acAttRef.Position = acAtt.Position.TransformBy(acBlkRef.BlockTransform)
  16.                 ' 根据块的变换设置属性引用对象的位置
  17.                 acAttRef.TextString = acAtt.TextString
  18.                 ' 设置属性引用对象的文本字符串与属性定义相同
  19.                 acBlkRef.AttributeCollection.AppendAttribute(acAttRef)
  20.                 ' 将属性引用对象添加到块引用的属性集合中
  21.                 acTrans.AddNewlyCreatedDBObject(acAttRef, True)
  22.                 ' 将新创建的属性引用对象添加到事务中
  23.             End Using
  24.         End If
  25.     End If
  26. Next

发表于 2024-10-11 20:02:08 | 显示全部楼层
transteel 发表于 2024-10-8 08:17
那个拖动时显示的长度数字并不是刻意“隐藏”的,应该是动态块的“距离”参数,是自动显示的。

尝试了一下,距离参数没有显示。启发了另一种想法,应该是本来标注的文字字高改小隐藏的,显示出来的是动态输入的文字。尝试成功!
发表于 2024-8-7 22:50:25 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2024-10-12 22:52 编辑

看起来就是字段类型的反应器没有附着到块参照上面?

找到了一种方式:通过"块特性表"
https://jingyan.baidu.com/article/d45ad1488521dc28552b80ed.html


二级菜单版本:
https://www.cadzxw.com/44132.html
发表于 2024-8-8 10:31:35 | 显示全部楼层
U1S1拉伸标注确实好用,不是道是不是楼主的那个意思

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-8-8 10:57:31 | 显示全部楼层
tranque 发表于 2024-8-8 10:31
U1S1拉伸标注确实好用,不是道是不是楼主的那个意思

把标注做到动态块挺异端的
发表于 2024-8-8 11:22:10 | 显示全部楼层
你有种再说一遍 发表于 2024-8-8 10:57
把标注做到动态块挺异端的

凑活用了,怎么省事怎么来,反正一个月没多少窝囊费,糊弄完就下班
 楼主| 发表于 2024-8-8 14:57:45 | 显示全部楼层
你有种再说一遍 发表于 2024-8-8 10:57
把标注做到动态块挺异端的

【能用】万岁吧。哈哈哈!
 楼主| 发表于 2024-8-8 15:42:04 | 显示全部楼层
你有种再说一遍 发表于 2024-8-8 10:57
把标注做到动态块挺异端的

原来您是博客园的【惊惊】博主啊,《日志篇 惊惊博客轨迹》我偶尔会打开看看(很久不更新了),没想到在这里遇到了。幸会。
发表于 2024-8-9 09:24:20 | 显示全部楼层
不错,功能大为扩展
发表于 2024-8-12 15:27:18 来自手机 | 显示全部楼层
啥意思,没明白,咋解决的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 05:39 , Processed in 0.176063 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表