GregGleason 发表于 2022-7-5 15:24:32

简单程序挂起

我以为这个简单的程序可以运行,但看起来我要求它做一些代码挂起的事情,我必须终止这个进程。
 
伪代码为:
 
[列表=1]
[*]选择所有图形
[*]Copybase 0,0
[*]对新图形执行“qnew”
[*]将剪辑0,0粘贴到新图形中
[/列表]
哪个部分不正确?
 
格雷格

rlx 发表于 2022-7-5 15:30:31

猜测您想将所选内容粘贴到新模板文件中,但无法使用另存为。。。vla sendcommand有什么用???
 
但是为了回答你的问题,我认为只要你开始一个新的绘图,你的lisp例程就会停止,因为lisp在它自己的名称空间中运行。你需要的是一个脚本文件。。。
 
gr.Rlx

GregGleason 发表于 2022-7-5 15:33:36

好的,这个效果更好,因为它会创建一个新的图形,并且不会挂起。但它不粘贴信息,它想创建两个图形。
 
(defun c:test ( / s )
   (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) (strcat "select all \r\r"))
   (if (setq s (ssget)) (command "_.copybase" "_non" '(0 0) s ""))
   (princ)
   (vla-sendcommand (vla-get-activedocument (vlax-get-acad-object)) (strcat "qnew \r"))
   (command "_.pasteclip" "_non" '(0 0))
   (princ)
)
(vl-load-com)Greg

GregGleason 发表于 2022-7-5 15:36:10

 
嗯。既然你提到了,那就有道理了。那么VBA例程可以工作了?
 
格雷格

rlx 发表于 2022-7-5 15:40:54

您也可以尝试制作一个脚本文件,例如“change\u template”。scr’并将其保存在您的支持路径中,但可以说是c:/temp/
 
脚本文件可能类似于:
 
如果autocad模板是预设的,则第7行上可能不需要空行。
然后,您只需调用脚本:
 
剩下的就是用您选择的名称保存图形
 
oopsie有一个0,0太多,更新了上面的代码

rlx 发表于 2022-7-5 15:44:33

 
是的,VBA应该可以工作,因为VBA在autocad上作为一个对象进行操作,而lisp只存在于绘图任务中。

GregGleason 发表于 2022-7-5 15:49:15

 
 
谢谢rlx!我试试看。
 
格雷格

GregGleason 发表于 2022-7-5 15:54:14

 
谢谢现在,这是我的新计划B。
 
格雷格

Grrr 发表于 2022-7-5 15:57:30

计划见

rlx 发表于 2022-7-5 15:58:56

 
很好的捕捉Grrr,可能使用起来更复杂一些,但也更有趣:-)
页: [1] 2
查看完整版本: 简单程序挂起