乐筑天下

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

[编程交流] 打开下一个图形

[复制链接]

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:04:37 | 显示全部楼层 |阅读模式
我正在寻找一个命令,将打开文件夹中的下一个图形。
 
例子:
 
您有文件A.dwg,只需键入“打开下一个”即可打开B.dwg
你有文件C.dwg,你只需键入“打开下一个”,它会打开D.dwg,等等。
 
提前感谢
回复

使用道具 举报

20

主题

81

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 10:12:33 | 显示全部楼层
您可以使用以下命令读取文件名:(vl filename base(getvar'dwgname))
然后,可以使用if filename=a.dwg创建if/else例程,然后打开B.dwg。
具有
  1.         (setq str1 (strcat (vl-filename-base (getvar 'dwgname))))
  2. [b](setq str4(substr str1 5 )[/b]

您可以从文件名中删除某些字母。
然后将其与以下材料一起成型:
  1. (setq str8 (strcat "blablabla" str4 "-" str6))

我不是很好(像这里的一些人),我可以在5分钟内完成代码
但我认为学习autolisp是一个很好的lisp,因为它并不复杂。(所以你自己试试!)
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:18:22 | 显示全部楼层
谢谢你的重播,我对lisp一点也不擅长,但我会尝试一下,我可以编辑它们来做我需要的事情,这是我能做的。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:21:21 | 显示全部楼层
可能是这样(未经测试):
  1. (vl-load-com)
  2. (defun c:Open-Next (/ path files-list files DocCol item n)
  3. (setq path   (getvar "DWGPREFIX") ;Get the current DWG's path
  4.        DocCol (vla-get-Documents (vlax-get-acad-object)) ;Get the ActiveX collection of open DWG's
  5.        n      0
  6. )
  7. (if (and (setq files-list (vl-bb-ref 'Open-Next-List)) ;Check if Open-Next has been used before
  8.           (setq files (assoc path files-list)) ;If so has it been used on this folder?
  9.      )
  10.    ;; Then
  11.    (setq files (cdr files)) ;Remove the path prefix of the list
  12.    ;; Else
  13.    (setq files (vl-directory-files path "*.DWG" 1)) ;Get the files in this directory
  14. )
  15. (while (and (< n (length files))
  16.              (or (not (eq (strcase (getvar "DWGNAME")) (strcase (nth n files)))) ;Check that not the current DWG
  17.                  (and (setq item (vl-catch-all-apply 'vla-Item (list DocCol (nth n files))))
  18. ;Check if one of the other opened
  19.                       (not (vl-catch-all-error-p item)) ;Check if error
  20.                  )
  21.              )
  22.         )
  23.    (if (and item (not (vl-catch-all-error-p item))) ;If another DWG
  24.      (vla-Close item)
  25.    )
  26.    (setq n (1+ n) item nil) ;Increment counter
  27. )
  28. (if (setq item (assoc path files-list)) ;If already in list
  29.    ;; Then
  30.    (setq files-list (subst (cons path files) item files-list)) ;Replace with the new set of files
  31.    ;; Else
  32.    (setq files-list (cons (cons path files) files-list)) ;Add the current folder & files list
  33. )
  34. (vl-bb-set 'Open-Next-List files-list)
  35. (if (< n (length files))
  36.    (vl-cmdf "_.OPEN" (strcat """ path (nth n files) """))
  37. )
  38. (princ)
  39. )
  40. (defun Open-Next-Cleanup (/ files-list files path DocCol)
  41. (setq path   (getvar "DWGPREFIX") ;Get the current DWG's path
  42.        DocCol (vla-get-Documents (vlax-get-acad-object)) ;Get the ActiveX collection of open DWG's
  43.        n      0
  44. )
  45. (if (and (setq files-list (vl-bb-ref 'Open-Next-List))
  46.           (setq files (assoc path files-list))
  47.      )
  48.    (while (or (not (eq (strcase (getvar "DWGNAME")) (strcase (car files)))) ;Check that not the current DWG
  49.               (and (setq item (vl-catch-all-apply 'vla-Item (list DocCol (car files))))
  50. ;Check if one of the other opened
  51.                    (not (vl-catch-all-error-p item)) ;Check if error
  52.               )
  53.           )
  54.      (if (and item (not (vl-catch-all-error-p item))) ;If another DWG
  55.        (vla-Close item)
  56.      )
  57.      (setq files (cdr files) item nil)
  58.    )
  59. )
  60. (if (setq item (assoc path files-list)) ;If already in list
  61.    ;; Then
  62.    (setq files-list (subst (cons path files) item files-list)) ;Replace with the new set of files
  63.    ;; Else
  64.    (setq files-list (cons (cons path files) files-list)) ;Add the current folder & files list
  65. )
  66. (vl-bb-set 'Open-Next-List files-list)
  67. )
  68. (if (and s::startup (= (type s::startup) 'LIST))
  69. (setq s::startup (append s::startup (list (Open-Next-Cleanup))))
  70. (defun-q s::startup
  71.           ()
  72.           (Open-Next-Cleanup)
  73. )
  74. )
需要复制到您的ACADDOC。LSP文件,以便在打开新图形时清除列表。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:25:23 | 显示全部楼层
使用黑板名称空间Irne的好主意,很好的编码
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:29:10 | 显示全部楼层
我可以这样做:
 
[code]defunc:打开下一个[color=BLUE vl load com][color b];;©Lee Mac 2010ifcond([/color b]([/color b][color=BLUE cadr][color][color=BLUE b]getvarDWGNAMEsetqfvl sort[/color b]vl directory files[/color b][color=RED color=BLUE]getvarDWGPREFIX[”*.dwg“1
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:35:47 | 显示全部楼层
在尝试使用您的代码irned时,我遇到了以下错误:
 
; 错误:自动化错误。绘图正忙。
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:40:31 | 显示全部楼层
哇,李-麦克,看起来效果不错
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:44:50 | 显示全部楼层
所以如果我改变一下:
 
(setq f(vl排序(vl目录文件(getvar“DWGPREFIX)”*.dwg“1)”
 

 
(setq f(vl排序(vl目录文件(getvar“DWGPREFIX)”*.dwg“1)>)
 
它将打开之前的绘图,我尝试了一下,它成功了。
回复

使用道具 举报

20

主题

81

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 10:48:53 | 显示全部楼层
这不是编码这是黑魔法
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 21:43 , Processed in 1.507435 second(s), 73 queries .

© 2020-2025 乐筑天下

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