我想更新一系列图形,将文件名包括在块标记“DWG\u NO”和“file\u name”中,并更改“REV”。在上面的李Lisp程序的地方稍加修改,我想这会管用的:
(defun c:文件名(/col lst sel FileName fn dwgn);;使用列表更新块中的文本
;;获取图形文件名
(setq fn(strcat(getvar“Dwgprefix”)(getvar“dwgname”));;图纸名称
(setq dwgn(cadr(fnsplitl fn));;图纸名称
;; 创建lst(标签号、图纸号)
(setq lst’((“DWG_NO.dwgn)(“A1-DWG-NO.dwgn));;稍后使用其他标记(如修订)增加此列表
;;将列表值插入块标记
(if(setq sel(ssget“_+:E:S:L”'((0。“INSERT”)(66.1)));选择属性
(foreach att(vlax invoke(vlax ename->vla object(ssname sel 0))'获取属性)
(if(setq col(cdr(assoc(strcase(vla get tagstring att))lst)))
(if(vlax-write-enabled-p att)(vla put textstring att dwgn));;我添加了一条新线路来实现这一点
; (if(vlax-write-enabled-p att)(vla put textstring att col));;我希望这能奏效,但为什么不呢?
)
)
)
(普林斯)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
现在我把dwgn作为文件名,我想把它放到一个列表中(setq lst’(((“DWG\u NO.dwgn)(“A1-DWG-NO.dwgn)))然后从那里使用这个列表来更新块标记,使用现在删除的行:(if(vlax-write-enabled-p att)(vla put textstring att col))
希望这有意义。这不起作用,我不知道为什么。我在上面的行中输入((if(vlax-write-enabled-p att)(vla put textstring att dwgn)),只强制输入图纸编号,忽略lst中的内容。。。再次希望我解释得足够好。这很有效,我做了我需要做的事情,然而出于好奇,为什么第一个想法不起作用?
所以我认为出错的地方是将dwgn的值保存到lst中-你能做到吗?
干杯 抱歉-不知道为什么代码没有在代码标记之间!
只需突出显示代码并按下笑脸旁边的[#]按钮。
在列表中使用此类变量时,必须使用list函数对其求值,并使用cons构造点对:
(setq lst (list (cons "DWG_NO" dwgn) (cons "A1-DWG-NO" dwgn) ))
结果将具有与assoc(点对)列表相同的结构。
一些附加信息。 谢谢,我知道这一定很简单,我想要的就像一个梦。
页:
1
[2]