什么';我的密码错了
我想用这些名字来分解:a11,a12,a13,a14。。。在我的画里。我如何使用unik命令来实现它,就像:expb。??(
DEFUN C:expb()
(COMMAND "_explode" "a11","a12","a13","a14" )
)
我已经将您的两个线程移动到lisp部分。如果您对代码有任何疑问,请将其张贴在此处:http://www.cadtutor.net/forum/forumdisplay.php?21-AutoLISP Visual LISP amp DCL
我已经重命名了你的线程。用相同的标题创建多个线程确实不是一个好主意。人们可能会认为你只是双重张贴,而不费心查看其他帖子。您应该始终创建唯一的线程标题。 这样地?
(defun C:test (/ ss)
(if
(setq ss (ssget "X" '((0 . "INSERT") (2 . "a11,a12,a13,a14"))))
(progn
(setvar 'qaflags 3)
(command "_.explode" ss "")
(setvar 'qaflags 0) ;; qaflags is always 0
)
)
(princ)
) Hosyn,只有当a11变量已经包含实体的名称(即“a11”块的实例)时,您的代码才会工作;其他人也一样。
即使以字符串形式提供名称,也不会导致选择具有相同名称的所有块。
还有一些关于命令调用的其他参数真的不知道代表什么。 亲爱的MSasu,谢谢你的回答。
事实上,当我运行expb lisp时,我想要它的结果,lisp查找名为a11、a12、a13、a14的块,并在我的图形中分解它们。 我只是想解释一下为什么你的代码失败了。
为了实现您想要的,请尝试上面由LISP2LEARN提供的代码。 尊敬的LISP2LEARN
我检查了你的代码,但我不知道如何与我的代码联系起来:
我想用这些名字来分解:a11,a12,a13,a14。。。在我的画里。我如何使用unik命令来实现它,就像:expb。??
(
DEFUN C:expb()
(COMMAND "_explode" "a11","a12","a13","a14" )
)
下面的行是从LISP2LEARN的例程中提取的,负责选择名为“a11”、“a12”、“a13”或“a14”的块的所有实例。
(ssget "X" '((0 . "INSERT") (2 . "a11,a12,a13,a14")))
这是一个使用复杂过滤器的选择-有关详细信息,请检查WCMATCH函数。
如果您想为您的公司取一个不同的名字,只需更改此行:
(defun C:test (/ ss)
使用:
(defun C:expb (/ ss) 简单的意见,
当我们需要在代码中修改一些系统变量时,可以方便地使用简单的错误处理函数,以确保系统变量将被重置。。。
也许是这样
(defun c:test (/*error* old_flg ss)
(defun *error* (msg)
(if old_flg (setvar 'qaflags old_flg))
(princ)
);; *error*
(if
(setq ss (ssget "X" '((0 . "INSERT") (2 . "a11,a12,a13,a14"))))
(progn
(setq old_flg (getvar "qaflags"))
(setvar 'qaflags 3)
(command "_.explode" ss "")
);; progn
);; if
(*error* nil)
(princ)
);; test
还有一种不同的方法,不需要更改系统变量,使用vla sendcommand,我们可以向命令行发送文本字符串,AutoCAD将运行“explode”命令行版本,允许使用命令行选项,包括“previous”,因此
(defun c:test (/ ss)
(vl-load-com)
(if
(setq ss (ssget "X" '((0 . "INSERT") (2 . "a11,a12,a13,a14"))))
(vla-sendcommand
(vla-get-activedocument (vlax-get-acad-object))
(strcat "explode" " " "p" " " " ")
)
);; if
(princ)
);; test
希望有帮助
亨里克 @亨里克,如果在你的第一次例行训练中没有发现任何障碍怎么办?错误函数最后会返回什么?
页:
[1]
2