Как правильно связать 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 ответа
- Не удалось найти файл **.DCL
- ошибка: выход / выход отменить
ошибка: загрузка не удалась
Обычно это означает, что файл autolisp или файл DCL не может быть найден. Чтобы решить эту проблему, убедитесь, что вы поместили свои файлы autolisp и DCL в путь поиска AutoCAD. Чтобы быть более точным, поместите их в каталог, который является частью вашего "Файла поддержки и пути поиска". Чтобы найти файл поддержки AutoCAD и список путей поиска, выполните следующие действия:
В AutoCAD щелкните раскрывающееся меню ИНСТРУМЕНТЫ.
- Перейдите в пункт меню ОПЦИИ.
- Нажмите на вкладку ФАЙЛЫ.
Нажмите на знак плюс + перед ФАЙЛОМ ПОДДЕРЖКИ И ПОИСКОМ.
Это ваше местоположение пути поиска. Каталоги, перечисленные там, ищутся по порядку сверху вниз для любой программы автолисп, которую вы пытаетесь загрузить. Он также используется для поиска блоков и файлов 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
)