|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
05.07.2005, 14:38 | #1 | |
написание диалога на лиспе
Регистрация: 15.06.2005
Сообщений: 184
|
||
Просмотров: 6464
|
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
А это для разминки:
dcl_settings : default_dcl_settings { audit_level = 0; } dialog1 : dialog { label = "ЗАГОЛОВОК ДИАЛОГА #1"; : row { : column { : text_part {value = " СЛАЙД РИСУНКА"; alignment = children_alignment; } : image { key = "dwg_image"; color = graphics_foreground; width = 36; height = 12;} } : column { : radio_button { label = "Первый"; key = "rad1"; value = "1";} : radio_button { label = "Второй"; key = "rad2"; value = "0";} : radio_button { label = "Третий"; key = "rad3"; value = "0";} : radio_button { label = "Десятый"; key = "rad10"; value = "0";} }} spacer; : row { : button {label = "Временный выход"; key = "for"; action = "(Функция вызова второго окна диалога)";} //или action = "(done_dialog 10)";} //тогда в функции вызова диалога "action_tile" //этой кнопки должен иметь вид: //(action_tile "for" "(done_dialog 10)") ok_cancel; }} dialog2 : dialog { label = "ЗАГОЛОВОК ДИАЛОГА #2"; spacer_1; : column { :list_box { key = "alist"; label = "СПИСОК ЧЕГО-ТО ПЕРВОГО"; width = 30; multiple_select=false; } opup_list { key = "blist"; label = "СПИСОК ЧЕГО-ТО ДРУГОГО"; width = 30; } } spacer; : row { : button {label = "Возврат обратно"; key = "back"; action = "(Функция вызова первого окна диалога)";} //или action = "(done_dialog 11)";} //тогда в функции вызова диалога "action_tile" //этой кнопки должен иметь вид: //(action_tile "back" "(done_dialog 11)") ok_cancel; }} Успехов |
|||
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
А вообще мне лично больше нравится чтобы диалоги
сами создавались из лиспа (это на любителя) (defun make-dial () ;;;(setq fname (vl-filename-mktemp "lesson.dcl")) (setq fname (strcat (getvar "dwgprefix") "lesson2.dcl")) (setq fn (open fname "w")) (write-line "dcl_settings : default_dcl_settings { audit_level = 0; }" fn) (write-line "dialog1 : dialog {" fn) (write-line (strcat "label = " "\"" "ЗАГОЛОВОК ДИАЛОГА #1" "\"" ";") fn) (write-line ": row {" fn) (write-line ": column {" fn) (write-line (strcat ": text_part {value = " "\"" " СЛАЙД РИСУНКА" "\"" ";") fn) (write-line "alignment = children_alignment; }" fn) (write-line (strcat ": image { key = " "\"" "dwg_image" "\"" ";") fn) (write-line "color = graphics_foreground;" fn) (write-line "width = 36; height = 12;}" fn) (write-line "}" fn) (write-line ": column {" fn) (write-line ": radio_button {" fn) (write-line (strcat "label = " "\"" "Первый" "\"" ";") fn) (write-line (strcat "key = " "\"" "rad1" "\"" ";") fn) (write-line "value = \"1\";}" fn) (write-line ": radio_button {" fn) (write-line (strcat "label = " "\"" "Второй" "\"" ";") fn) (write-line (strcat "key = " "\"" "rad2" "\"" ";") fn) (write-line "value = \"0\";}" fn) (write-line ": radio_button {" fn) (write-line (strcat "label = " "\"" "Третий" "\"" ";") fn) (write-line (strcat "key = " "\"" "rad3" "\"" ";") fn) (write-line "value = \"0\";}" fn) (write-line ": radio_button {" fn) (write-line (strcat "label = " "\"" "Десятый" "\"" ";") fn) (write-line (strcat "key = " "\"" "rad10" "\"" ";") fn) (write-line "value = \"0\";}" fn) (write-line "}}" fn) ;;И так далее (write-line "spacer;" fn) (write-line ": column {" fn) (write-line (strcat ": button {label = " "\"" "Временный выход" "\"" ";") fn) (write-line (strcat "key = " "\"" "for" "\"" ";") fn) (write-line (strcat "action = " "\"" "(done_dialog 10)" "\"" ";}") fn) (write-line "ok_cancel; " fn) (write-line "}}" fn) ;; (write-line "dialog2 : dialog {" fn) (write-line (strcat "label = " "\"" "ЗАГОЛОВОК ДИАЛОГА #2" "\"" ";") fn) (write-line ": column {" fn) (write-line ": list_box {" fn) (write-line (strcat "label = " "\"" "СПИСОК #1" "\"" ";") fn) (write-line (strcat "key = " "\"" "list1" "\"" ";") fn) (write-line "width = 30; height = 12;}" fn) (write-line (strcat ": text_part {value = " "\"" "СПИСОК #2" "\"" ";}") fn) (write-line ": popup_list {" fn) (write-line (strcat "key = " "\"" "list2" "\"" ";") fn) (write-line "width = 30;}" fn) (write-line "}" fn) (write-line "spacer;" fn) (write-line ": column {" fn) (write-line (strcat ": button {label = " "\"" "Возврат обратно" "\"" ";") fn) (write-line (strcat "key = " "\"" "back" "\"" ";") fn) (write-line (strcat "action = " "\"" "(done_dialog 11)" "\"" ";}") fn) (write-line "ok_cancel; " fn) (write-line "}}" fn) (close fn) ) ;Вызов: (make-dial) |
|||
|
||||
электрик Регистрация: 11.03.2005
Киев
Сообщений: 157
|
>Fatty (05 Июл 2005 22:25)
Идея не плоха. Есть возможность с лиспа менять некоторые параметры окон до запуска. Если Вам так удобно, то чтобы не писать сто раз Код:
|
|||
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
Александер
http://www.cadgineering.ca/Downloads.html Скачай PROTOBOX очень простая и удбная програмка, попробуй демо, если понравится у меня есть полная версия. |
|||
|
||||
Регистрация: 15.06.2005
Сообщений: 184
|
<Fatty спасибо, то что нужно, немного переделать и подойдет.
Да, правильно заметил, я недавно dcl осваиваю <Startrek если не трудно скинь программку на: [email protected] посмотрел -программка хороша спасибо всем. |
|||
|
||||
Регистрация: 15.06.2005
Сообщений: 184
|
<Fatty
: image { key = "dwg_image"; color = graphics_foreground; width = 36; height = 12;} } можно здесь немного рассказать поподробнее? где указывать граф. объект. например если я хочу чтобы в окне отображался слайд, например slide1, находящийся в библиотеке слайдов slides? как это сделать? |
|||
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
Очень сложно понять чтo нужно вслепую,
но попробуй проиграть такой кусок, естественно, что аргументы нужны свои, единственно, что здесь обязательно, это одинаковые названия для рисунка и соответствующего слайда, т. е.: bolt.dwg и bolt.sld, и те и другие лежат в одной папке Не забудь прописать свой путь к директории блоков Мне лично эта рутина не очень нравится, но нет мотивации переделывать... ;* ВСТАВКА БЛОКОВ ИЗ БИБЛИОТЕКИ * ВЫЗОВ: NBB * ; 4/13/05 8:20 AM ; //////////// //////////// //////////// ///////////// ///// ///// ///// ///// ///// ///// ///// ////////////// ///// ///////////// ///// ///// //// ///// ///// //// //////// ///// ////// //// /////// ///// ///// //// ;;;;========================================================= ;;;; | my-block-lib-dcl.lsp | Copyright (c) 2005 Fatty | ;;;;========================================================= (defun make-lib-dial () (setq fname (vl-filename-mktemp "libris.dcl")) ;;; (setq fname (strcat (getvar "dwgprefix") "librys.dcl")) (setq fn (open fname "w")) (write-line "libres : dialog {" fn) (write-line (strcat "label = " "\"" "СПИСОК БИБЛИОТЕК" "\"" ";") fn) (write-line ": row {" fn) (write-line ": column {" fn) (write-line ": list_box {" fn) (write-line (strcat "label = " "\"" "Выбрать файл" "\"" ";") fn) (write-line (strcat "key = " "\"" "dwg_list" "\"" ";") fn) (write-line "width = 20; height = 8;}" fn) (write-line "}" fn) (write-line ": column {" fn) (write-line ": list_box { label = \"Выбрать блок\";" fn) (write-line (strcat "key = " "\"" "slides" "\"" ";") fn) (write-line "width = 16; height = 8;}" fn) (write-line "}" fn) (write-line "}" fn) (write-line ": column {" fn) (write-line (strcat ": text_part {value = " "\"" " Слайд блока" "\"" ";") fn) (write-line "alignment = children_alignment; }" fn) (write-line (strcat ": image { key = " "\"" "dwg_image" "\"" ";") fn) (write-line "color = graphics_foreground;" fn) (write-line "width = 36; height = 12;}" fn) (write-line "}" fn) (write-line "spacer;" fn) (write-line "ok_cancel; " fn) (write-line "}" fn) (close fn) ) ;;;(make-lib-dial);ok ; browser from Tony Tanzillo (yada man) ; (defun my-browse-folder (msg path / sh fld folderobject result) (vl-load-com) (setq sh (vla-getInterfaceObject (vlax-get-acad-object) "Shell.Application")) (setq fld (vlax-invoke-method sh 'BrowseForFolder 0 msg 512 path ) ) (vlax-release-object sh) (if fld (progn (setq folderobject (vlax-get-property fld 'Self)) (setq result (vlax-get-property FolderObject 'Path)) (vlax-release-object fld) (vlax-release-object folderobject ) result ) ) ) ; ; (defun my-block-files (path / lst) (setq lst (vl-directory-files path "*.dwg" 1)) lst ) ; ; (defun set_list (name lst) (start_list name) (mapcar 'add_list lst) (end_list)) ; ; (defun set_val (name val) (set_tile name val)) ; ; (defun set_image (val) (start_image "dwg_image") (fill_image 0 0 (dimx_tile "dwg_image") (dimy_tile "dwg_image") -2) (slide_image 0 0 (dimx_tile "dwg_image") (dimy_tile "dwg_image") val) (end_image) ) ; ; (defun add_blocks (lib_name path / ) (setq pat (vl-string-right-trim ".dwg" lib_name) sld_lst (acad_strlsort (vl-remove-if (function not) (mapcar (function (lambda (x)(if (wcmatch (substr x 1 (strlen pat)) pat) x))) (vl-directory-files path "*.sld" 1)))))) ; ; (defun run-lib-dial () (setq blk_lst nil) (setq path (my-browse-folder "ВЫБРАТЬ ДИРЕКТОРИЮ БИБЛИОТЕКИ" "D:\\AUTOLISP\\SAPR\\MyTips\\")) (setq blk_lst (my-block-files path)) (setq dcl_ex (load_dialog fname)) (new_dialog "libres" dcl_ex) (set_list "dwg_list" blk_lst) (action_tile "dwg_list" (strcat "(progn " "(setq lib_name (nth (atoi $value) blk_lst))" "(setq sld_lst (add_blocks lib_name path))" "(set_list \"slides\" sld_lst))")) (action_tile "slides" (strcat "(progn " "(setq sld (nth (atoi $value) sld_lst))" "(set_image (strcat path \"\\\\\" (vl-string-subst \"\" \".sld\" sld))))" )) (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq knock (start_dialog)) (unload_dialog dcl_ex) (done_dialog) (vl-file-delete fname) ) ; ; (prompt "\nВвести в командной строке: NBB для запуска программы\n") ; ; (defun c:nbb () (vl-load-com) (gc) (make-lib-dial) (run-lib-dial) (if (= knock 1) (progn (command "_.insert" (strcat path "\\" lib_name)) (command) (setq blk (vl-string-subst "" ".sld" sld)) (if (tblsearch "block" blk) (vl-cmdf "_.insert" blk (getpoint "\nPick Point:") 1 1 0) (progn (vla-eval (vlax-get-acad-object) (strcat "MsgBox \"" (strcat "Блок: " blk " не найден ") "\"" ", " "vbcritical" ", " "\"" "ПРЕДУПРЕЖДЕНИЕ:" "\"")) (princ))))) (princ)) ; ; Если что звони |
|||
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
Я проверил все работает, все вставляет, просто я неправильно объяснил
сам метод создания библиотеки. У меня организовано так: Создана папка BlockLib В этой папке находятся чертежи Fittings.dwg, Pipes.dwg и т.д А вот уже для каждого блока чертежа создаются одноименные слайды Fittings1.sld, Fittings2.sld, Fittings3.sld и т.д. Естественно, что это только для обкатки, а рабочую библиотеку нужно будет создавать по другим правилам это уже как тебе будет удобно, просто тогда изменятся функции поиска пути, выделения имени папки и т.д. Звони если что |
|||
|
||||
Lisp/VBA/VB.NET Hobbyist Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367
|
Хорошо, я сделаю тебе образец библиотеки и вышлю, а ты посмотришь как работает, только блоки создам безотносительно - только для примера
Правильно говорят: "Нормальная программа должна работать только на компьютере автора, в его присутствии и под его наблюдением..." |
|||
|
||||
Регистрация: 15.06.2005
Сообщений: 184
|
вот мой адрес:
[email protected] |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,855
|
*.cdc - файл создается DesignCenter'ом када в момент обращения к какому-то каталогу. Чего в нем такого нужного - хрен его знает...
по поводу "блок ссылается сам на себя". Если выполняется вставка "внешнего" блока через _insert, то тут такая история: Например, есть файл "ФайлБлока1.dwg", внутри него какие-то там примитивы. После _insert и указания в качестве имени блока этого файла в конечном файле будет новый блок ФайлБлока1. А теперь внимание, бонус! Если внутри ФайлБлока1.dwg есть какие-то блоки, то они вставляются как составляющие ФайлБлока1 (т.е. вложенные блоки). И если, не дай боже, внутри ФайлБлока1.dwg есть блок ФайлБлока1, то что получится в конечном файле? Правильно, блок ФайлБлока1, входящий в состав ФайлБлока1. Т.е. блок ссылается сам на себя
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||