robbt 发表于 2022-7-6 08:07:03

对话框导致锁定

新的对话框。一直在尝试一个惯例,但失败了。不知道为什么。
该例程打开对话框,该对话框应允许我从3个块中选择1个进行插入,并定义块的比例、要输入的文本和要使用的文本样式。计划首先为对话框定义默认值。打开对话框后,我可以更改或删除默认值。然后插入选定的块并打印文本。如果再次执行lisp文件,则应使用最后使用的值作为默认值。到目前为止,我所能做的就是调出对话框,更改输入或将其保留为默认值,但一旦选择“确定”,autocad就会锁定。
 
以下是文件:
树dcl
树lsp
 
注意,树。c中的lsp文件:/program files/autocad/lispfile文件夹,在autocad中调用。它是我的所有lisp文件存储和自动加载的地方。还有那棵树。dcl文件位于Express文件夹中。我最初将其保存在Lispfile文件夹中,但由于某种原因,它不会从那里加载,但在我将其保存到Express文件夹后确实加载了。但现在它一直在崩溃。我甚至试着放树。lsp文件在Express文件夹中,但没有更改结果。仍然崩溃。

MSasu 发表于 2022-7-6 08:14:08

您应该将命令调用移到对话框操作(setvals函数)之外-打开对话框时不允许执行这些操作:
 
关于DCL文件的访问,您应该硬编码他的路径(参见下面的示例),或者使用自定义文件夹进行例程,并将其添加到AutoCAD搜索路径。我强烈推荐第二种解决方案,因为它非常灵活。尽量避免将例程放在Express或其他系统文件夹中,如果需要重新安装,它们可能会丢失。
 
(setq dcl_id (load_dialog "C:\\MyLispTools\\tree.dcl"))
当做
米尔恰

Lee Mac 发表于 2022-7-6 08:19:32

米尔恰,
 
“DIASTAT”由start\u对话框函数返回,并且已经定义了cancel tile的action\u tile表达式
 

(action_tile "accept" "(setvals) (done_dialog 1)")

(if (= (start_dialog) 1)
   (command "_.-insert" tree "_s" tscl pause "" "_.text" "_s" tts pause "" ttxt)
)

Lee Mac 发表于 2022-7-6 08:26:20

robbt,
 
我重写了您的代码,以演示如何完成任务,希望您可以从我的代码中学习。
 
(defun c:tree ( / blk id scl ts )
   (cond
       (   (or
               (<= (setq id (load_dialog "tree.dcl")) 0)
               (not (new_dialog "tree" id))
         )
         (princ "\nDialog could not be Loaded.")
       )
       (   t
         (set_tile (cond (*tree*) ((setq *tree* "pine"))) "1")
         (set_tile "scl" (cond (*scale*) ((setq *scale* "12.0"))))
         (set_tile "txt" (cond (*text* ) ((setq *text*"12\""))))
         (set_tile "ts"(cond (*style*) ((setq *style* "Standard"))))

         (foreach tile '("pine" "oak" "juniper")
               (action_tile tile "(setq *tree* $key)")
         )
         (action_tile "scl" "(setq *scale* $value)")
         (action_tile "txt" "(setq *text*$value)")
         (action_tile "ts""(setq *style* $value)")

         (action_tile "accept"
               (vl-prin1-to-string
                  '(cond
                     (   (null (setq scl (distof *scale*)))
                           (alert "Scale must be numerical!")
                           (mode_tile "scl" 2)
                     )
                     (   (null (tblsearch "STYLE" *style*))
                           (alert "TextStyle not found!")
                           (mode_tile "ts" 2)
                     )
                     (   (done_dialog 1))
                   )
               )
         )

         (if (= 1 (start_dialog))
               (if
                   (or
                     (tblsearch "BLOCK" (setq blk *tree*))
                     (setq blk (findfile (strcat *tree* ".dwg")))
                   )
                   (command
                     "_.-insert" blk "_S" scl "_R" 0.0 pause
                     "_.text" "_S" ts pause "" *text*
                   )
                   (princ (strcat "\n" *tree* ".dwg not found."))
               )
         )
       )
   )
   (if (< 0 id) (unload_dialog id))
   (princ)
)

robbt 发表于 2022-7-6 08:31:13


 
只是想让你知道,当我尝试执行lisp命令时,你的想法给了我“畸形列表”错误。
 
返回测试板

robbt 发表于 2022-7-6 08:36:57

 
你指的是哪个职位?
 
“格式错误的列表”错误表示您缺少一个或多个右括号”)“,我认为我发布的代码没有问题。

Lee Mac 发表于 2022-7-6 08:39:18

我发现了问题。当我复制文件时,我错过了最后一个“)”。但它仍然不起作用。没有错误,只是什么都不做。必须仔细观察。至于现在,我必须在某个地方,所以我将在几个小时后回来测试并检查这个网站。

robbt 发表于 2022-7-6 08:42:22

 
李说得好,谢谢!但是你知道,旧习惯很难改掉。
 
当做
米尔恰

MSasu 发表于 2022-7-6 08:47:46

 
........

Lee Mac 发表于 2022-7-6 08:56:39

我看到在lisp例程中提到使用“vl”和“vla”调用。我正在取消Acad2006,我不知道这个版本是否知道vl标注。我对他们一无所知。我的书是用Acad14印回来的。是的,我已经过时了。有人能帮我做这些标注吗。
页: [1] 2
查看完整版本: 对话框导致锁定