sfzyr 发表于 2021-9-24 23:02:33

块零件参照的数据如何lisp读取,重新修改写入

本帖最后由 sfzyr 于 2021-9-26 00:46 编辑

创建块零件参照的步骤 (AutoCAD Mechanical)


块零件参照是放置在块参照上以将其标记为零件的一种特殊零件参照。
[*]单击“注释”选项卡 https://help.autodesk.com/cloudhelp/2017/CHS/AutoCAD-Mechanical/images/ac.menuaro.gif“BOM 表”面板 https://help.autodesk.com/cloudhelp/2017/CHS/AutoCAD-Mechanical/images/ac.menuaro.gif“零件参照”下拉列表 https://help.autodesk.com/cloudhelp/2017/CHS/AutoCAD-Mechanical/images/ac.menuaro.gif“块”。 https://help.autodesk.com/cloudhelp/2017/CHS/AutoCAD-Mechanical/images/GUID-980AB085-469B-4051-8D2B-60884AB65176.png
[*]在绘图区域中,选择要创建零件参照的块。
[*]在“零件参照”对话框中,输入要存储到 BOM 表中的数据。
[*]单击“确定”。
============================================
以上,请问各位高手,这个创建的“块零件参照”,附着在块上,不可见,无法选择,
如何才能LISP取出相关值,并修改,存储相关值,还可以增加新的数组值
;;;=====================================见下图,零件参照可以取数据,但是块零件参照存到哪里了。无法获取相关数据。


wzg356 发表于 2021-9-25 17:26:19

你这个问法,别人读取来费劲

上图----表明意图----已有成果-----然后才是问题:卡在哪儿

sfzyr 发表于 2021-9-26 00:51:07

wzg356 发表于 2021-9-25 17:26
你这个问法,别人读取来费劲

上图----表明意图----已有成果-----然后才是问题:卡在哪儿

感谢你的回复,目前无法获得这个零件参照的数据,无法修改和写入。
这个“块零件参照”还不显示,只有在输入“AMPARTREFEDIT”命令时才显示出可选的状态,而且这个块零件参照可以和块一起拷贝,拷贝到别的DWG文件中都可以。可以很好的传递数据。
我需要寻找到这个数据,并修改,增加它。

sfzyr 发表于 2021-9-26 00:55:05

本帖最后由 sfzyr 于 2021-9-29 22:26 编辑

(if (setq ss (ssget "x" '((0 . "ACMPARTREF"))))
(progn
    (setq i -1
      ent_list '()
    )
    (repeat (sslength ss)
      (setq ent_list (cons (ssname ss (setq i (1+ i))) ent_list))
    )
    (setq datas
       (mapcar
         '(lambda (x)
      (vlax-safearray->list
          (vlax-variant-value
            (vlax-get-property (vlax-ename->vla-object x) 'Data)
          )
      )
          )
         ent_list
       )
    )
)
)
以上可以获得“零件参照”的数据,但是并不能得到“块零件参照”的数据。
以下可以建立一个二维数组,并赋值,增加到相关的零件参照特性中。(setq point (vlax-make-safearray vlax-vbString '(0 . 1) '(0 . 1)))
(vlax-make-variant point)
(vlax-safearray-put-element point 0 0 "DESCR")
(vlax-safearray-put-element point 0 1 “aa”)
(vlax-safearray-put-element point 1 0 "MATERIAL")
(vlax-safearray-put-element point 1 1 "Q235")
(vlax-put-property (vlax-ename->vla-object (car (entsel))) 'Data point)参照我这个帖子中我的回复关于 Autodesk Mechanical 零件参照属性的 Lisp 写入 http://bbs.mjtd.com/forum.php?mod=viewthread&tid=108147&highlight=%C1%E3%BC%FE%B2%CE%D5%D5

wzg356 发表于 2021-9-26 08:55:05

本帖最后由 wzg356 于 2021-9-26 08:56 编辑

函数:VxSetAtts
功能:设置块中属性
;属性大小写要一致
函数代码:
(defun VxSetAtts (Obj Lst / AttVal)
(mapcar
    '(lambda (Att)
       (if (setq AttVal (cdr (assoc (vla-get-TagString Att) Lst)))
(vla-put-TextString Att AttVal)
       )
   )
    (vlax-invoke Obj "GetAttributes")
)
(vla-update Obj)
(princ)
)
语法:(VxSetAtts Obj Lst)
参数: Obj = Object
    Lst = 点表 '(("Tag1" . "Val1")...)
返回值:nil

(VxSetAtts(vlax-ename->vla-object (car (entsel))) '(("Z" . "Val1")("Y" . "Val1") ("X" . "Val1")))

wzg356 发表于 2021-9-26 08:55:30

函数:VxGetAtts
功能:获取块中所有属性
函数代码:
(defun VxGetAtts (Obj)
(mapcar
    '(lambda (Att)
       (cons
          ;(list
             (vla-get-TagString Att)
             (vla-get-TextString Att)
       )
   )
    (vlax-invoke Obj "GetAttributes")
)
)
语法:(VxGetAtts Obj)
参数:Obj = Object
返回值:表

示例:(VxGetAtts(vlax-ename->vla-object (car (entsel))))

sfzyr 发表于 2021-9-26 10:03:18

wzg356 发表于 2021-9-26 08:55
函数:VxGetAtts
功能:获取块中所有属性
函数代码:


块是定义的属性和这个这个块零件参照的特性不一样的,这是机械板CAD中有的,为后期自动明细表,零件引线作准备的。

sfzyr 发表于 2021-9-27 22:57:02

难道就没有人研究这个零件参照,和块零件参照,他们的区别,以及他们如何用lisp函数来操作相关数据。

sfzyr 发表于 2021-9-29 22:28:35

注意数组赋值要完整且与零件特性中的值对应上,现在我的问题是,那个“块零件参照”,我无法获取他的对象,这样我无法对他进行操作。有机械版CAD的,可以试一下。

sfzyr 发表于 2021-10-5 03:07:22

这个我遍历词典,找到了。但是从选择对象中去找关联确找不到。疑问:
1)选择ampartrefedit 零件参照编辑,此时可以显示块零件参照的符号(一个圈带个叉),但是这个选择的对象在关闭时自动删除消失。同时此对象不是零件参照对象。
2)这个块零件参照,会附着到块,其零件特性修改与块关联(不同于块属性,块属性可以附不同的值),修改后,所有的块零件参照都会修改。但是这个块零件参照,在非机械版CAD保存时会丢失。
3)这个块零件参照,其数据存储在词典中,遍历可以看到。也可以通过修改词典进行修改。
4)这个词典是如何与块参照进行关联的?
5)用自定义的词典,可以在非机械版CAD中达到同样的效果吗?
求助给为高手,给与回复,各位版主进行帮助,别沉底了,纠结BOM表自动创建和更新很久了。这个机械版又不通用,要是用自定义词典实现一样绑定的效果,一样的零件工作流,就好了。
页: [1]
查看完整版本: 块零件参照的数据如何lisp读取,重新修改写入