如何正确地将 DCL 链接到 AutoLisp



我正在尝试构建一个非常基本的AutoLisp接口。我是一个完全的初学者,所以在未能从头开始编写代码后,我转向正确学习 DCL。我遵循了本教程:

http://www.afralisp.net/dialog-control-language/tutorials/dialog-boxes-and-autolisp-part-1.php

我得到了同样的错误。AutoCAD基本上退出执行函数,就好像dcl文件甚至不存在一样。

我尝试在其中完全输入地址,但我认为它应该能够简单地工作,就像将 HTML 链接到同一文件夹中找到的图像一样。

下面是我的代码:

鼎盛:

samp1 : dialog {
    label = "Structural Holes";
    ok_cancel;
}

Lisp:

(defun C:samp1()
  (setq dcl_id (load_dialog "samp1.dcl"))
  (if (not (new_dialog "samp1" dcl_id))
    (exit)
    )
  (action_tile
       "cancel"
       "(done_dialog)(setq userclick nil)"
       )
  (action_tile
    "accept"
    "(done_dialog)(setq userclick T))"
    )
  (start_dialog)
  (unload_dialog dcl_id)
  (princ)
 )
(princ)

感谢任何愿意花时间帮助我解决这个问题的人。我开始非常绝望,这是我的第一个也是唯一一个 autolisp 项目,所以我没有任何经验......

LE:请注意,dcl 文件和 lisp 文件都在同一个文件夹中,没有其他子文件夹或其他任何东西。

  1. 找不到 **。DCL 文件
  2. 错误:退出/退出中止
  3. 错误:加载失败

    这通常意味着找不到 autolisp 文件或 DCL 文件。 要解决此问题,请确保将 autolisp 和 DCL 文件放在 AutoCAD 搜索路径中。 更具体地说,将它们放在"支持文件和搜索路径"中的目录中。 要查找 AutoCAD 支持文件和搜索路径列表,请执行以下操作:

  4. 在AutoCAD中,单击"工具"下拉菜单。

  5. 转到选项菜单项。
  6. 单击"文件"选项卡。
  7. 单击支持文件和搜索路径前面的加号 +。

    这是您的搜索路径位置。 此处列出的目录按顺序从上到下搜索您尝试加载的任何 autolisp 程序。 它还用于查找块和 DCL 文件。

    添加存储 autolisp 和 DCL 文件的目录,或将 autolisp 和 DCL 文件移动到此处列出的目录之一。 这应该结束上面列出的错误。

我在这里偶然发现了这条信息:

http://www.jefferypsanders.com/autolisp_nodcl.html

非常感谢杰弗里·桑德斯(JefferyPSanders)为此...

对于它的价值,您还可以在"已知目录"(例如AutoCAD所在的目录)中动态创建一个对话框。下面将说明这一点。

(defun _make-getstring-dialog-on-the-fly ( / fn f dcl dcl_id userclick str) 
  (setq fn (strcat
             (vl-filename-directory
               (findfile "acad.exe")) "\$vld$.dcl")
        f (open fn "w")
        dcl
        '(
          "stringdlg : dialog {"
          "label = "Charater Array";"
          ": edit_box {"
          "label = ">>:";"
          "edit_width = 20;"
          "key = "stringdlg";"
          "is_default = true;"
          "}"
          ": row {"
          "alignment   = centered;"
          "fixed_width = true;"
          " : button {"
          " label      = "OK";"
          " key        = "dcl_accept";"
          " width      = 10;"
          " allow_accept = true;"
          " }"
          "}"
          "}"
          )
        )
  (mapcar 
    (function
      (lambda ( x )
        (write-line x f)
        (write-line "n" f)))
    dcl)
  (close f)
  (setq dcl_id (load_dialog fn))
  (new_dialog "stringdlg" dcl_id)
  (action_tile "stringdlg" "(setq str $value)(done_dialog)")
  (setq userclick (start_dialog))
  (unload_dialog dcl_id)
  str
  )

相关内容

  • 没有找到相关文章

最新更新