明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 784|回复: 8

[【PyCAD】] 请教 如何用Pycad提取一个已经设置好的 属性块

[复制链接]
发表于 2023-2-8 15:31 | 显示全部楼层 |阅读模式
请请教,我在dwg文件内已经设置好一个 属性块,如何用Pycad代码来提取属性块,并赋予相应的属性参数呢?有大神能给我简单的代码案例吗?谢谢

我自己提取的属性块,没有属性值,不知道怎么赋予进去参数值。
 楼主| 发表于 2023-2-8 18:56 | 显示全部楼层
我暂时写的代码如下,里面关于 属性的赋予,我有点迷糊,还请各路大神,指导一二。

  1. @command()
  2. def cp_block(doc):
  3.    
  4.     """"
  5.     + 获取布置块,并判断块是否是 属性块
  6.     """
  7.     with dbtrans(doc) as tr:
  8.         while True:
  9.             block_entity = edx.entsel(message="\n选择布置块(动态块)。")

  10.             if block_entity.cancel(): return
  11.             elif block_entity.error(): continue
  12.             
  13.             sel_obj = tr.getobject(block_entity.ObjectId)
  14.             if not isinstance(sel_obj, acdb.BlockReference):
  15.                 print('\n选择的物体不是块。')
  16.                 continue
  17.             print("选择的块:%s" % (sel_obj.Name))
  18.             break

  19.         record = sel_obj.ObjectId.GetObject(acdb.OpenMode.ForRead).BlockTableRecord
  20.         flag_block_has_attritube = record.HasAttributeDefinitions   # 判断块是否是有属性块
  21.         # 获取 块 当前的所有属性值
  22.         if flag_block_has_attritube:
  23.             attribute_collection = sel_obj.AttributeCollection

  24.     """
  25.     # 布置块
  26.     # 提取 数据库中的当前选择的块,并赋予属性 和 粘贴到相应的位置
  27.     """
  28.     #  假设布置的点如下
  29.     archer_list = [(0, 0, 0), (100, 100, 0)]
  30.     with dbtrans(doc) as tr:
  31.         sel_block = tr.getobject(block_entity.ObjectId)
  32.         block_cp = tr.addblock(sel_block.Name)

  33.         for i in range(len(archer_list)):
  34.             bref = acdb.BlockReference(acge.Point3d.Origin, block_cp)  # position, bt
  35.             print(u"插入块: " + str(bref.Name))
  36.             btr = tr.opencurrspace()
  37.             tr.addentity(btr, bref)
  38.   
  39.             """
  40.             # 此处 不知道如何 将之前的属性 赋予到这个 新的块中!!!!
  41.             """
  42.             if flag_block_has_attritube:
  43.                 block_Attritube = bref.AttributeCollection


  44.             bref.Position = acge.Point3d(archer_list[i])
复制代码


发表于 2023-2-9 15:07 | 显示全部楼层
学习学习           .
发表于 2023-2-9 18:15 来自手机 | 显示全部楼层
python就别指望能找到教程了
发表于 2023-2-9 18:17 来自手机 | 显示全部楼层
已我用ifox的经验,有一个insertblock函数,可以通过字典在插入的时候直接设置属性值
 楼主| 发表于 2023-2-9 20:17 | 显示全部楼层
d1742647821 发表于 2023-2-9 18:15
python就别指望能找到教程了

所以发出来,看看有没有有兴趣的人 交流交流。
发表于 2023-2-10 16:32 | 显示全部楼层
pycad不知道,pywin32可以用 GetAttributes() 方法获取属性   然后修改TextString的值,
发表于 2023-2-12 12:12 | 显示全部楼层
[PyCad] 属性块动态块操作,读取Excel - AutoCAD.net/VB.net/C# 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz!
http://bbs.mjtd.com/forum.php?mo ... amp;highlight=pycad
 楼主| 发表于 2023-2-12 15:57 | 显示全部楼层
枫叶棋语 发表于 2023-2-12 12:12
属性块动态块操作,读取Excel - AutoCAD.net/VB.net/C# 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered  ...

非常感谢分享的示例
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-1 18:48 , Processed in 0.215225 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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