LISP增加唯一属性
大家好!作为我的第一篇帖子,我将发表一篇文章。我搜索了又搜索,但找不到有助于解决问题的lisp或信息。也许我可以在这里找到一些帮助——即使我已经变灰了,我仍然会很感激。
那么,我们开始吧。。。
我将属性块插入到我的图纸中,列出零件号、型号等。除了这些属性外,还有另一个标记,它是一个递增的数字(在我们的物料清单中使用)。如果有两个相同的部件(即相同的型号),则增量数量需要相同;如果零件不同,则需要使用下一个序列号。
手工操作不仅耗时,而且往往非常错误。所以我想做一个lisp例程,我可以运行它来自动为这些块编号。我想我可以插入我的块(或重复使用它们、复制等),而不用太担心数字标记,然后在最后运行lisp,为每个唯一的块提供数字。如果已经存在的数字能够保持不变(我们一直在重复使用图形),那就太好了。
块:
博姆塔格
标签:
项目(增量编号)
型号(型号)
零件(零件号)
我一点都不懂Lisp程序,所以我不知道我自己能做到,但也许朝着正确的方向轻推一下可以让我不浪费很多时间。有什么想法吗?
列一个区块列表,对其进行处理,给出if-then语句,必要时重新编号,移动到下一个区块。易于输入,难以编程。免费渲染给任何获得获奖代码的人。
非常感谢,非常感谢您的帮助。
-斯图 欢迎来到论坛stu
您所要求的听起来很容易编码,您希望它仅适用于BOMTAG块吗?
项目是块的第一个属性吗?
是否通过复制和粘贴导入块?
这意味着型号alrady有一个值,或者
为模型标记插入具有常量属性的块? 附着带有示例的dwg文件 谢谢你的回复。
只有BOMTAG?不完全一样,有几乎相同的块称为BOMTAG\u TR、BOMTAG\u T、BOMTAG\u TL、BOMTAG\u L、BOMTAG\u BL、BOMTAG\u B、BOMTAG\u BR、BOMTAG\u R。它们用于从块中引出的引线。如果我有选择的话,我不会那样做。
是的,项是第一个属性,它们通常已经从另一个作业中存在(我们从另一个作业复制绘图并重新使用)。我们将只在图形中复制,因此所有标记通常都是填充的(一些标记将永远保持为空,因为没有确切的型号),并且没有恒定的字段。
再次感谢! 那么它的复制和粘贴?或通过“插入”从另一个图形导入? 有时用图片会比文字清晰得多,所以如果你上传一张图片,展示前后会受到大家的高度赞赏。 你好,stusic,
首先,欢迎来到CADTutor
如果我理解正确(并使用了您描述的正确属性标记),请尝试以下操作:
;; Dependent Attribute Numbering-Lee Mac-2011-www.lee-mac.com
;; Assigns a number to a specific attribute whose 'dependent' attribute is
;; the same for all attributes with the same number.
(defun c:AttNum ( / att blk dep inc itm lst num obj sel tmp val )
(setq blk "BOMTAG" ;; Block Name
num "ITEM" ;; Numbering Tag
dep "MODEL";; Numbering Dependent Tag
)
(mapcar 'set '(blk num dep) (mapcar 'strcase (list blk num dep)))
(if
(setq sel
(ssget "_X"
(list
'(0 . "INSERT")
'(66 . 1)
(cons 2 (strcat "`*U*," blk))
(cons 410 (getvar 'CTAB))
)
)
)
(progn
(repeat (setq inc (sslength sel))
(setq obj (vlax-ename->vla-object (ssname sel (setq inc (1- inc)))))
(if
(or
(null (vlax-property-available-p obj 'effectivename))
(eq blk (strcase (vla-get-effectivename obj)))
)
(progn
(setq tmp
(mapcar
(function
(lambda ( att )
(cons (strcase (vla-get-tagstring att)) att)
)
)
(vlax-invoke obj 'getattributes)
)
)
(if
(and
(setq val (cdr (assoc dep tmp)))
(setq val (vla-get-textstring val))
(setq att (cdr (assoc num tmp)))
)
(if (setq itm (assoc val lst))
(setq lst (subst (vl-list* val att (cdr itm)) itm lst))
(setq lst (cons(list val att) lst))
)
)
)
)
)
(setq inc 1)
(foreach grp (vl-sort lst (function (lambda ( a b ) (< (car a) (car b)))))
(foreach att (cdr grp)
(vla-put-textstring att (itoa inc))
)
(setq inc (1+ inc))
)
)
(princ (strcat "\nNo " blk " blocks found in this layout."))
)
(princ)
)
(vl-load-com) (princ)
如果是剪切粘贴。但一次只能处理一个街区 附件是一幅典型绘画的绝佳范例。注释气泡(1、2、5、8和30)是包含需要更改的信息的块(BOM块与这种情况完全相同,只是块名称不同,因为这是上载的图形,我将使用这些块作为示例)。1和2是不同的零件/型号(隐藏属性),因此它们在注释编号中需要不同的编号。除了顺序错误外,编号为8的两个气泡都是正确的,因为它们具有相同的零件/型号。但是,5和30不正确,因为它们的编号不同,但零件/型号相同。lisp应该保留1、2和8,并将5和30更改为相同的数字,最好是3(如果不使用)。
我们将按原样使用这幅画。由于需要新的标记,我们将复制一个旧的标记(1、2、5、8或30)并修改属性。复制,是的,但仅限于Autocad内部。
我真的很感谢你们的帮助!
块标记示例。图纸 你试过我的密码吗? 我想让标签8有不同的零件号,但相同的标签(项目)号。
页:
[1]
2