乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 85|回复: 11

[编程交流] 列出要重命名的图像名称

[复制链接]

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 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错误。
有人能找出代码出了什么问题吗?
 
  1. (defun c:IMREN ( / img_len img_nr dwg_len nm vl sset)
  2. (vl-load-com)
  3. (if (setq ss (ssget "x" '((0 . "IMAGE"))))
  4.         (progn
  5.                 (setq cnt 0)
  6.                 (repeat (sslength ss)
  7.                         (setq sset (ssname ss cnt))
  8.                         (setq vl (vlax-ename->vla-object sset))
  9.                         (setq nm
  10.                                 (append nm (list (vla-get-name vl)))
  11.                         )                               
  12.                         (setq cnt (1+ cnt))
  13.                 )
  14.         )
  15. )
  16. (princ)
  17. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 19:52:00 | 显示全部楼层
 
如。
 
  1. (setq l
  2.       '("GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0801_Depth Colors"
  3.         "GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0701_Depth Colors"
  4.         "GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0501_Depth Colors"
  5.        )
  6. )
  7. (vl-sort l '(lambda (j k) (< (atoi (substr j 121 2)) (atoi (substr k 121 2)))))
返回。
 
  1. ("GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0501_Depth Colors"
  2. "GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0701_Depth Colors"
  3. "GAMBA POST MATTRESS INSTALLATION SURVEY WITH CROSS.9BD8B195-281A-4564-A981-5D3BA8CDF376_10.4923-DRA.DOC-4-3-0705_Z01_TVW0801_Depth Colors")
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 19:57:28 | 显示全部楼层
但是,问题的一部分是,当我尝试将所有图像放入列表时,我会得到一个stringp错误
 
  1. (setq nm
  2. (append nm (list (vla-get-name vl)))
  3. )

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

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:03:15 | 显示全部楼层
在IMO中不需要转换为Vla对象,因此请尝试以下操作。
 
  1. (defun c:IMREN ( / ss cnt sset names)
  2.    (if (setq ss (ssget "_X" '((0 . "IMAGE"))))
  3.      (repeat (setq cnt (sslength ss))
  4.            (setq sset (ssname ss (setq cnt (1- cnt))))
  5.            (setq names (append names (list (cdr (assoc 1 (entget (cdr (assoc 340 (entget sset)))))))))
  6.            ))
  7. (if names names (princ))
  8. )
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 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床垫安装测量”
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:15:07 | 显示全部楼层
你能上传一张样图吗?
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:16:39 | 显示全部楼层
204224j2splgtsl5xpeiov.jpg
 
对于一个项目,我们必须将100个图纸重命名为客户图纸编号。
然而,当我们重命名图像时,需要更新图像路径。
所以我尝试制作一个lisp/script来自动实现这个动作。
您看到的文件(DWG和PNG)已经是新的客户端名称,我只需要更新图像链接
 
DWG太大了,我删除了一些对象,但保留了图像
这是一个包含2个PNG图像的DWG文件,但图像数量可以从1到最多5个不等
 
Thanx太好看了
GTRGES-VOO-TER-LA-4024-00069_Z01。图纸
204226qzzve5f2hzcxxx2f.jpg
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:24:58 | 显示全部楼层
我的完整代码是这样的,因为我也有只有一个图像的图纸。
只有一个图像的图形:DWG和PNG获得完全相同的(客户端)名称
图像>1的图形:DWG和PNG具有相同的(客户端)名称,但PNG在名称中有额外的“-01”、“-02”。
 
只有一张图片的情况正在工作!
 
  1. (defun c:IMREN ( / img_len img_nr dwg_len nm vl sset)
  2. (vl-load-com)
  3. (if (setq ss (ssget "x" '((0 . "IMAGE"))))
  4.         (cond
  5.                 ((= (sslength ss) 1)
  6.                         (progn
  7.                                 (setq sset (ssname ss 0))
  8.                                 (setq vl (vlax-ename->vla-object sset))
  9.                                 (setq nm (vla-get-name vl))
  10.                                 (setq dwgpath (getvar "DWGPREFIX"))
  11.                                 (setq dwgname (strcat (vl-filename-base (getvar "DWGNAME"))))
  12.                                 (setq path (strcat dwgpath dwgname ".png"))
  13.                                 (command "-image" "p" nm path)
  14.                                 (vlax-put-property vl 'Name dwgname)
  15.                         )
  16.                 )
  17.                 ((> (sslength ss) 1)
  18.                         (progn
  19.                                 (setq cnt 0)
  20.                                 (setq str "Z01")
  21.                                 (repeat (sslength ss)
  22.                                         (setq sset (ssname ss cnt))
  23.                                         (setq vl (vlax-ename->vla-object sset))
  24.                                         ;(setq nm (vla-get-name vl))
  25.                                         (setq nm
  26.                                                 (append nm (list (vla-get-name vl)))
  27.                                         )                               
  28.                                         (princ nm)
  29.                                         (setq dwgpath (getvar "DWGPREFIX"))
  30.                                         (setq dwgname (strcat (vl-filename-base (getvar "DWGNAME"))))
  31.                                         (setq dwg_len (- (strlen dwgname) (+ (strlen str) 1)))
  32.                                         (setq revnr (substr dwgname (+ dwg_len 1)))
  33.                                         (setq imgname (substr dwgname 1 dwg_len))
  34.                                        
  35.                                         ;(if
  36.                                                 (setq path (strcat dwgpath imgname "-" (strcat "0" (itoa cnt)) revnr ".png"))
  37.                                                 (command "-image" "p" (nth cnt nm) path)
  38.                                                 (vlax-put-property vl 'Name dwgname)
  39.                                        
  40.                                        
  41.                                         (setq cnt (1+ cnt))
  42.                                 )
  43.                         )
  44.                 )
  45.         )
  46.         (princ "Error - No images in drawing!.")
  47. )
  48. (princ)
  49. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 20:28:03 | 显示全部楼层
尝试此例程以按顺序查看图像名称。
 
  1. (defun c:Test (/ ss cnt sset names)
  2. (if (setq ss (ssget "_X" '((0 . "IMAGE"))))
  3.    (repeat (setq cnt (sslength ss))
  4.      (setq sset (ssname ss (setq cnt (1- cnt))))
  5.      (setq names
  6.             (append
  7.               names
  8.               (list
  9.                 (vl-filename-base
  10.                   (cdr (assoc 1 (entget (cdr (assoc 340 (entget sset))))))
  11.                 )
  12.               )
  13.             )
  14.      )
  15.    )
  16. )
  17. (if names
  18.    (vl-sort names
  19.             '(lambda (j k)
  20.                (< (atoi (substr j 121 2)) (atoi (substr k 121 2)))
  21.              )
  22.    )
  23.    (princ)
  24. )
  25. )
回复

使用道具 举报

10

主题

40

帖子

31

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 20:36:48 | 显示全部楼层
是的,它们是按顺序排列的,但这是保存的路径名,而不是引用名?
命令(命令“-image”“p”nm path)要求“image Name”(nm)而不是路径名
通常两者都是一样的,但在我的情况下不是!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 00:40 , Processed in 1.156639 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表