muzilier 发表于 2023-2-8 15:31:47

请教 如何用Pycad提取一个已经设置好的 属性块

请请教,我在dwg文件内已经设置好一个 属性块,如何用Pycad代码来提取属性块,并赋予相应的属性参数呢?有大神能给我简单的代码案例吗?谢谢

我自己提取的属性块,没有属性值,不知道怎么赋予进去参数值。

muzilier 发表于 2023-2-8 18:56:03

我暂时写的代码如下,里面关于 属性的赋予,我有点迷糊,还请各路大神,指导一二。

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

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

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

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

      for i in range(len(archer_list)):
            bref = acdb.BlockReference(acge.Point3d.Origin, block_cp)# position, bt
            print(u"插入块: " + str(bref.Name))
            btr = tr.opencurrspace()
            tr.addentity(btr, bref)

            """
            # 此处 不知道如何 将之前的属性 赋予到这个 新的块中!!!!
            """
            if flag_block_has_attritube:
                block_Attritube = bref.AttributeCollection


            bref.Position = acge.Point3d(archer_list)

376394482 发表于 2023-2-9 15:07:49

学习学习         .

d1742647821 发表于 2023-2-9 18:15:36

python就别指望能找到教程了

d1742647821 发表于 2023-2-9 18:17:51

已我用ifox的经验,有一个insertblock函数,可以通过字典在插入的时候直接设置属性值

muzilier 发表于 2023-2-9 20:17:41

d1742647821 发表于 2023-2-9 18:15
python就别指望能找到教程了

所以发出来,看看有没有有兴趣的人 交流交流。

超超超人1670 发表于 2023-2-10 16:32:22

pycad不知道,pywin32可以用 GetAttributes() 方法获取属性   然后修改TextString的值,

枫叶棋语 发表于 2023-2-12 12:12:38

属性块动态块操作,读取Excel - AutoCAD.net/VB.net/C# 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz!
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=187136&highlight=pycad

muzilier 发表于 2023-2-12 15:57:01

枫叶棋语 发表于 2023-2-12 12:12
属性块动态块操作,读取Excel - AutoCAD.net/VB.net/C# 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered...

非常感谢分享的示例
页: [1]
查看完整版本: 请教 如何用Pycad提取一个已经设置好的 属性块