乐筑天下

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

[编程交流] Autocad开源绘图

[复制链接]

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:09:10 | 显示全部楼层 |阅读模式
大家好,
 
我有一个lisp“Open BL”,可以从任何地方打开一个块,子目录在一个特殊的文本文件中指定。这个Lisp例程工作得很好,但需要在具有数百个块的图形上打开选定块。我将“开放BL”修改为“新开放BL”,但它不起作用,我不知道为什么!!!
 
感谢您的帮助。
NewOpen-BL.LSP
开放式BL.LSP
测验txt文件
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 17:14:16 | 显示全部楼层
如果块作为DWG文件存在于支持文件搜索路径列表的文件夹中,或包含在路径列表(test.txt文件)中,则代码应该可以工作。如果选择块以外的实体,则会失败(见下文)。
您收到了什么错误消息?
 
您似乎试图验证用户的选择,但应将其用于IF语句:
或者检查SSGET函数:
  1. (if (setq ssetBlock (ssget "_:S:E" '((0 . "INSERT"))))
  2. (print (vla-get-effectivename (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname ssetBlock 0)))))))
  3. )

 
 
还请注意,“列表”是一个保留符号;您可能需要考虑重命名该变量。
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:18:23 | 显示全部楼层
感谢您的回复,
我修改了Lisp程序,但我收到了以下消息:
 
选择块图元:
我找不到EP1780。DWG任意位置!

 
 
Lisp修改:
 
  1. (setq ent (car (entsel "\nSelect Block Entity: ")))
  2.                 (if  (eq (cdr (assoc 0 (entget ent))) "INSERT")
  3.                  (progn
  4.                  (setq BLKN (vla-get-effectivename
  5.                                        (vlax-ename->vla-object ent)))
  6.                  )
  7.                  )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 17:20:01 | 显示全部楼层
所选blcok不能作为DWG文件使用,至少不能在所调查的路径(即支持文件搜索路径列表和test.txt文件中的路径)上使用。
 
如果您像上面那样修改了代码,那么还应该验证块名的存在性:
  1. ...
  2. (if (and [color=red]BLKN[/color] (/= BLKN "") (/= BLKN "?"))
  3. ...

 
 
请编辑您以前的帖子并添加代码标签。
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:23:54 | 显示全部楼层
非常感谢,它有效。。。。。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 17:26:31 | 显示全部楼层
不客气!
 
请编辑您以前的帖子和添加代码标签。
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:28:48 | 显示全部楼层
你好
你的意思是:请编辑你以前的帖子和添加代码标签。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 17:32:15 | 显示全部楼层
为了更好地呈现代码并保留其格式,必须将其包装在
  1. tags. My previous post contains a link where you will find information how to do this.
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:36:30 | 显示全部楼层
这里是Lisp:
 
  1. (defun C:NewOpen-BL ( / POINTER FolderList BLKN PATH SUBDIR)
  2.   (setq POINTER "H:")
  3.   (setq FolderList (open (strcat pointer "[url="file://\\test.txt"]\\test.txt[/url]") "r"))
  4. (setq ent (car (entsel "\nSelect Block Entity: ")))
  5.                 (if  (eq (cdr (assoc 0 (entget ent))) "INSERT")
  6.                  (progn
  7.                  (setq BLKN (vla-get-effectivename
  8.                                        (vlax-ename->vla-object ent)))
  9.                  )
  10.                  )
  11.   (if (= BLKN "") (princ "\n*Invalid*\n"))
  12.   (if (= BLKN "?") (command ".insert" "?"))
  13.   (if (and BLKN (/= BLKN "") (/= BLKN "?"))
  14.      (progn
  15.         (setq BLKN (strcase (strcat BLKN ".DWG"))
  16.            PATH (findfile blkn)
  17.            SUBDIR (read-line FolderList)
  18.         )
  19.         (while (and SUBDIR (not PATH))
  20.            (setq   PATH (findfile (strcat SUBDIR "\" BLKN))
  21.               SUBDIR (read-line FolderList)
  22.         ))
  23.         (if (= PATH nil)
  24.            (prompt (strcat "\nI can't find " BLKN " anywhere!\n"))
  25.            (progn
  26. (if (= 0 (getvar "SDI"))
  27. (vla-activate (vla-open (vla-get-documents (vlax-get-acad-object)) path))
  28. (vla-sendcommand
  29. (vla-get-activedocument
  30. (vlax-get-acad-object))
  31. (strcat "(command "_.open")\n" path "\n") )
  32. )
  33.            )
  34.         )
  35.      )
  36.   )
  37.   (close FolderList)
  38. );

 
txt Datei示例:
  1. H:\BLOC\profile
  2. H:\BLOC\gomme
回复

使用道具 举报

4

主题

24

帖子

26

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 17:39:56 | 显示全部楼层
我还需要你的帮助,我想重新定义用上一个Lisp打开的块。我创建了一个新的Lisp“InsertBL”,并用insert命令替换了open命令。lisp可以工作,但它不能重新定义块!!!你知道为什么吗?
 
 
  1. (defun C:InsertBL ( / POINTER FolderList BLKN PATH SUBDIR)
  2.   (setq POINTER "H:")
  3.   (setq FolderList (open (strcat pointer "[url="file://\\test.txt"]\\test.txt[/url]") "r"))
  4. (setq ent (car (entsel "\nSelect Block Entity: ")))
  5.                 (if  (eq (cdr (assoc 0 (entget ent))) "INSERT")
  6.                  (progn
  7.                  (setq BLKN (vla-get-effectivename
  8.                                        (vlax-ename->vla-object ent)))
  9.                  )
  10.                  )
  11.   (if (= BLKN "") (princ "\n*Invalid*\n"))
  12.   (if (= BLKN "?") (command ".insert" "?"))
  13.   (if (and BLKN (/= BLKN "") (/= BLKN "?"))
  14.      (progn
  15.         (setq BLKN (strcase (strcat BLKN ".DWG"))
  16.            PATH (findfile blkn)
  17.            SUBDIR (read-line FolderList)
  18.         )
  19.         (while (and SUBDIR (not PATH))
  20.            (setq   PATH (findfile (strcat SUBDIR "\" BLKN))
  21.               SUBDIR (read-line FolderList)
  22.         ))
  23.         (if (= PATH nil)
  24.            (prompt (strcat "\nI can't find " BLKN " anywhere!\n"))
  25.            (progn
  26.               (command "._-insert" path pause "1" "1" pause)
  27.            )
  28.         )
  29.      )
  30.   )
  31.   (close FolderList)
  32. );
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 09:09 , Processed in 1.275166 second(s), 72 queries .

© 2020-2025 乐筑天下

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