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

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

Вычисления внутри первого диалогового окна. как?

Ответ
Поиск в этой теме
Непрочитано 25.09.2012, 15:27 #1
Вычисления внутри первого диалогового окна. как?
Pavel_GP
 
Инженер-гидрограф
 
г.г. Ленинград
Регистрация: 15.09.2011
Сообщений: 170

Здравствуйте.

Код:
[Выделить все]
 			
	;Лисп для предварительного расчета линейных киллометров
(defun C:RasLkm	(/ dcl.id)
  (setq dcl_id (load_dialog "RasLkm.dcl"))

  (if (not (new_dialog "RasLkm" dcl_id))
    (exit)
  )
  (action_tile
    "bt_Cancel"
    "(done_dialog)"
  )
  (action_tile
    "bt_Accept"
    (strcat
      "(progn
    (setq w (atof (get_tile \"ws\")))
    (setq l (atof (get_tile \"ls\")))
    (setq sg (atof (get_tile \"sgs\")))
    (setq pp (atof (get_tile \"pps\")))
    (setq ss (atof (get_tile \"sss\")))
    (setq ms (get_tile \"ms\"))
    (done_dialog)
    )"
    )
  )
  (start_dialog)			;Показать Диалоговое окно
  (unload_dialog dcl_id)		;Закрыть Диалоговое окно
  (princ)
  (if (= ms "EM3")
    (progn
      (cond ((and (<= sg 20) (>= sg 0))
	     (setq wp (* 5. sg));ширина покрытия
	    )
	    ((and (<= sg 37.5) (> sg 20))
	     (setq wp (* 5.3 sg))
	    )
	    ((and (<= sg 50) (> sg 37.5))
	     (setq wp (* 5.2 sg))
	    )
	    ((and (<= sg 70) (> sg 50))
	     (setq wp (* 4.2 sg))
	    )
	    ((and (<= sg 100) (> sg 70))
	     (setq wp (* 3. sg))
	    )
      )
    )
    (progn
      (if (= ms "EM2")
	(progn
	  (setq wp (* 6. sg))
	)
	(progn
	  (setq wp (* 5.5 sg))
	)
      )
    )
  )
  (setq wgals (* (/ wp 100.) pp));ширина фактического покрытия
  (setq gals (+ (fix (/ w wgals)) 1.))	;кол-во галсов
  (setq linkm (* (/ l 1000.) gals))	;кол-во лин/км
  (setq tm (/ (/ linkm (* ss 1.852)) 24.)) ;затраченное время
  (if (< tm 1)
    (progn
      (setq tm (fix (* tm 24.)))
      (alert (strcat "Линейные километры:   "
		 (vl-princ-to-string linkm) 
		 "\n Количество часов:   "
		 (vl-princ-to-string tm)  
	 )
	     )
  )
      (progn
	(setq tmd (fix tm))
	(setq tm4 (fix (* (- tm tmd) 24.)))
	(alert (strcat "Линейные километры:   "
		 (vl-princ-to-string linkm)
		 "\n Количество дней и часов:   "
		 (vl-princ-to-string tmd)"д."(vl-princ-to-string tm4)"ч."
	 )
	     )
	)
	)
)




Код:
[Выделить все]
 RasLkm : dialog {label="Предварительный расчет объемов гидрографических работ";
 : row {
 :boxed_column {label="Параметры для расчета";children_alignment=centered;
 :edit_box {label="Ширина района работ (метры):"; key="ws";
 edit_width=12;}
 :edit_box {label="Длина района работ (метры):"; key="ls";
 edit_width=12;}
 :edit_box {label="Средня глубина в районе работ (метры):"; key="sgs";
 edit_width=12;}
 :radio_row {label="Марка МЛЭ:"; key="ms";
 :radio_button {label="EM3002D"; key ="EM3"; value="1";}
 :radio_button {label="EM2040"; key ="EM2"; value="0";}
 :radio_button {label="EM710RD"; key ="EM7"; value="0";}
 }
 :edit_box {label="Процент перекрытия (%):"; key="pps";
 edit_width=12;}
 :edit_box {label="Средняя скорость судна (уз):"; key="sss";
 edit_width=12;}
 }//конец boxed_column
 
 :spacer {height=1;}
 
}//конец Row

 :spacer {height=1;}

:text {label="© Васин П.А.";alignment=right;}

:row{//label="Готово_Отмена";
      fixed_width=true; //Минимальная ширина по объектам внутри
      alignment = right;//Выровнен по правому краю
    :button{      //Левая кнопка
      key="bt_Accept";    //Имя кнопки в LISP-программе
      label="Вычислить";    //Надпись на кнопке
      is_default=true;    //Срабатывает, если нажат Enter
      is_cancel =false; //Срабатывает, если нажат Х в правом верхнем углу
      is_tab_stop = true;//Фокус переключается между кнопками клавишей Tab
      fixed_width = true;//Ширина кнопки - по ширине надписи
    }//конец кнопки bt_Accept
    :button{    //Правая кнопка
      key="bt_Cancel";    //Имя кнопки
      label="Отмена";  //Надпись на кнопке
      is_default=false;  //Не срабатывает, если нажат Enter
      is_cancel=true;  //Срабатывает, если нажат Х –крестик или Esc
      is_tab_stop = true;//Фокус переключается между кнопками клавишей Tab
      fixed_width = true;//Ширина кнопки - по ширине надписи.
    }//конец кнопки bt_Cancel
   }//конец Row
  }//конец диалога RasLkm


Представляю свой расчет.
Подскажите , как прописать чтобы расчет был внутри диалогового окна, а не по сообщению.
(Пример. Изначально для расчета 2 ячейки пусты, а после расчеты в них появятся значения).
Возможно ли это?
спс.
Просмотров: 5728
 
Непрочитано 25.09.2012, 19:46
1 | #2
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


так?
Вложения
Тип файла: zip RasLkm.zip (1.7 Кб, 42 просмотров)

Последний раз редактировалось gomer, 25.09.2012 в 19:53.
gomer вне форума  
 
Автор темы   Непрочитано 26.09.2012, 09:04
#3
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Цитата:
Сообщение от gomer Посмотреть сообщение
так?
спс за проделанную работу.
Но я предполагал, чтоб результат вычислений был не через alert, а прям в этом же диалоговом окне. Две дополнительные строчки лин/км и затраченное время с начало пустые, а при вычислении заполняются.
Но если, не возможно то и так норм ( остальное это уже наведение красоты).
Пысы: Ваш код , вроде одинаковые действия, но Вы растолковали его по другому.
Пысы: Я сам тему не правильно создал. Результат вычисления...

Последний раз редактировалось Pavel_GP, 26.09.2012 в 11:24. Причина: добавил Пысы
Pavel_GP вне форума  
 
Непрочитано 26.09.2012, 18:26
1 | #4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
результат вычислений был не через alert, а прям в этом же диалоговом окне.
можно и так:
Миниатюры
Нажмите на изображение для увеличения
Название: raslkm.PNG
Просмотров: 115
Размер:	15.4 Кб
ID:	87590  
Вложения
Тип файла: zip RasLkm.zip (1.8 Кб, 38 просмотров)

Последний раз редактировалось gomer, 26.09.2012 в 18:32.
gomer вне форума  
 
Автор темы   Непрочитано 27.09.2012, 11:19
#5
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Цитата:
Сообщение от gomer Посмотреть сообщение
можно и так:
спс.
Доработал код (увидел только, что), не правильно фактическая ширина покрытия вычислялась. Переделал
Если кому нужно, кидаю архив.
Пысы: я его еще отредактирую, добавлю новшество (однолучевую съемку, масштаб)
Вложения
Тип файла: zip RasLkm.zip (2.0 Кб, 38 просмотров)

Последний раз редактировалось Pavel_GP, 27.09.2012 в 12:01. Причина: добавил ПыСы
Pavel_GP вне форума  
 
Непрочитано 27.09.2012, 12:13
#6
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Расчеты я не трогал, для меня главное было как раз марафет навести
Если вы заметили, то выбор марки МЛЭ можно делать с помощью alt + 1, alt + 2, alt + 3, но я не рискнул менять местами, мало ли
gomer вне форума  
 
Автор темы   Непрочитано 27.09.2012, 12:35
#7
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Цитата:
Сообщение от gomer Посмотреть сообщение
Расчеты я не трогал, для меня главное было как раз марафет навести
Если вы заметили, то выбор марки МЛЭ можно делать с помощью alt + 1, alt + 2, alt + 3, но я не рискнул менять местами, мало ли
Расчет у меня изначально был не правильный. марафет Ваш гуд гуд.

Да про выбор МЛЭ, щас посмотрел отлично

ПыСы: МЛЭ - многолучевой эхолот. Без разницы в каком порядке они стоят.

Последний раз редактировалось Pavel_GP, 27.09.2012 в 12:42. Причина: ПыСы
Pavel_GP вне форума  
 
Непрочитано 27.09.2012, 13:35
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Без разницы в каком порядке они стоят
разница в том, что когда жмете alt+1 выбирается последний эхолот, а когда жмете alt+3 выбирается первый
gomer вне форума  
 
Автор темы   Непрочитано 27.09.2012, 13:47
#9
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Цитата:
Сообщение от gomer Посмотреть сообщение
жмете alt+
Удобно если нет мышки, или на буке работаешь. согласен.
Pavel_GP вне форума  
 
Непрочитано 27.09.2012, 16:00
#10
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Если кому нужно, кидаю архив.
Ну в таком виде публиковать наверное рановато...
Нет даже элементарных проверок, например, деление на ноль.
Да и вычисления можно выполнять наверное не нажимая на кнопку "Вычислить",
а просто при вводе величин и переходе на другое поле, например, по TAB будет отображаться результат.
Т.е. экономия наверное копеечная...
Просто я сейчас делал сложное окно с вычислениями и зависимостями, вот и пришло в голову.
Конструкция типа такой:
Код:
[Выделить все]
(action_tile "ws" "(progn (setq ws $value)(set_tile \"ln1\" (setq zn1 (itoa (* (atoi bzn4) (atoi (if (= 0 bzn6) bzn5 bzn6)))))))")
На буковки вычисления "(setq zn1 (itoa (* (atoi bzn4) (atoi (if (= 0 bzn6) bzn5 bzn6)))))))"" не обращать внимание.
Некогда смотреть твою арифметику, оставил что было у меня. Напиши сам
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...

Последний раз редактировалось Alan, 27.09.2012 в 18:20.
Alan вне форума  
 
Автор темы   Непрочитано 28.09.2012, 11:40
#11
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Ув. gomer.
Проверьте плз. правильность кода.:
1. нет возможности делать повторные вычисления (по коду).
2. Что необходимо дописать, чтобы при выборе типа съемки, не нужный вариант затемнялся (не давал выбор).

спс

ПыСы: обновил код, добавил по вашей схеме =)

Цитата:
Сообщение от Alan
Некогда смотреть твою арифметику, ...Напиши сам
?
Вложения
Тип файла: zip RasLkm.zip (2.3 Кб, 32 просмотров)

Последний раз редактировалось Pavel_GP, 28.09.2012 в 11:53.
Pavel_GP вне форума  
 
Непрочитано 28.09.2012, 14:28
#12
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Проверьте плз. правильность кода.:
Классическая ошибка несоответствия типов данных... Ну вот так вот примерно получилось, но обратите внимания, если % перекрытия равен 100, происходит деление на ноль и программа выпадает
Согласен с Alan, Расчеты это твои проблемы
Вложения
Тип файла: zip RasLkm.zip (2.3 Кб, 38 просмотров)
gomer вне форума  
 
Автор темы   Непрочитано 28.09.2012, 14:54
#13
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
проверьте плз. правильность кода.:
По новому коду, при запуске сразу же закрывается.

спс.

Код:
[Выделить все]
 (if (member 0 (list w l sg pp ss))
      (progn
        (set_tile "ln1" "НЕВЕРНЫЕ")
        (set_tile "ln2" "ДАННЫЕ")
      )
если флаг на "ОЛЭ", то sg и pp могут быть не записаны. Они не применяются при вычислениях для этого флага.

Код:
[Выделить все]
 (if (or *w* (setq *w* "500"))
    (set_tile "ws" *w*)
  )
  (if (or *l* (setq *l* "10000"))
    (set_tile "ls" *l*)
  )
  (if (or *sg* (setq *sg* "3"))
    (set_tile "sgs" *sg*)
  )
  (if (or *pp* (setq *pp* "50"))
    (set_tile "pps" *pp*)
  )
  (if (or *ss* (setq *ss* "5"))
    (set_tile "sss" *ss*)
  )
  (if (or *ms* (setq *ms* "EM7"))
    (set_tile "ms" *ms*)
  )
  (if (or *te* (setq *te* "mb"))
    (set_tile "tes" *te*)
  )
Лучше пусть эти строки в окне будут не заполнены.

Последний раз редактировалось Pavel_GP, 28.09.2012 в 15:13. Причина: добавил строку.
Pavel_GP вне форума  
 
Непрочитано 28.09.2012, 15:09
1 | #14
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
По новому коду, при запуске сразу же закрывается.
ой
Вложения
Тип файла: lsp RasLkm.lsp (3.8 Кб, 37 просмотров)
gomer вне форума  
 
Автор темы   Непрочитано 28.09.2012, 15:19
#15
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


спс gomer. Как всегда на высоте.

Цитата:
Сообщение от gomer
но обратите внимания, если % перекрытия равен 100, происходит деление на ноль и программа выпадает
При МЛЭ так и должно быть при %=100, происходит деление на 0., потому что судно будет работать на одном месте.
Миниатюры
Нажмите на изображение для увеличения
Название: рис 1.png
Просмотров: 58
Размер:	30.2 Кб
ID:	87693  

Последний раз редактировалось Pavel_GP, 28.09.2012 в 15:38.
Pavel_GP вне форума  
 
Непрочитано 28.09.2012, 15:51
#16
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


ну тогда вопрос: какой диапазон у % перекрытия, ведь программа не должна выпадать при любых данных
gomer вне форума  
 
Автор темы   Непрочитано 02.10.2012, 14:01
#17
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Ув. gomer.
Проверьте плз. правильность кода. (его краткость, компакт)
Миниатюры
Нажмите на изображение для увеличения
Название: рис 2.png
Просмотров: 58
Размер:	31.8 Кб
ID:	87875  
Вложения
Тип файла: zip RasLkm.zip (2.9 Кб, 35 просмотров)
Pavel_GP вне форума  
 
Непрочитано 02.10.2012, 20:37
#18
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Проверьте плз. правильность кода.
Для начала, куда упрыгнул масштаб планшета? Он же вроде должен быть не доступен при определенных условиях...
У меня такое чувство, что это далеко не последняя редакция
Сейчас уже можно компоновать диалог в 2 колонки ( это потому что лень тянуться к кнопкам сверху)
в принципе rkg и rg можно выбирать в одну строку, если создать список значений и выдергивать их с помощью nth
mp вообще можно не конвертировать

Код:
[Выделить все]
 (progn
			   (cond
			     ((<= l 50000.0) 1.0)
			     ((> l 50000.0) 2.0)
			   )
			 )
даже не буду комментировать...
кстати чем вам rtos не угодила, что вы применили vl-princ-to-string?
ну и насчет коэффициента, чтоб было понятно даже мне, обычно пишут сначала название, потом буквенное обозначение, потом единицы измерения, а не где-то в уголке мелким шрифтом в скобочках
зысы, следите за правописанием, чтоб не было стыдно копирайт выставлять
зызысы Случайно затер Вашим вариантом свой, где сделал коэффициент перекрытия слайдером... ну да ладно

Последний раз редактировалось gomer, 02.10.2012 в 20:45.
gomer вне форума  
 
Автор темы   Непрочитано 03.10.2012, 09:53
#19
Pavel_GP

Инженер-гидрограф
 
Регистрация: 15.09.2011
г.г. Ленинград
Сообщений: 170


Цитата:
Сообщение от gomer Посмотреть сообщение
Для начала, куда упрыгнул масштаб планшета? Он же вроде должен быть не доступен при определенных условиях...
У меня такое чувство, что это далеко не последняя редакция
Сейчас уже можно компоновать диалог в 2 колонки ( это потому что лень тянуться к кнопкам сверху)
1. Масштаб теперь использую для всех вариантов, потому что он необходим если нужно учитывать контрольные галсы.
2. Скомпоновал в 2 колонки.
Цитата:
Сообщение от gomer Посмотреть сообщение
в принципе rkg и rg можно выбирать в одну строку, если создать список значений и выдергивать их с помощью nth
mp вообще можно не конвертировать
3. Не смог вытянуть номер из списка mps, собрал так
Код:
[Выделить все]
 (setq rgl  (list 5.0 10.0 50.0 100.0 1000.0)
      rkgl (list 75.0 150.0 750.0 1500.0 15000.0)
    )
    (setq i (cond
          ((= mp 500.0) 0)
          ((= mp 1000.0) 1)
          ((= mp 5000.0) 2)
          ((= mp 10000.0) 3)
          ((= mp 100000.0) 4)
        )
    )
    (setq rg (nth i rgl))
    (setq rkg (nth i rkgl))
4.
Код:
[Выделить все]
 (if (= mar "0")
               0.0
               (cond
                 ((<= l 50000.0) 1.0)
                 ((> l 50000.0) 2.0)
               )
             )
Пысы: опыта мало у меня, все что сделал за счет знаний из книг авторов Н. Полещук и П. Лоскутов.
Миниатюры
Нажмите на изображение для увеличения
Название: рис 3.png
Просмотров: 40
Размер:	33.8 Кб
ID:	87943  

Последний раз редактировалось Pavel_GP, 03.10.2012 в 13:29. Причина: пункт 3. и 4.
Pavel_GP вне форума  
 
Непрочитано 03.10.2012, 15:51
1 | #20
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Не смог вытянуть номер из списка mps, собрал так
вообще подразумевал список типа
Код:
[Выделить все]
 '(( 500  5.0  75.0)
  (1000 10.0 150.0)
  ;; ...
 )
и отсутствие cond как класса, добавив всего один масштаб, вам придется изменять программу дважды и это очень простая программа... Не надо повторять чужие ошибки.
И вообще, вас не смущает линейная зависимость rg и rkg от масштаба? Если да, то ну его этот список вообще, если нет, то
Код:
[Выделить все]
 (setq
  lst '((500 5.0 75.0)
	    (1000 10.0 150.0)
	;; ...
       )
  mp  (atoi (get_tile "mps"))
  rg  (nth mp (mapcar 'cadr lst))
  rkg (nth mp (mapcar 'caddr lst))
)
- это примерно то, о чем я говорил
ну а забивать список масштабов можно с помощью (mapcar 'itoa (mapcar 'car lst))

по п. 4 (if (= mar "0") 0.0 (if (> l 50000.0) 2.0 1.0))
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вычисления внутри первого диалогового окна. как?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу пример расчета инсоляции FINE Поиск литературы, чертежей, моделей и прочих материалов 266 25.10.2017 18:54
расстояние от уровня земли до окна первого этажа olga_39 Архитектура 13 12.10.2009 17:02
Медленное открытие диалогового окна PLOT AutoCAD 2006 VladD AutoCAD 20 08.06.2006 14:58