Как правильно связать DCL с AutoLisp?

Я пытаюсь создать очень простой интерфейс AutoLisp. Я полностью новичок в этом, поэтому, не сумев написать код с нуля, я перешел к изучению DCL. Я следовал этому уроку:

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

И я получил ту же ошибку. AutoCAD в основном завершает выполнение функции, как будто файл dcl даже не существует.

Я попытался ввести адрес полностью в него, но я думаю, что он должен работать как связывание HTML с изображениями, находящимися в той же папке.

Ниже у вас есть мой код:

DCL:

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, поэтому у меня нет никакого опыта...

Л.Е.: Обратите внимание, что файл dcl и файл lisp находятся в одной и той же папке, без каких-либо других подпапок или чего-либо еще.

2 ответа

Решение
  1. Не удалось найти файл **.DCL
  2. ошибка: выход / выход отменить
  3. ошибка: загрузка не удалась

    Обычно это означает, что файл autolisp или файл DCL не может быть найден. Чтобы решить эту проблему, убедитесь, что вы поместили свои файлы autolisp и DCL в путь поиска AutoCAD. Чтобы быть более точным, поместите их в каталог, который является частью вашего "Файла поддержки и пути поиска". Чтобы найти файл поддержки AutoCAD и список путей поиска, выполните следующие действия:

  4. В AutoCAD щелкните раскрывающееся меню ИНСТРУМЕНТЫ.

  5. Перейдите в пункт меню ОПЦИИ.
  6. Нажмите на вкладку ФАЙЛЫ.
  7. Нажмите на знак плюс + перед ФАЙЛОМ ПОДДЕРЖКИ И ПОИСКОМ.

    Это ваше местоположение пути поиска. Каталоги, перечисленные там, ищутся по порядку сверху вниз для любой программы автолисп, которую вы пытаетесь загрузить. Он также используется для поиска блоков и файлов DCL.

    Либо добавьте каталог, в котором хранятся файлы autolisp и DCL, либо переместите файлы autolisp и DCL в один из каталогов, перечисленных здесь. Это должно положить конец ошибкам, перечисленным выше.

Я случайно наткнулся на эту информацию здесь:

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

ОГРОМНОЕ СПАСИБО ДжеффриПэндерсу за это......

Для чего бы это ни стоило, вы также можете на лету создать диалог в "известном каталоге" (например, в каталоге, в котором находится 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
  )
Другие вопросы по тегам