Autocad开源绘图
大家好,我有一个lisp“Open BL”,可以从任何地方打开一个块,子目录在一个特殊的文本文件中指定。这个Lisp例程工作得很好,但需要在具有数百个块的图形上打开选定块。我将“开放BL”修改为“新开放BL”,但它不起作用,我不知道为什么!!!
感谢您的帮助。
NewOpen-BL.LSP
开放式BL.LSP
测验txt文件 如果块作为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)))))))
)
还请注意,“列表”是一个保留符号;您可能需要考虑重命名该变量。 感谢您的回复,
我修改了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)))
)
) 所选blcok不能作为DWG文件使用,至少不能在所调查的路径(即支持文件搜索路径列表和test.txt文件中的路径)上使用。
如果您像上面那样修改了代码,那么还应该验证块名的存在性:
...
(if (and BLKN (/= BLKN "") (/= BLKN "?"))
...
请编辑您以前的帖子并添加代码标签。 非常感谢,它有效。。。。。 不客气!
请编辑您以前的帖子和添加代码标签。 你好
你的意思是:请编辑你以前的帖子和添加代码标签。 为了更好地呈现代码并保留其格式,必须将其包装在
tags. My previous post contains a link where you will find information how to do this. 这里是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 我还需要你的帮助,我想重新定义用上一个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