列出要重命名的图像名称
你好我必须在多个图形中重命名荒谬的图像引用名称。例如。:
“使用CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376\U 10.4923-DRA.DOC-4-3-0705\U Z01\U TVW0101\U深度颜色进行GAMBA床垫安装测量”
(图纸是在AutoCAD之后的其他软件中生成的)
在某些情况下,图形中有2个或更多参考图像。
然而,当我“SSGET”它们时,选择集中图像的顺序是随机的。
我想根据图像引用名称的一部分(TVW0101)对列表中的现有名称进行排序(升序)。
只有TWW后的前2位是唯一的;在示例01中。我的示例图形中的另一个图像是TVW0301-->03。
当我试图把名字放在一个列表中时,我得到了一个stringp错误。
有人能找出代码出了什么问题吗?
(defun c:IMREN ( / img_len img_nr dwg_len nm vl sset)
(vl-load-com)
(if (setq ss (ssget "x" '((0 . "IMAGE"))))
(progn
(setq cnt 0)
(repeat (sslength ss)
(setq sset (ssname ss cnt))
(setq vl (vlax-ename->vla-object sset))
(setq nm
(append nm (list (vla-get-name vl)))
)
(setq cnt (1+ cnt))
)
)
)
(princ)
)
如。
(setq l
'("GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0801_Depth Colors"
"GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0701_Depth Colors"
"GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0501_Depth Colors"
)
)
(vl-sort l '(lambda (j k) (< (atoi (substr j 121 2)) (atoi (substr k 121 2)))))
返回。
("GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0501_Depth Colors"
"GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0701_Depth Colors"
"GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0801_Depth Colors")
但是,问题的一部分是,当我尝试将所有图像放入列表时,我会得到一个stringp错误
(setq nm
(append nm (list (vla-get-name vl)))
)
(set nm(vla get name vl))不返回错误,但不将值追加到列表中 在IMO中不需要转换为Vla对象,因此请尝试以下操作。
(defun c:IMREN ( / ss cnt sset names)
(if (setq ss (ssget "_X" '((0 . "IMAGE"))))
(repeat (setq cnt (sslength ss))
(setq sset (ssname ss (setq cnt (1- cnt))))
(setq names (append names (list (cdr (assoc 1 (entget (cdr (assoc 340 (entget sset)))))))))
))
(if names names (princ))
)
是的,我确实需要使用VLA对象,因为保存的路径(文件)名称不同于图像引用名称!!!我知道这很奇怪,但这张图是用不同于AutoCAD的软件绘制的。。。。
保存的路径:
“Gamba床垫安装后横截面测量-10.4923-DRA.DOC-4-3-0705-外测量-版本Z01\u TVW0101\u Depth Colors.png”
(即使没有提到路径,也只提到文件名!)
图像引用名称:
“使用CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376\U 10.4923-DRA.DOC-4-3-0705\U Z01\U TVW0101\U深度颜色进行GAMBA床垫安装测量” 你能上传一张样图吗?
对于一个项目,我们必须将100个图纸重命名为客户图纸编号。
然而,当我们重命名图像时,需要更新图像路径。
所以我尝试制作一个lisp/script来自动实现这个动作。
您看到的文件(DWG和PNG)已经是新的客户端名称,我只需要更新图像链接
DWG太大了,我删除了一些对象,但保留了图像
这是一个包含2个PNG图像的DWG文件,但图像数量可以从1到最多5个不等
Thanx太好看了
GTRGES-VOO-TER-LA-4024-00069_Z01。图纸
我的完整代码是这样的,因为我也有只有一个图像的图纸。
只有一个图像的图形:DWG和PNG获得完全相同的(客户端)名称
图像>1的图形:DWG和PNG具有相同的(客户端)名称,但PNG在名称中有额外的“-01”、“-02”。
只有一张图片的情况正在工作!
(defun c:IMREN ( / img_len img_nr dwg_len nm vl sset)
(vl-load-com)
(if (setq ss (ssget "x" '((0 . "IMAGE"))))
(cond
((= (sslength ss) 1)
(progn
(setq sset (ssname ss 0))
(setq vl (vlax-ename->vla-object sset))
(setq nm (vla-get-name vl))
(setq dwgpath (getvar "DWGPREFIX"))
(setq dwgname (strcat (vl-filename-base (getvar "DWGNAME"))))
(setq path (strcat dwgpath dwgname ".png"))
(command "-image" "p" nm path)
(vlax-put-property vl 'Name dwgname)
)
)
((> (sslength ss) 1)
(progn
(setq cnt 0)
(setq str "Z01")
(repeat (sslength ss)
(setq sset (ssname ss cnt))
(setq vl (vlax-ename->vla-object sset))
;(setq nm (vla-get-name vl))
(setq nm
(append nm (list (vla-get-name vl)))
)
(princ nm)
(setq dwgpath (getvar "DWGPREFIX"))
(setq dwgname (strcat (vl-filename-base (getvar "DWGNAME"))))
(setq dwg_len (- (strlen dwgname) (+ (strlen str) 1)))
(setq revnr (substr dwgname (+ dwg_len 1)))
(setq imgname (substr dwgname 1 dwg_len))
;(if
(setq path (strcat dwgpath imgname "-" (strcat "0" (itoa cnt)) revnr ".png"))
(command "-image" "p" (nth cnt nm) path)
(vlax-put-property vl 'Name dwgname)
(setq cnt (1+ cnt))
)
)
)
)
(princ "Error - No images in drawing!.")
)
(princ)
)
尝试此例程以按顺序查看图像名称。
(defun c:Test (/ ss cnt sset names)
(if (setq ss (ssget "_X" '((0 . "IMAGE"))))
(repeat (setq cnt (sslength ss))
(setq sset (ssname ss (setq cnt (1- cnt))))
(setq names
(append
names
(list
(vl-filename-base
(cdr (assoc 1 (entget (cdr (assoc 340 (entget sset))))))
)
)
)
)
)
)
(if names
(vl-sort names
'(lambda (j k)
(< (atoi (substr j 121 2)) (atoi (substr k 121 2)))
)
)
(princ)
)
) 是的,它们是按顺序排列的,但这是保存的路径名,而不是引用名?
命令(命令“-image”“p”nm path)要求“image Name”(nm)而不是路径名
通常两者都是一样的,但在我的情况下不是!
页:
[1]
2