francine2013 发表于 2022-7-5 17:09:10

Autocad开源绘图

大家好,
 
我有一个lisp“Open BL”,可以从任何地方打开一个块,子目录在一个特殊的文本文件中指定。这个Lisp例程工作得很好,但需要在具有数百个块的图形上打开选定块。我将“开放BL”修改为“新开放BL”,但它不起作用,我不知道为什么!!!
 
感谢您的帮助。
NewOpen-BL.LSP
开放式BL.LSP
测验txt文件

MSasu 发表于 2022-7-5 17:14:16

如果块作为DWG文件存在于支持文件搜索路径列表的文件夹中,或包含在路径列表(test.txt文件)中,则代码应该可以工作。如果选择块以外的实体,则会失败(见下文)。
您收到了什么错误消息?
 
您似乎试图验证用户的选择,但应将其用于IF语句:
或者检查SSGET函数:
(if (setq ssetBlock (ssget "_:S:E" '((0 . "INSERT"))))
(print (vla-get-effectivename (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname ssetBlock 0)))))))
)
 
 
还请注意,“列表”是一个保留符号;您可能需要考虑重命名该变量。

francine2013 发表于 2022-7-5 17:18:23

感谢您的回复,
我修改了Lisp程序,但我收到了以下消息:
 
选择块图元:
我找不到EP1780。DWG任意位置!

 
 
Lisp修改:
 
(setq ent (car (entsel "\nSelect Block Entity: ")))
                (if(eq (cdr (assoc 0 (entget ent))) "INSERT")
               (progn
               (setq BLKN (vla-get-effectivename
                                       (vlax-ename->vla-object ent)))
               )
               )

MSasu 发表于 2022-7-5 17:20:01

所选blcok不能作为DWG文件使用,至少不能在所调查的路径(即支持文件搜索路径列表和test.txt文件中的路径)上使用。
 
如果您像上面那样修改了代码,那么还应该验证块名的存在性:
...
(if (and BLKN (/= BLKN "") (/= BLKN "?"))
...
 
 
请编辑您以前的帖子并添加代码标签。

francine2013 发表于 2022-7-5 17:23:54

非常感谢,它有效。。。。。

MSasu 发表于 2022-7-5 17:26:31

不客气!
 
请编辑您以前的帖子和添加代码标签。

francine2013 发表于 2022-7-5 17:28:48

你好
你的意思是:请编辑你以前的帖子和添加代码标签。

MSasu 发表于 2022-7-5 17:32:15

为了更好地呈现代码并保留其格式,必须将其包装在
tags. My previous post contains a link where you will find information how to do this.

francine2013 发表于 2022-7-5 17:36:30

这里是Lisp:
 
(defun C:NewOpen-BL ( / POINTER FolderList BLKN PATH SUBDIR)
(setq POINTER "H:")
(setq FolderList (open (strcat pointer "\\test.txt") "r"))
(setq ent (car (entsel "\nSelect Block Entity: ")))
                (if(eq (cdr (assoc 0 (entget ent))) "INSERT")
               (progn
               (setq BLKN (vla-get-effectivename
                                       (vlax-ename->vla-object ent)))
               )
               )
(if (= BLKN "") (princ "\n*Invalid*\n"))
(if (= BLKN "?") (command ".insert" "?"))
(if (and BLKN (/= BLKN "") (/= BLKN "?"))
   (progn
      (setq BLKN (strcase (strcat BLKN ".DWG"))
         PATH (findfile blkn)
         SUBDIR (read-line FolderList)
      )
      (while (and SUBDIR (not PATH))
         (setq   PATH (findfile (strcat SUBDIR "\\" BLKN))
            SUBDIR (read-line FolderList)
      ))
      (if (= PATH nil)
         (prompt (strcat "\nI can't find " BLKN " anywhere!\n"))
         (progn
(if (= 0 (getvar "SDI"))
(vla-activate (vla-open (vla-get-documents (vlax-get-acad-object)) path))
(vla-sendcommand
(vla-get-activedocument
(vlax-get-acad-object))
(strcat "(command \"_.open\")\n" path "\n") )
)
         )
      )
   )
)
(close FolderList)
);

 
txt Datei示例:
H:\BLOC\profile
H:\BLOC\gomme

francine2013 发表于 2022-7-5 17:39:56

我还需要你的帮助,我想重新定义用上一个Lisp打开的块。我创建了一个新的Lisp“InsertBL”,并用insert命令替换了open命令。lisp可以工作,但它不能重新定义块!!!你知道为什么吗?
 
 
(defun C:InsertBL ( / POINTER FolderList BLKN PATH SUBDIR)
(setq POINTER "H:")
(setq FolderList (open (strcat pointer "\\test.txt") "r"))
(setq ent (car (entsel "\nSelect Block Entity: ")))
                (if(eq (cdr (assoc 0 (entget ent))) "INSERT")
               (progn
               (setq BLKN (vla-get-effectivename
                                       (vlax-ename->vla-object ent)))
               )
               )
(if (= BLKN "") (princ "\n*Invalid*\n"))
(if (= BLKN "?") (command ".insert" "?"))
(if (and BLKN (/= BLKN "") (/= BLKN "?"))
   (progn
      (setq BLKN (strcase (strcat BLKN ".DWG"))
         PATH (findfile blkn)
         SUBDIR (read-line FolderList)
      )
      (while (and SUBDIR (not PATH))
         (setq   PATH (findfile (strcat SUBDIR "\\" BLKN))
            SUBDIR (read-line FolderList)
      ))
      (if (= PATH nil)
         (prompt (strcat "\nI can't find " BLKN " anywhere!\n"))
         (progn
            (command "._-insert" path pause "1" "1" pause)
         )
      )
   )
)
(close FolderList)
);
页: [1] 2
查看完整版本: Autocad开源绘图