hosyn 发表于 2022-7-6 06:30:26

什么';我的密码错了

我想用这些名字来分解:a11,a12,a13,a14。。。在我的画里。我如何使用unik命令来实现它,就像:expb。??
 

(
DEFUN C:expb()
(COMMAND "_explode"   "a11","a12","a13","a14" )
)

Cad64 发表于 2022-7-6 06:39:59

我已经将您的两个线程移动到lisp部分。如果您对代码有任何疑问,请将其张贴在此处:http://www.cadtutor.net/forum/forumdisplay.php?21-AutoLISP Visual LISP amp DCL
 
我已经重命名了你的线程。用相同的标题创建多个线程确实不是一个好主意。人们可能会认为你只是双重张贴,而不费心查看其他帖子。您应该始终创建唯一的线程标题。

LISP2LEARN 发表于 2022-7-6 06:43:59

这样地?
 
(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)
)

MSasu 发表于 2022-7-6 06:50:15

Hosyn,只有当a11变量已经包含实体的名称(即“a11”块的实例)时,您的代码才会工作;其他人也一样。
即使以字符串形式提供名称,也不会导致选择具有相同名称的所有块。
 
还有一些关于命令调用的其他参数真的不知道代表什么。

hosyn 发表于 2022-7-6 06:51:28

亲爱的MSasu,谢谢你的回答。
事实上,当我运行expb lisp时,我想要它的结果,lisp查找名为a11、a12、a13、a14的块,并在我的图形中分解它们。

MSasu 发表于 2022-7-6 06:57:29

我只是想解释一下为什么你的代码失败了。
 
为了实现您想要的,请尝试上面由LISP2LEARN提供的代码。

hosyn 发表于 2022-7-6 07:04:45

尊敬的LISP2LEARN
我检查了你的代码,但我不知道如何与我的代码联系起来:
我想用这些名字来分解:a11,a12,a13,a14。。。在我的画里。我如何使用unik命令来实现它,就像:expb。??

(
DEFUN C:expb()
(COMMAND "_explode"   "a11","a12","a13","a14" )
)

MSasu 发表于 2022-7-6 07:09:24

下面的行是从LISP2LEARN的例程中提取的,负责选择名为“a11”、“a12”、“a13”或“a14”的块的所有实例。
(ssget "X" '((0 . "INSERT") (2 . "a11,a12,a13,a14")))
这是一个使用复杂过滤器的选择-有关详细信息,请检查WCMATCH函数。
 
 
如果您想为您的公司取一个不同的名字,只需更改此行:
(defun C:test (/ ss)
使用:
(defun C:expb (/ ss)

hmsilva 发表于 2022-7-6 07:15:26

简单的意见,
当我们需要在代码中修改一些系统变量时,可以方便地使用简单的错误处理函数,以确保系统变量将被重置。。。
也许是这样
 

(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

 
希望有帮助
亨里克

Tharwat 发表于 2022-7-6 07:15:59

@亨里克,如果在你的第一次例行训练中没有发现任何障碍怎么办?错误函数最后会返回什么?
页: [1] 2
查看完整版本: 什么';我的密码错了