Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Последовательная работа двух DCL окон

Последовательная работа двух DCL окон

Ответ
Поиск в этой теме
Непрочитано 23.08.2018, 11:29 #1
Последовательная работа двух DCL окон
protorgovec
 
газо- нефтепереработка
 
Уфа
Регистрация: 22.07.2015
Сообщений: 98

Добрый день. Подскажите: составил 2 диалоговых окна
Первое:
Код:
[Выделить все]
 KolichestvoPerehodov: dialog {label = "Корпус колонны"; // название диалогового окна

    : spacer{height=1;} // вставка пустой строки

    : text {label = "Количество переходов"; alignment = centered;}
    
    : row {spacer_0;
    : popup_list {key = "Per"; edit_width=18; list = " \n0\n1\n2"; value = "0"; alignment = centered;}
    spacer_1;}
    
    : spacer{height=1;}   // вставка пустой строки

    ok_cancel;   // добавление кнопок ОК и Отмена
}  // окончание диалога
Второе:
Код:
[Выделить все]
 DiametrKolonni0: dialog {label = "Геометрические параметры"; // название диалогового окна

    : spacer{height=1;} // вставка пустой строки

    : boxed_row {height = 10;
    : column {
    
    : row {
    : text {label = "Внутренний диаметр колонны"; alignment = centered;}
    : edit_box {key = "Dvap"; edit_width=8;}
    }

    : row {
    : text {label = "Толщина стенки"; alignment = centered;}
    : edit_box {key = "Sap"; edit_width=8;}
    }

    : row {
    : text {label = "Нижняя высотная отметка цилиндрической части"; alignment = centered;}
    : edit_box {key = "Zcil"; edit_width=8;}
    }

    : row {
    : text {label = "Высота цилиндрической части"; alignment = centered;}
    : edit_box {key = "Hcil"; edit_width=8;}
    }
    
    }}
    : spacer{height=1;}   // вставка пустой строки

    ok_cancel;   // добавление кнопок ОК и Отмена
}  // окончание диалога
После в лиспе вызываю их:
Код:
[Выделить все]
 (defun KorpusKolonni ()
    (setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Вид корпуса.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Per "0"
    )
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "KolichestvoPerehodov" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                    )
                    (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Per" "(setq Per $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
		        (setq Per (atoi Per))
                    ) 
                )
            )
        )
  
(setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Диаметр колонны 0.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Dvap "0"
              Sap "0"
              Zcil "0"
              Hcil "0"
    )
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "DiametrKolonni0" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                    )
               (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Dvap" "(setq Dvap $value)")
		        (action_tile "Sap" "(setq Sap $value)")
		        (action_tile "Zcil" "(setq Zcil $value)")
		        (action_tile "Hcil" "(setq Hcil $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
                        (setq Dvap (atoi Dvap))
		        (setq Sap (atoi Sap))
		        (setq Zcil (atoi Zcil))
		        (setq Hcil (atoi Hcil))
                    ) 
                )
            )
	  )
  )
Но теперь мне надо, что бы второе диалоговое окно выходило только если выберут в первом варианте вариант ноль.
Вставил условие if:
Код:
[Выделить все]
 (defun KorpusKolonni ()
    (setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Вид корпуса.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Per "0"
    )
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "KolichestvoPerehodov" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                    )
                    (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Per" "(setq Per $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
		        (setq Per (atoi Per))
                    ) 
                )
            )
        )
(if (= Per 1)  
(setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Диаметр колонны 0.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Dvap "0"
              Sap "0"
              Zcil "0"
              Hcil "0"
    ))
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "DiametrKolonni0" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                    )
               (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Dvap" "(setq Dvap $value)")
		        (action_tile "Sap" "(setq Sap $value)")
		        (action_tile "Zcil" "(setq Zcil $value)")
		        (action_tile "Hcil" "(setq Hcil $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
                        (setq Dvap (atoi Dvap))
		        (setq Sap (atoi Sap))
		        (setq Zcil (atoi Zcil))
		        (setq Hcil (atoi Hcil))
                    ) 
                )
            )
	  )
  )
Если выбираю вариант Per = 0, то открывается диалоговое окно, и все хорошо. Но если выбираю другой вариант, он не просто заканчивает работу, а высвечивает ошибка загрузки DCL файла.
Подскажите почему?
Просмотров: 2055
 
Непрочитано 23.08.2018, 11:58
#2
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


может лучше на dotNET перейти?
trir вне форума  
 
Непрочитано 23.08.2018, 12:16
#3
1958


 
Регистрация: 16.04.2016
Сообщений: 72


Цитата:
Сообщение от trir Посмотреть сообщение
может лучше на dotNET перейти?
Офигенный совет!
1958 вне форума  
 
Непрочитано 23.08.2018, 12:41
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Как пример, без обработки нажатий:
Код:
[Выделить все]
 (defun test (/ dcl_file handle dcl_id fun_callback dcl_range dcl_zero dcl_res_range dcl_res_zero)
  (defun fun_callback (key value ref)
    (set ref
         (if (cdr (assoc key (eval ref)))
           (subst (cons key value) (assoc key (eval ref)) (eval ref))
           (cons (cons key value) (eval ref))
           ) ;_ end of if
         ) ;_ end of set
    ) ;_ end of defun
  (setq dcl_file (strcat (vl-string-right-trim "\\" (getenv "temp")) "\\dlg.dcl")
        handle   (open dcl_file "w")
        ) ;_ end of setq
  (foreach item '("dlg_range:dialog{label=\"Корпус колонны\";"                                   "	spacer_1;"
                  "	:popup_list{label=\"Кол-во переходов\";key=\"range\";}"                  "	ok_cancel;"
                  "	}"                                                                       "dlg_diamzero:dialog{label=\"Геом.хар-ки\";"
                  "	:edit_box {key = \"dvap\";label = \"Внутренний диаметр колонны\"; edit_width=8;}"
                  "	:edit_box {key = \"sap\"; label = \"Толщина стенки\"; edit_width=8;}"    "	:edit_box {key = \"zcil\";label = \"Нижняя высотная отметка цилиндрической части\";edit_width=8;}"
                  "	:edit_box {key = \"hcil\"; label = \"Высота цилиндрической части\";edit_width=8;}"
                  "	ok_cancel;"                                                              "	}"
                  )
    (write-line item handle)
    ) ;_ end of foreach
  (close handle)
  (setq dcl_id (load_dialog dcl_file))
  (new_dialog "dlg_range" dcl_id "(fun_callback $key $value 'dcl_range)")
  (action_tile "accept" "(done_dialog 1)")
  (action_tile "cancel" "(done_dialog 0)")
  (start_list "range" 3)
  (mapcar (function add_list) '("0" "1" "2"))
  (end_list)
  (set_tile "range" "0")
  (fun_callback "range" "0" 'dcl_range)
  (setq dcl_res_range (start_dialog))
  (if (= dcl_res_range 1)
    (progn
;;;
      (if (= (cdr (assoc "range" dcl_range)) "0")
        (progn (new_dialog "dlg_diamzero" dcl_id "(fun_callback $key $value 'dcl_zero)")
               (action_tile "accept" "(done_dialog 1)")
               (action_tile "cancel" "(done_dialog 0)")
               (foreach key '("dvap" "sap" "zcil" "hcil") (set_tile key "0") (fun_callback key "0" 'dcl_zero))
               (setq dcl_res_zero (start_dialog))
               (if (= dcl_res_zero 1)
                 (progn
;;;
                   (alert (strcat "Вызван второй диалог"
                                  (apply (function strcat)
                                         (mapcar (function (lambda (x) (strcat "\n" (car x) " = " (cdr x)))) dcl_zero)
                                         ) ;_ end of apply
                                  ) ;_ end of strcat
                          ) ;_ end of alert
                   ) ;_ end of progn
                 ) ;_ end of if
               ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  (unload_dialog dcl_id)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.08.2018, 13:27
#5
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Как пример, без обработки нажатий:
Код:
[Выделить все]
 (defun test (/ dcl_file handle dcl_id fun_callback dcl_range dcl_zero dcl_res_range dcl_res_zero)
  (defun fun_callback (key value ref)
    (set ref
         (if (cdr (assoc key (eval ref)))
           (subst (cons key value) (assoc key (eval ref)) (eval ref))
           (cons (cons key value) (eval ref))
           ) ;_ end of if
         ) ;_ end of set
    ) ;_ end of defun
  (setq dcl_file (strcat (vl-string-right-trim "\\" (getenv "temp")) "\\dlg.dcl")
        handle   (open dcl_file "w")
        ) ;_ end of setq
  (foreach item '("dlg_range:dialog{label=\"Корпус колонны\";"                                   "	spacer_1;"
                  "	:popup_list{label=\"Кол-во переходов\";key=\"range\";}"                  "	ok_cancel;"
                  "	}"                                                                       "dlg_diamzero:dialog{label=\"Геом.хар-ки\";"
                  "	:edit_box {key = \"dvap\";label = \"Внутренний диаметр колонны\"; edit_width=8;}"
                  "	:edit_box {key = \"sap\"; label = \"Толщина стенки\"; edit_width=8;}"    "	:edit_box {key = \"zcil\";label = \"Нижняя высотная отметка цилиндрической части\";edit_width=8;}"
                  "	:edit_box {key = \"hcil\"; label = \"Высота цилиндрической части\";edit_width=8;}"
                  "	ok_cancel;"                                                              "	}"
                  )
    (write-line item handle)
    ) ;_ end of foreach
  (close handle)
  (setq dcl_id (load_dialog dcl_file))
  (new_dialog "dlg_range" dcl_id "(fun_callback $key $value 'dcl_range)")
  (action_tile "accept" "(done_dialog 1)")
  (action_tile "cancel" "(done_dialog 0)")
  (start_list "range" 3)
  (mapcar (function add_list) '("0" "1" "2"))
  (end_list)
  (set_tile "range" "0")
  (fun_callback "range" "0" 'dcl_range)
  (setq dcl_res_range (start_dialog))
  (if (= dcl_res_range 1)
    (progn
;;;
      (if (= (cdr (assoc "range" dcl_range)) "0")
        (progn (new_dialog "dlg_diamzero" dcl_id "(fun_callback $key $value 'dcl_zero)")
               (action_tile "accept" "(done_dialog 1)")
               (action_tile "cancel" "(done_dialog 0)")
               (foreach key '("dvap" "sap" "zcil" "hcil") (set_tile key "0") (fun_callback key "0" 'dcl_zero))
               (setq dcl_res_zero (start_dialog))
               (if (= dcl_res_zero 1)
                 (progn
;;;
                   (alert (strcat "Вызван второй диалог"
                                  (apply (function strcat)
                                         (mapcar (function (lambda (x) (strcat "\n" (car x) " = " (cdr x)))) dcl_zero)
                                         ) ;_ end of apply
                                  ) ;_ end of strcat
                          ) ;_ end of alert
                   ) ;_ end of progn
                 ) ;_ end of if
               ) ;_ end of progn
        ) ;_ end of if
      ) ;_ end of progn
    ) ;_ end of if
  (unload_dialog dcl_id)
  ) ;_ end of defun
Ух Алексей, всегда поражался, насколько ты продвинут! Я тут как в темном лесу. А почему простая функция если не работает? Ведь если выполняется условие, то работай программа. Если нет, то перескакивай. Почему здесь так нельзя?
protorgovec вне форума  
 
Непрочитано 23.08.2018, 14:21
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Смотри - создается dcl, вызывается первый диалог, обрабатывается. Если там нажат OK (if (= dcl_res_range 1) ...), то вызываем второй диалог, с его собственным обработчиком. Первый диалог не гасится.
Так что все работает.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 23.08.2018, 14:31
#7
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Смотри - создается dcl, вызывается первый диалог, обрабатывается. Если там нажат OK (if (= dcl_res_range 1) ...), то вызываем второй диалог, с его собственным обработчиком. Первый диалог не гасится.
Так что все работает.
Но а не составит сложности мне это дальше? Первый диалог имеет три варианта ответа. 0, 1 или 2. За каждым вариантом ответа следует свой отдельный диалог.

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Смотри - создается dcl, вызывается первый диалог, обрабатывается. Если там нажат OK (if (= dcl_res_range 1) ...), то вызываем второй диалог, с его собственным обработчиком. Первый диалог не гасится.
Так что все работает.
После небольшого построения, пойдут следующие диалоговые окна.

----- добавлено через ~16 мин. -----
Цитата:
Сообщение от protorgovec Посмотреть сообщение
Но а не составит сложности мне это дальше? Первый диалог имеет три варианта ответа. 0, 1 или 2. За каждым вариантом ответа следует свой отдельный диалог.

----- добавлено через ~1 мин. -----


После небольшого построения, пойдут следующие диалоговые окна.
ААААААААААААААААААААА, короче сделал. Было так

Код:
[Выделить все]
 (defun KorpusKolonni ()
    (setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Вид корпуса.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Per "0"
    )
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "KolichestvoPerehodov" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                    )
                    (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Per" "(setq Per $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
		        (setq Per (atoi Per))
                    ) 
                )
            )
        )
  
(if (= Per 1)  
(setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Диаметр колонны 0.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Dvap "0"
              Sap "0"
              Zcil "0"
              Hcil "0"
    )
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "DiametrKolonni0" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                   )
               (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Dvap" "(setq Dvap $value)")
		        (action_tile "Sap" "(setq Sap $value)")
		        (action_tile "Zcil" "(setq Zcil $value)")
		        (action_tile "Hcil" "(setq Hcil $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
                        (setq Dvap (atoi Dvap))
		        (setq Sap (atoi Sap))
		        (setq Zcil (atoi Zcil))
		        (setq Hcil (atoi Hcil))
                    ) 
                )
            )
	  ))
  )

Стало так:
Код:
[Выделить все]
 (defun KorpusKolonni ()
    (setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Вид корпуса.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Per "0"
    )
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "KolichestvoPerehodov" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                    )
                    (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Per" "(setq Per $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
		        (setq Per (atoi Per))
                    ) 
                )
            )
        )
  
(if (= Per 1)  
(setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Диаметр колонны 0.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Dvap "0"
              Sap "0"
              Zcil "0"
              Hcil "0"
    ))
        (if (= Per 1) (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "DiametrKolonni0" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                   )
               (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Dvap" "(setq Dvap $value)")
		        (action_tile "Sap" "(setq Sap $value)")
		        (action_tile "Zcil" "(setq Zcil $value)")
		        (action_tile "Hcil" "(setq Hcil $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
                        (setq Dvap (atoi Dvap))
		        (setq Sap (atoi Sap))
		        (setq Zcil (atoi Zcil))
		        (setq Hcil (atoi Hcil))
                    ) 
                )
            )
	  ))
  )
Просто дублировал условие если, и все заработало честно не понимаю как так, но работает

----- добавлено через ~16 мин. -----
Цитата:
Сообщение от protorgovec Посмотреть сообщение
Но а не составит сложности мне это дальше? Первый диалог имеет три варианта ответа. 0, 1 или 2. За каждым вариантом ответа следует свой отдельный диалог.

----- добавлено через ~1 мин. -----


После небольшого построения, пойдут следующие диалоговые окна.

----- добавлено через ~16 мин. -----


ААААААААААААААААААААА, короче сделал. Было так

Код:
[Выделить все]
 (defun KorpusKolonni ()
    (setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Вид корпуса.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Per "0"
    )
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "KolichestvoPerehodov" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                    )
                    (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Per" "(setq Per $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
		        (setq Per (atoi Per))
                    ) 
                )
            )
        )
  
(if (= Per 1)  
(setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Диаметр колонны 0.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Dvap "0"
              Sap "0"
              Zcil "0"
              Hcil "0"
    )
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "DiametrKolonni0" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                   )
               (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Dvap" "(setq Dvap $value)")
		        (action_tile "Sap" "(setq Sap $value)")
		        (action_tile "Zcil" "(setq Zcil $value)")
		        (action_tile "Hcil" "(setq Hcil $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
                        (setq Dvap (atoi Dvap))
		        (setq Sap (atoi Sap))
		        (setq Zcil (atoi Zcil))
		        (setq Hcil (atoi Hcil))
                    ) 
                )
            )
	  ))
  )

Стало так:
Код:
[Выделить все]
 (defun KorpusKolonni ()
    (setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Вид корпуса.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Per "0"
    )
        (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "KolichestvoPerehodov" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                    )
                    (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Per" "(setq Per $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
		        (setq Per (atoi Per))
                    ) 
                )
            )
        )
  
(if (= Per 1)  
(setq dcl_filename_full "U:\\Автоматизация проекта\\Lisp\\Проект колонны\\Корпус колонны\\Диаметр колонны 0.dcl"
              fs_dcl_id (load_dialog dcl_filename_full)
              Dvap "0"
              Sap "0"
              Zcil "0"
              Hcil "0"
    ))
        (if (= Per 1) (if (not fs_dcl_id)
            (progn
                (alert "Ошибка загрузки DCL файла!")
                (exit)
            )
            (progn
                (if (not (new_dialog "DiametrKolonni0" fs_dcl_id))
                    (progn
                        (alert "Ошибка загрузки DCL файла!")
                        (exit)
                   )
               (progn
                        (action_tile "OK" "(done_dialog 1)")
                        (action_tile "Cancel" "(done_dialog 2)")
		        (action_tile "Dvap" "(setq Dvap $value)")
		        (action_tile "Sap" "(setq Sap $value)")
		        (action_tile "Zcil" "(setq Zcil $value)")
		        (action_tile "Hcil" "(setq Hcil $value)")
                        (setq diag_result (start_dialog))
                        (unload_dialog fs_dcl_id)
                        (setq Dvap (atoi Dvap))
		        (setq Sap (atoi Sap))
		        (setq Zcil (atoi Zcil))
		        (setq Hcil (atoi Hcil))
                    ) 
                )
            )
	  ))
  )
Просто дублировал условие если, и все заработало честно не понимаю как так, но работает
добавил повтор если на 37 строчке
protorgovec вне форума  
 
Непрочитано 23.08.2018, 17:22
#8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,007


Offtop:
Цитата:
Сообщение от 1958 Посмотреть сообщение
Офигенный совет!
это правильный совет: человек делает некую информационную систему на языке - который меньше всего предназначен для создания развитых диалогов. Я бы еще дополнил - не только .Net, но и WPF еще. На последнем делать модифицируемые окна наподобие приведенного здесь вообще как два пальца - описываете несколько блоков контролов (в данную случае внешние контейнеры Case1 и т.д.) друг под другом, а потом в обработчике изменения выбора количества отводов:

Код:
[Выделить все]
/// <summary>
        /// Обратчик изменения выбора количества отводов
        /// </summary>
        /// <param name="sender">Combobox - источник сообщения</param>
        /// <param name="e">Дополнительные аргументы</param>
        private void SelectNumOfTaps_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            // Получаем индекс выделенного в списке элемента 
            int lSelNumOfTaps = (sender as ComboBox).SelectedIndex;
            // В зависимости от индекса оставляем видимым (несвернутым) только один блок
            if(Case1!=null)
            {
                Case1.Visibility = lSelNumOfTaps == 0 ? Visibility.Visible : Visibility.Collapsed;
            }
            if(Case2!=null)
            {
                Case2.Visibility = lSelNumOfTaps == 1 ? Visibility.Visible : Visibility.Collapsed;
            }
            if(Case3!=null)
            {
                Case3.Visibility = lSelNumOfTaps == 2 ? Visibility.Visible : Visibility.Collapsed;
            }
            // Командуем окну подстроиться под изменившуюся высоту
            this.InvalidateArrange();
        }



Offtop: Просто убираете ненужные блоки контролов присвоением их свойству видимости Visibility значение Collapsed (не резервировать место в окне) - все остальное сделает WPF за вас. Но, как говорится - дело хозяйское
Миниатюры
Нажмите на изображение для увеличения
Название: Вариант_Исходный.JPG
Просмотров: 33
Размер:	35.8 Кб
ID:	205611  Нажмите на изображение для увеличения
Название: Вариант_1.JPG
Просмотров: 26
Размер:	23.3 Кб
ID:	205612  Нажмите на изображение для увеличения
Название: Вариант_2.JPG
Просмотров: 15
Размер:	24.1 Кб
ID:	205613  Нажмите на изображение для увеличения
Название: Вариант_3.JPG
Просмотров: 20
Размер:	27.0 Кб
ID:	205614  
Сергей812 вне форума  
 
Непрочитано 24.08.2018, 11:37
#9
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


Offtop:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
это правильный совет


больше смахивает на...
Миниатюры
Нажмите на изображение для увеличения
Название: hormel_spma.png
Просмотров: 15
Размер:	1.60 Мб
ID:	205637  
koMon вне форума  
 
Непрочитано 24.08.2018, 12:00
| 2 #10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Offtop:
Цитата:
больше смахивает на...
просто больно смотреть, когда люди занимаются ректальной стоматологией...
trir вне форума  
 
Непрочитано 24.08.2018, 13:16
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,007


Причем xaml так же пишется разметка тэгами, как и в DCL - только в современной среде разработки) И сразу после внесения очередного контрола в описание окна автоматически (ну или максимум переключаясь на соседнюю вкладку) - как это будет выглядеть.
Сергей812 вне форума  
 
Непрочитано 24.08.2018, 13:30
#12
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Причем xaml так же пишется разметка тэгами, как и в DCL - только в современной среде разработки
Когда Autodesk ложилась под Microsoft, обещали, что XAML будет общим языком описания диалогов вместо устаревшего DCL. Было бы очень хорошо.
И, хотя это сделать не трудно - не сделали. "Пипл хавает".
ShaggyDoc вне форума  
 
Непрочитано 24.08.2018, 13:47
#13
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
Когда Autodesk ложилась под Microsoft, обещали, что XAML будет общим языком описания диалогов вместо устаревшего DCL. Было бы очень хорошо.
И, хотя это сделать не трудно - не сделали. "Пипл хавает".
хм
trir вне форума  
 
Непрочитано 27.08.2018, 09:02
#14
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от trir Посмотреть сообщение
Ну и что? Там всё правильно написано про .NET - преимущества, недостатки.

Но в отношении так называемого "Visual" Lisp так и показано, что никакой "вижуальности" и работы с XAML как не было, так и нет.

Приводится пример, что с .NET можно сделать для ЛИСП "Вызов LISP функции: (mrX:get-halturka-parameters)". Так такое я делал задолго до включения .NET в AutoCAD.

Вся "вижуальность" заключена в DLL, сделанной в другой среде программирования. Это делали мы даже в AutoCAD R10, когда был только обычный Автолисп. И сейчас это можно делать несколькими способами. Я много раз такие примеры приводил.

Если бы фирма действительно хотела сделать "вижуальный" Лисп, она бы включила в него непосредственное чтение и обработку XAML. Сделанных хоть в другой среде, хоть в Notepad. А еще лучше - включить в IDE Vl и конструктор форм. Пусть внешний.

Но фирме этого не надо. "Пипл хавает".
ShaggyDoc вне форума  
 
Непрочитано 28.08.2018, 13:05
#15
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Offtop:
Цитата:
Если бы фирма действительно хотела сделать "вижуальный" Лисп, она бы включила в него непосредственное чтение и обработку XAML. Сделанных хоть в другой среде, хоть в Notepad. А еще лучше - включить в IDE Vl и конструктор форм. Пусть внешний.
фирма запихала в Revit - SharpDevelop, это показатель
trir вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Последовательная работа двух DCL окон

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расчёт анкерных болтов на моменты в двух плоскостях. 3MEi86 Конструкции зданий и сооружений 50 24.06.2022 09:43
Синхронный просмотр двух окон. Возможно ли такое? Nata1 AutoCAD 23 12.12.2017 13:34
На каком расстоянии от окон жилого дома допускается выброс продуктов горения из встроенной в данной жилой дом подземной автостоянки? fadeaway Пожарная безопасность 9 13.02.2016 14:58
Какая работа интереснее Саразан Профессии и трудовые отношения 45 13.01.2012 16:07
Работа профнастила Net Прочее. Архитектура и строительство 17 06.03.2006 22:21