gschmidt 发表于 2022-7-5 19:42:23

列出要重命名的图像名称

你好
 
我必须在多个图形中重命名荒谬的图像引用名称。例如。:
“使用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)
)

Tharwat 发表于 2022-7-5 19:52:00

 
如。
 

(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")

gschmidt 发表于 2022-7-5 19:57:28

但是,问题的一部分是,当我尝试将所有图像放入列表时,我会得到一个stringp错误
 

(setq nm
(append nm (list (vla-get-name vl)))
)

 
(set nm(vla get name vl))不返回错误,但不将值追加到列表中

Tharwat 发表于 2022-7-5 20:03:15

在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))
)

gschmidt 发表于 2022-7-5 20:08:42

是的,我确实需要使用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床垫安装测量”

Tharwat 发表于 2022-7-5 20:15:07

你能上传一张样图吗?

gschmidt 发表于 2022-7-5 20:16:39


 
对于一个项目,我们必须将100个图纸重命名为客户图纸编号。
然而,当我们重命名图像时,需要更新图像路径。
所以我尝试制作一个lisp/script来自动实现这个动作。
您看到的文件(DWG和PNG)已经是新的客户端名称,我只需要更新图像链接
 
DWG太大了,我删除了一些对象,但保留了图像
这是一个包含2个PNG图像的DWG文件,但图像数量可以从1到最多5个不等
 
Thanx太好看了
GTRGES-VOO-TER-LA-4024-00069_Z01。图纸

gschmidt 发表于 2022-7-5 20:24:58

我的完整代码是这样的,因为我也有只有一个图像的图纸。
只有一个图像的图形: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)
)

Tharwat 发表于 2022-7-5 20:28:03

尝试此例程以按顺序查看图像名称。
 

(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)
)
)

gschmidt 发表于 2022-7-5 20:36:48

是的,它们是按顺序排列的,但这是保存的路径名,而不是引用名?
命令(命令“-image”“p”nm path)要求“image Name”(nm)而不是路径名
通常两者都是一样的,但在我的情况下不是!
页: [1] 2
查看完整版本: 列出要重命名的图像名称