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

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

Вывод результата вычислений в окне DCL?

Ответ
Поиск в этой теме
Непрочитано 03.09.2015, 14:35
Вывод результата вычислений в окне DCL?
Pavel_GP
 
Инженер-гидрограф
 
г.г. Ленинград
Регистрация: 15.09.2011
Сообщений: 170

Здравствуйте.
Собрал для себя программку, но есть проблемы, подскажите плз.:
Вопрос: Результаты вычислений не отображаются в диалоговом окне, окно закрывается после нажатия кнопки "Вычислить", как исправить?
Спасибо.
P.S. После выбора точки, пропадает значение в графе "Введите параллель".
Код:
[Выделить все]
 RAD : dialog {
label = "xxx";
: column {
: edit_box {
label="Ââåäèòå ïàðàëëåëü, xx.xxxxx°:";
key="fgs";
edit_width = 12;}
}
: row {
 : boxed_column {
	  label = "Ïåðâàÿ òî÷êà";

	: button {
	label = "Âûáðàòü òî÷êó";
	key = "P1";
	edit_width = 12;
	fixed_width = true;
	mnemonic = "Â";
	}

	: edit_box {
	key = "eb1";
	label = "&X1:";
        edit_width = 15;
	fixed_width = true;
	       	   }

	: edit_box {
	key = "eb2";
	label = "&Y1:";
        edit_width = 15;
	fixed_width = true;
	       	   }

}
: column {
 : paragraph {
        label = "Ðåçóëüòàò âû÷èñëåíèé";
        children_alignment = centered;
        width = 50;
        : text { key = "ln1"; }
        : text { key = "ln2"; }
      }
   }
 }

: row {
        fixed_height = true;
        alignment = top;
        spacer;
         : button {
          key    = "accept";    
          label  = "Âû÷èñëèòü";   
          is_default = true;
          height = 3;      
        }
 : button {
          key       = "cancel";
          label     = "Çàêðûòü";
          is_cancel = true;       
          height    = 2;
        }
        }

      : column {
        fixed_height = true;
        alignment = bottom;
        : text {  label = "xxx";  alignment=right;}
        spacer;
      }

}//dialog

Прошу прощения рус/яз не отображается...

Вложения
Тип файла: lsp RAD.lsp (3.2 Кб, 47 просмотров)

__________________
AutoCAD Civil 3D 2012г. 32-разрядная.

Последний раз редактировалось Pavel_GP, 03.09.2015 в 15:01.
Просмотров: 16395
 
Непрочитано 10.09.2015, 16:59
#21
gomer

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


Цитата:
Сообщение от trushev Посмотреть сообщение
Не хочется отнимать победу.
Победу в чем?

Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
По идее должно быть так
У вас не код, а аццкий фарш и перловка в голове. Начните комментировать свой код, побуквенно, а то вы плаваете как будущий инвалид на экзамене...

Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
(action_tile "(rpk)")
Что это???
Открывайте справку и пишите, что делает каждая функция.
rpk - это русский православный конь или рулет по-корейски? Что такое функция без аргументов? Что возвращают функции? Что происходит при вызове функции?
Дальше диалог. Что происходит при загрузке диалога? Что происходит при закрытии диалога. Что такое плитки? Откуда и когда их заполнять. Что делает каждая плитка? Какие бывают кнопки? Зачем я вставил эту кнопку в диалог? Что происходит когда я нажал кнопку? Что будет, если я случайно нажал [Esc], [Space] или [Enter] при выборе точки?
Ну и наконец, почему я вставляю там где нужно, а он волшебным образом не начинает работать...
gomer вне форума  
 
Автор темы   Непрочитано 10.09.2015, 18:26
#22
Pavel_GP

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


Цитата:
Сообщение от gomer Посмотреть сообщение
Победу в чем?


У вас не код, а аццкий фарш и перловка в голове. Начните комментировать свой код, побуквенно, а то вы плаваете как будущий инвалид на экзамене...


Что это???
Открывайте справку и пишите, что делает каждая функция.
rpk - это русский православный конь или рулет по-корейски? Что такое функция без аргументов? Что возвращают функции? Что происходит при вызове функции?
Дальше диалог. Что происходит при загрузке диалога? Что происходит при закрытии диалога. Что такое плитки? Откуда и когда их заполнять. Что делает каждая плитка? Какие бывают кнопки? Зачем я вставил эту кнопку в диалог? Что происходит когда я нажал кнопку? Что будет, если я случайно нажал [Esc], [Space] или [Enter] при выборе точки?
Ну и наконец, почему я вставляю там где нужно, а он волшебным образом не начинает работать...
1. Только спокойствие.
2. Про перловку и инвалида, я не очень понял тебе понятнее., пропустим.
3. Код на столько прост, но от тебя вытекло, что действительно ты профессор, а я ученик. Но если так, то напиши мне ширину покрытия МЛЭ ЕМ3002?
4. rpk ответ ты дал сам, название пользовательской функции - расшифровка не имеет значения. Функция rpk выполняет основной расчет программы с использованием трех переменных dfg_rad, x1, y1. Команды все стандартные, ничего нового.
5. Локальные, глобальные переменные, буду познавать их предназначение.
6. Код прост, запутался, поэтому мой топик тут, пузыриться не нужно. Прошу только по делу. Пример trushev.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная.
Pavel_GP вне форума  
 
Непрочитано 10.09.2015, 19:19
#23
gomer

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


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Только спокойствие.
Это был достаточно прагматичный ответ...

Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
напиши мне ширину покрытия МЛЭ ЕМ3002?
вот этого?

Еще раз прочитай свой пункт 4. В нем ответ почему твоя программа не запускается
gomer вне форума  
 
Непрочитано 10.09.2015, 20:23
1 | #24
UrikG

конструктор
 
Регистрация: 15.08.2012
г. Пермь
Сообщений: 2


Если ещё актуально
В функции RAD1 не определены переменные x1 и y1
(defun C:RAD1 (/ dcl_id step pt x1 y1)
(setq dcl_id (load_dialog "RAD2.dcl"))
(setq step 2 x1 0.0 y1 0.0).....у меня всё работает.

----- добавлено через ~1 мин. -----
gomer видимо на это и намекал
UrikG вне форума  
 
Автор темы   Непрочитано 10.09.2015, 21:04
#25
Pavel_GP

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


Цитата:
Сообщение от UrikG Посмотреть сообщение
gomer видимо на это и намекал
Для меня намёки, это как аццкий фарш и перловка в голове.
Спс. UrikG (проверю завтра на работе)
gomer серьёзный продуман, ничего против не имею. Для меня Lisp это лишь упрощение некоторых моментов в моей непосредственной работе.

Цитата:
Сообщение от gomer
вот этого?
Ответа точного нет. Так и я листаю Полещука или юзаю гугл.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная.
Pavel_GP вне форума  
 
Непрочитано 10.09.2015, 21:30
#26
UrikG

конструктор
 
Регистрация: 15.08.2012
г. Пермь
Сообщений: 2


Ну тогда вот так...

(defun C:RAD1 (/ dcl_id step pt x1 y1 dfg)
(setq dcl_id (load_dialog "RAD2.dcl"))
(setq step 2 x1 0.0 y1 0.0 dfg 75).....
...
;--------------–Результат вычислений-----------------------

(rpk)
(action_tile "fgs" "(progn (setq dfg (atof (get_tile \"fgs\")))(rpk))") ; ПРИ ИЗМЕНЕНИИ ПОЛЯ ЗАПИСЫВАЕМ ЗНАЧЕНИЕ В ПЕРЕМЕННУЮ dfg
(action_tile "ln1" "(rpk)")
(action_tile "ln2" "(rpk)")
;-------------------------------------------------------------


(defun rpk (/ fg ao f_ps e1 e2 sfg2 ko l1_r ll1_g ll1_m l1_g l1_m l1_s mo1 f1_r ff1_g ff1_m f1_g f1_m f1_s)

;(setq dfg (atof (get_tile "fgs"))) - ЭТУ СТРОКУ ЗАКОМЕТИРОВАТЬ ИЛИ УДАЛИТЬ

Последний раз редактировалось UrikG, 10.09.2015 в 21:37.
UrikG вне форума  
 
Непрочитано 10.09.2015, 23:31
#27
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Спс. UrikG (проверю завтра на работе)
Ясно, мои рекомендации в #20 отправились лесом.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.09.2015, 08:24
#28
Pavel_GP

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ясно, мои рекомендации в #20 отправились лесом.
Никуда не лесом. Сегодня всё начну, как раз с п.20., еще не дошёл просто.

----- добавлено через ~1 ч. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Добро пожаловать в пошаговую отладку. А заодно и в области видимости

----- добавлено через ~3 мин. -----
Дополнительно: вход в vlide, меню tools - Environment options - General Options. На закладке Diagnostics установить все флажки. Нажать ОК.
Открыть lsp-код и нажать сочетание клавиш Ctrl+Shift+C. Внимательно проанализировать выводимые сообщения.
Доброе утро. Пользуюсь твоим советом, все как написано. Видим. (см. вложение):
1. Что выдаёт первое окно? Это ошибки? При правильной работе оно должно быть пустым?
2. Что выдает второе окно? (Shift+Ctrl+R) (трассировка), Как с ними дальше обращаться? Оно тоже должно быть пустым при правильной работе?
3. По твоей рекомендации изменил немного в коде
Код:
[Выделить все]
 (defun MyFunRAD (/ dtr deg minu sek px)
  (defun dtr (ar) (* pi (/ ar 180.)))
  (defun deg (rr) (/ (* rr 180.) pi))
  (defun minu (dr) (* (- dr (fix dr)) 60.))
  (defun sek (mr) (* (- mr (fix mr)) 60.))
  (defun px (xr) (/ xr (* ao_wgs84 ko_rad)))
  )
4.UrikG спс., до тебя ещё пока не дошёл, работаю с п.20

----- добавлено через ~38 мин. -----
1. Перевел глобальные переменные в локальные:
Код:
[Выделить все]
 rpk (/ x1 y1 dfg_rad fg ao_wgs84 ko_rad f_ps e1 e2 sfg2  l1_r ll1_g ll1_m l1_g l1_m l1_s
	    mo1 f1_r ff1_g ff1_m f1_g f1_m f1_s)
2. Удалил
Код:
[Выделить все]
 (defun px (xr) (/ xr (* ao_wgs84 ko_rad)))
3.Переопределил
Код:
[Выделить все]
 (setq l1_r (/ x1 (* ao_wgs84 ko_rad)))
Работаем дальше.

----- добавлено через ~3 ч. -----
1. Пока Кулик Алексей aka kpblc нет, но жду его возвращения сюда.
2. Работаю с вариантом от UrikG тут по подробнее:
а) Запускается, ошибку не выдает (Спс)
б) Вопрос открытый остаётся, при нажатии на кнопку "Вычислить" значение "fgs" становится по умолчанию, т.е если его изменить, то оно возвращается обратно. (Должно не возвращаться)
Миниатюры
Нажмите на изображение для увеличения
Название: rad1_1.png
Просмотров: 21
Размер:	25.1 Кб
ID:	156766  
__________________
AutoCAD Civil 3D 2012г. 32-разрядная.

Последний раз редактировалось Pavel_GP, 11.09.2015 в 12:46.
Pavel_GP вне форума  
 
Непрочитано 11.09.2015, 13:42
#29
trushev


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


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
б) Вопрос открытый остаётся, при нажатии на кнопку "Вычислить" значение "fgs" становится по умолчанию, т.е если его изменить, то оно возвращается обратно. (Должно не возвращаться)
Еще раз. Перед закрытием окна (setq dfg (get_tille "fgs")) сохраняем текущее значение поля. При открытии окна функцией (set_tille "fgs" dfg) восстанавливаем сохраненное значение.
trushev вне форума  
 
Непрочитано 11.09.2015, 14:09
#30
gomer

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


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
1
(defun MyFunRAD (/ dtr deg minu sek px)
2
*(defun dtr (ar) (* pi (/ ar 180.)))
3
*(defun deg (rr) (/ (* rr 180.) pi))
4
*(defun minu (dr) (* (- dr (fix dr)) 60.))
5
*(defun sek (mr) (* (- mr (fix mr)) 60.))
6
*(defun px (xr) (/ xr (* ao_wgs84 ko_rad)))
7
*)
мсъе знает толк в извращениях...


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

Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Вопрос открытый остаётся, при нажатии на кнопку "Вычислить" значение "fgs" становится по умолчанию, т.е если его изменить, то оно возвращается обратно.
Конечно возвращается. Ты же сам написал так, чтоб возвращалось, а теперь, ладно меня, сам себя игнорируешь.

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от trushev Посмотреть сообщение
Перед закрытием окна (setq dfg (get_tille "fgs")) сохраняем текущее значение поля. При открытии окна функцией (set_tille "fgs" dfg) восстанавливаем сохраненное значение.
Объясни мне зачем закрывать диалог при нажатии кнопки Вычислить?
gomer вне форума  
 
Автор темы   Непрочитано 11.09.2015, 14:35
#31
Pavel_GP

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


Цитата:
Сообщение от gomer Посмотреть сообщение
Конечно возвращается. Ты же сам написал так, чтоб возвращалось, а теперь, ладно меня, сам себя игнорируешь.
Так поясни где исправить, что ты бегаешь из угла в угол. Что за показуха...

Диалог не закрывается (done_dialog 2).

ПыСы gomer смотри п.20
__________________
AutoCAD Civil 3D 2012г. 32-разрядная.
Pavel_GP вне форума  
 
Непрочитано 11.09.2015, 14:38
#32
trushev


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


Цитата:
Сообщение от gomer Посмотреть сообщение
Объясни мне зачем закрывать диалог при нажатии кнопки Вычислить?
Перед "Вычислить" надо выбрать точку (getpoint "\nУкажите точку: "). Или я неправильно понимаю автора.
trushev вне форума  
 
Автор темы   Непрочитано 11.09.2015, 14:40
#33
Pavel_GP

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


Цитата:
Сообщение от trushev Посмотреть сообщение
Или я неправильно понимаю автора.
Всё правильно понял.

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от trushev Посмотреть сообщение
Перед закрытием окна
Ты предполагал о временном закрытии? При нажатии на кнопку Указать, окно закрывается (указывается точка), окно открывается и заносятся координаты точки в х и y.
__________________
AutoCAD Civil 3D 2012г. 32-разрядная.
Pavel_GP вне форума  
 
Непрочитано 11.09.2015, 14:58
#34
trushev


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


Уверен восстановление "fgs" по умолчанию происходит после указания точки.
trushev вне форума  
 
Непрочитано 11.09.2015, 15:51
1 | #35
gomer

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


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Диалог не закрывается (done_dialog 2).
Сам-то понял что написал?
Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
Так поясни где исправить
У тебя авгиевы конюшни, а не код, половина написана в лиспе, половина в диалоге... Сам разбирайся... Где исправить? Везде! Ни один адекватный программист не заполняет action и value в диалоге...

Беда не в том, что у тебя миллион ошибок, а в том, что ты не хозяин своего кода... Быть хозяином - это знать и отвечать за каждую строчку кода. Тогда тебе и отладка не понадобится. А копипаста - это для студентов.
Это так... чтоб работало...
Код:
[Выделить все]
 

(defun dtr (a) (* pi (/ a 180.)))

(defun asin (ugol)
  (atan (/ ugol (sqrt (- 1. (expt ugol 2.)))))
)

(defun deg (r) (/ (* r 180.) pi))
(defun minu (d) (* (- d (fix d)) 60.))
(defun sek (m) (* (- m (fix m)) 60.))




;;; ---------------------------Основная функция----------------------
(defun C:RAD1 (/ rpk dcl_id step pt dfg_rad x1 y1)

  (defun rpk (/	     fg	    ao	   f_ps	  e1	 e2	sfg2   ko
	      l1_r   ll1_g  ll1_m  l1_g	  l1_m	 l1_s	mo1    f1_r
	      ff1_g  ff1_m  f1_g   f1_m	  f1_s
	     )

    (setq fg   (dtr dfg_rad)
	  ao   6378137.
	  f_ps (/ 1. 298.25722356)
	  e1   0.0818191909289067
    )

    (setq e2 (* f_ps (- 2. f_ps)))
    (setq sfg2 (expt (sin fg) 2.))

    (setq ko (/	(cos
		  fg
		)
		(expt (- 1. (* e2 sfg2)) 0.5)
	     )
    )


    (defun px (x) (/ x (* ao ko)))

    (setq l1_r (px x1))

    (setq ll1_g (deg l1_r))
    (setq ll1_m (minu ll1_g))
    (setq l1_s (sek ll1_m))
    (setq l1_g (fix ll1_g))
    (setq l1_m (fix ll1_m))

    (if	(< l1_m 10)
      (setq l1_m (strcat "0" (itoa (fix ll1_m))))
    )
    (if	(< l1_s 10)
      (setq l1_s (strcat "0" (rtos l1_s 2 2)))
      (setq l1_s (atof (rtos l1_s 2 2)))
    )
    (set_tile "ln2"
	      (strcat "Долгота: "
		      (vl-princ-to-string l1_g)
		      "°"
		      (vl-princ-to-string l1_m)
		      "'"
		      (vl-princ-to-string l1_s)
		      "” E"
	      )
    )
    (setq mo1 (- (/ pi 2.)
		 (* 2.
		    (atan (exp (/ (* -1. y1) (* ao ko))
			  )
		    )
		 )
	      )
    )
    (setq f1_r
	   (+ (+ (+ (+ mo1
		       (* (sin (* 2. mo1))
			  (+ (+	(+ (/ (expt e1 2.) 2.)
				   (* 5. (/ (expt e1 4.) 24.))
				)
				(/ (expt e1 6.) 12.)
			     )
			     (* 13. (/ (expt e1 8.) 360.))
			  )
		       )
		    )			;1
		    (* (sin (* 4. mo1))
		       (+ (+ (* 7. (/ (expt e1 4.) 48.))
			     (* 29. (/ (expt e1 6.) 240.))
			  )
			  (* 811. (/ (expt e1 8.) 11520.))
		       )
		    )
		 )			;2
		 (* (sin (* 6. mo1))
		    (+ (* 7. (/ (expt e1 6.) 120.))
		       (* 81. (/ (expt e1 8.) 1120.))
		    )
		 )
	      )				;3
	      (* (sin (* 8. mo1))
		 (* 4279. (/ (expt e1 8.) 161280.))
	      )
	   )				;4
    )					;setq

    (setq ff1_g (deg f1_r))
    (setq ff1_m (minu ff1_g))
    (setq f1_s (sek ff1_m))
    (setq f1_g (fix ff1_g))
    (setq f1_m (fix ff1_m))

    (if	(< f1_m 10)
      (setq f1_m (strcat "0" (itoa (fix ff1_m))))
    )

    (if	(< f1_s 10)
      (setq f1_s (strcat "0" (rtos f1_s 2 2)))
      (setq f1_s (atof (rtos f1_s 2 2)))
    )					;if

    (set_tile "ln1"
	      (strcat "  Широта:  "
		      (vl-princ-to-string f1_g)
		      "°"
		      (vl-princ-to-string f1_m)
		      "'"
		      (vl-princ-to-string f1_s)
		      "” N"
	      )
    )
  ) ;_ end defun rpk

  (setq dcl_id (load_dialog "RAD2.dcl"))

  (setq	step 2
	x1 0.0
	y1 0.0
	dfg_rad	75
  )


  (while (> step 1)

    (if	(null (new_dialog "RAD2" dcl_id))
      (exit)
    )

    (set_tile "fgs_rad" (rtos dfg_rad))
    (set_tile "xp" (rtos x1 2 5))
    (set_tile "yp" (rtos y1 2 5))

    (action_tile "сancel" "(done_dialog 0)")
    (action_tile
      "mousep"
      (strcat
	"(setq dfg_rad (atof (get_tile \"fgs_rad\")))"
	"(done_dialog 2)"
      )					;strcat
    )					;action_tile
    (action_tile
      "calc"
      (strcat
	"(setq dfg_rad (atof (get_tile \"fgs_rad\")))"
	"(setq x1 (atof (get_tile \"xp\")))"
	"(setq y1 (atof (get_tile \"yp\")))"
	"(rpk)"
      )					;strcat
    )					;action_tile

    (setq step (start_dialog))
    (cond
      ((= step 2)
       (setq pt (getpoint "\nУкажите точку: "))
       (if pt
	 (setq x1 (car pt)
	       y1 (cadr pt)
	 )
       )
      )
    )					;cond
  )					;while
  (unload_dialog dcl_id)
  (princ)
)
Код:
[Выделить все]
RAD2 : dialog {

  label = "Название программы";

  : column {

    : text { label = "Система координат WGS-84"; }
 
    : edit_box {
        label = "Введите параллель, xx.xxxxx°:";
        key = "fgs_rad";
        edit_width = 9;
        edit_limit = 8;
    }

  }
  : spacer{height=1;}

  : row {
    : column {
      : edit_box{
        label="X:";
        value="0";
        key="xp";
        width = 15;
      }
      : edit_box{
        label="Y:";
        value="0";
        key="yp";
        width = 15;
      }
    }
    : button {
        label="< Указать";
        key="mousep";
        height=4;
    }
    : button {
          key    = "calc";    
          label  = "Вычислить >";   
          height = 4;
    }


  }//end row
      : paragraph {
        label = "Результат вычислений";
        children_alignment = centered;
        width = 30;
        height = 2; 
        : text { key = "ln1"; }
        : spacer {height=1;}
        : text { key = "ln2"; }
    }//end paragraph
  : row {
        fixed_height = true;
        alignment = top;
        spacer;
        : cancel_button {
          label     = "Закрыть";
          is_cancel = true;       
          height    = 2;
        }
  }//end row

  : column {
        fixed_height = true;
        alignment = bottom;
        : text { label = "xxx";  alignment=right;}
        spacer;
  }//end column

}//end dialog
gomer вне форума  
 
Непрочитано 11.09.2015, 15:59
1 | #36
Кулик Алексей aka kpblc
Moderator

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


Практически те же фаберже, но вид сбоку
Код:
[Выделить все]
 (defun c:rad1 (/ dcl_id step pt ao ko x1 y1 dtr asin deg minu sek px)
  (defun dtr (a)
    (* pi (/ a 180.))
    ) ;_ end of defun
  (defun asin (ugol)
    (atan (/ ugol (sqrt (- 1. (expt ugol 2.)))))
    ) ;_ end of defun
  (defun deg (r)
    (/ (* r 180.) pi)
    ) ;_ end of defun
  (defun minu (d)
    (* (- d (fix d)) 60.)
    ) ;_ end of defun
  (defun sek (m)
    (* (- m (fix m)) 60.)
    ) ;_ end of defun
  (defun px (x)
    (/ (cond (x)
             (t 0.)
             ) ;_ end of cond
       (* ao ko)
       ) ;_ end of /
    ) ;_ end of defun
  (defun rpk (/ dfg_rad fg ao f_ps e1 e2 sfg2 ko l1_r ll1_g ll1_m l1_g l1_m l1_s mo1 f1_r ff1_g ff1_m f1_g f1_m f1_s)
    (setq dfg_rad (atof (get_tile "fgs_rad"))
          fg      (dtr dfg_rad)
          ao      6378137.
          f_ps    (/ 1. 298.25722356)
          e1      0.0818191909289067
          e2      (* f_ps (- 2. f_ps))
          sfg2    (expt (sin fg) 2.)
          ko      (/ (cos
                       fg
                       ) ;_ end of cos
                     (expt (- 1. (* e2 sfg2)) 0.5)
                     ) ;_ end of /
          l1_r    (px x1)
          ll1_g   (deg l1_r)
          ll1_m   (minu ll1_g)
          l1_s    (sek ll1_m)
          l1_g    (fix ll1_g)
          l1_m    (fix ll1_m)
          ) ;_ end of setq
    (if (< l1_m 10)
      (setq l1_m (strcat "0" (itoa (fix ll1_m))))
      ) ;_ end of if
    (if (< l1_s 10)
      (setq l1_s (strcat "0" (rtos l1_s 2 2)))
      (setq l1_s (atof (rtos l1_s 2 2)))
      ) ;_ end of if
    (set_tile "ln2"
              (strcat "Долгота: "
                      (vl-princ-to-string l1_g)
                      "°"
                      (vl-princ-to-string l1_m)
                      "'"
                      (vl-princ-to-string l1_s)
                      "” E"
                      ) ;_ end of strcat
              ) ;_ end of set_tile
    (setq mo1  (- (/ pi 2.)
                  (* 2.
                     (atan (exp (/ (* -1.
                                      (cond (y1)
                                            (t (setq y1 0.))
                                            ) ;_ end of cond
                                      ) ;_ end of *
                                   (* ao ko)
                                   ) ;_ end of /
                                ) ;_ end of exp
                           ) ;_ end of atan
                     ) ;_ end of *
                  ) ;_ end of -
          f1_r (+ (+ (+ (+ mo1
                           (* (sin (* 2. mo1))
                              (+ (+ (+ (/ (expt e1 2.) 2.)
                                       (* 5. (/ (expt e1 4.) 24.))
                                       ) ;_ end of +
                                    (/ (expt e1 6.) 12.)
                                    ) ;_ end of +
                                 (* 13. (/ (expt e1 8.) 360.))
                                 ) ;_ end of +
                              ) ;_ end of *
                           ) ;1
                        (* (sin (* 4. mo1))
                           (+ (+ (* 7. (/ (expt e1 4.) 48.))
                                 (* 29. (/ (expt e1 6.) 240.))
                                 ) ;_ end of +
                              (* 811. (/ (expt e1 8.) 11520.))
                              ) ;_ end of +
                           ) ;_ end of *
                        ) ;2
                     (* (sin (* 6. mo1))
                        (+ (* 7. (/ (expt e1 6.) 120.))
                           (* 81. (/ (expt e1 8.) 1120.))
                           ) ;_ end of +
                        ) ;_ end of *
                     ) ;3
                  (* (sin (* 8. mo1))
                     (* 4279. (/ (expt e1 8.) 161280.))
                     ) ;_ end of *
                  ) ;4
          ) ;setq
    (setq ff1_g (deg f1_r)
          ff1_m (minu ff1_g)
          f1_s  (sek ff1_m)
          f1_g  (fix ff1_g)
          f1_m  (fix ff1_m)
          ) ;_ end of setq
    (if (< f1_m 10)
      (setq f1_m (strcat "0" (itoa (fix ff1_m))))
      ) ;_ end of if
    (if (< f1_s 10)
      (setq f1_s (strcat "0" (rtos f1_s 2 2)))
      (setq f1_s (atof (rtos f1_s 2 2)))
      )   ;if
    (set_tile "ln1"
              (strcat "  Широта:  "
                      (vl-princ-to-string f1_g)
                      "°"
                      (vl-princ-to-string f1_m)
                      "'"
                      (vl-princ-to-string f1_s)
                      "” N"
                      ) ;_ end of strcat
              ) ;_ end of set_tile
    (gc)
    (princ)
    ) ;_ end of defun

  (setq dcl_id
         (load_dialog
           ((lambda (/ file handle)
              (setq file   (strcat (vl-string-right-trim "\\" (getenv "temp")) "\\dlg.dcl")
                    handle (open file "w")
                    ) ;_ end of setq
              (foreach item
                       '("RAD2:dialog{label=\"Название программы\";"
                         "	:column{"
                         "		:text{label=\"Система координат WGS-84\";}"
                         "		:edit_box{label=\"Введите параллель, xx.xxxxx°:\";key=\"fgs_rad\";edit_width=15;value=\"75\";}"
                         "		}"
                         "	:spacer{height=1;}"
                         "	:row{"
                         "		:column{"
                         "			:edit_box{label=\"X:\";value=\"0\";key=\"xp\";width=15;}"
                         "			:edit_box{label=\"Y:\";value=\"0\";key=\"yp\";width=15;}"
                         "			}"
                         "		:button{label=\"Указать <\";key=\"mousep\";height=6;fixed_width=true;action=\"(done_dialog 3)\";}"
                         "		:paragraph{label=\"Результат вычислений\";children_alignment=centered;width=30;height=2;"
                         "			:text{key=\"ln1\";}"
                         "			:spacer{height=1;}"
                         "			:text{ key=\"ln2\";}"
                         "			}"
                         "		}"
                         "	:row{fixed_height=true;alignment=top;spacer;"
                         "		:button{key =\"accept\";label =\"Вычислить\";is_default=true;height=3;}"
                         "		:button{ key =\"cancel\";label =\"Закрыть\";is_cancel=true;height =2;}"
                         "		}"
                         "	:column{fixed_height=true;alignment=bottom;"
                         "		:text{label=\"xxx\";alignment=right;}"
                         "		spacer;"
                         "		}"
                         "	}"
                         )
                (write-line item handle)
                ) ;_ end of foreach
              (close handle)
              file
              ) ;_ end of lambda
            )
           ) ;_ end of load_dialog
        ) ;_ end of setq
  (setq step 2)
  (if (null pt)
    (setq pt (list 0.0 0.0))
    ) ;_ end of if
  (while (>= step 2)
    (if (null (new_dialog "RAD2" dcl_id))
      (exit)
      ) ;_ end of if
    (rpk)
    (action_tile "ln1" "(rpk)")
    (action_tile "ln2" "(rpk)")
    (set_tile "xp" (rtos (car pt) 2 5))
    (set_tile "yp" (rtos (cadr pt) 2 5))
    (action_tile "сancel" "(done_dialog 0)")
    (action_tile
      "accept"
      (strcat
        "(setq x1 (atof (get_tile \"xp\")))"
        "(setq y1 (atof (get_tile \"yp\")))"
        "(setq pt (list x1 y1))"
        "(done_dialog 2)"
        ) ;strcat
      )   ;action_tile
    (setq step (start_dialog))
    (cond
      ((= step 3)
       (setq pt (getpoint "\nУкажите точку: "))
       )
      )   ;cond
    )     ;while
  (unload_dialog dcl_id)
  (if (< 0 step)
    (progn
      (princ)
      ) ;_ end of progn
    ) ;_ end of if
  (princ)
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.09.2015, 16:20
#37
gomer

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Практически те же фаберже, но вид сбоку
kpblc, ну ты то...
gomer вне форума  
 
Непрочитано 11.09.2015, 16:25
#38
Кулик Алексей aka kpblc
Moderator

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


А мне лениво разбираться в этом спагетти. Сделал, чтобы работало хоть как-то - и пущщай этот Франкенштейн идет дальше Про отладку сказали, про проверки сказали, про видимость сказали, про комментирование и разбор кода в пошаговом режиме сказали - и ладушки
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.09.2015, 17:14
#39
Pavel_GP

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


Цитата:
Сообщение от gomer Посмотреть сообщение
Беда не в том, что у тебя миллион ошибок, а в том, что ты не хозяин своего кода...
Это не беда не сравнивай свой уровень работы с Lisps и мой, на мой вопрос ты так и не дал ответа, потому что я хозяин в своём деле, а ты в своём.
Цитата:
Сообщение от gomer Посмотреть сообщение
адекватный программист не заполняет action и value в диалоге...
Читай Полещука
Цитата:
Сообщение от gomer Посмотреть сообщение
Сам разбирайся... Где исправить? Везде!
У тебя лично помощи не попрашу. Если ты помнишь мы с тобой уже общались на тему внутренних вычислений, там ты мне помог без проблем. Если захочешь сам найдешь эту тему.

1. Это не копипаст. Основные расчёты - это моё, и написано мною, и ошибки тоже мои. Временный выход из диалогового окна взят из "Руководтство по автолиспу Полещук", там у него как раз есть пример. Поэтому не нужно говорить того чего не знаешь...
2. gomer Большое тебе спасибо, наконец-то получился ответ на п.35, но я не просил переписывать мой код, а особенно заменять внутри на свои переменные, чтоб я совсем запутался, а ты потом кричал что у меня авгиевы. конюшни. На счёт его работы - проверю ппж.
3. Кулик Алексей aka kpblc тебе тоже большое спасибо, хоть мои переменные не изменял.
4. Вопрос обоим продуманом gomer и Кулик Алексей aka kpblc, вот нафига из такого простого уравнения вы лепите такие сложности (допфункции, диалоговые окна внутри лиспа и т.д. и т.п.), проще работать не будет? Это конечно всё круто, есть куда стремиться, но мне это не нужно у меня всё просто. 2+2=4, а у вас тоже 4, но через десятки уравнений.
5. Проверю ваши предложения в понедельник, дома не работаю.
Хороших выходных
__________________
AutoCAD Civil 3D 2012г. 32-разрядная.

Последний раз редактировалось Pavel_GP, 11.09.2015 в 18:35.
Pavel_GP вне форума  
 
Непрочитано 12.09.2015, 01:23
#40
gomer

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


Цитата:
Сообщение от Pavel_GP Посмотреть сообщение
я не просил переписывать мой код, а особенно заменять внутри на свои переменные
Я что-то пропустил?
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Вывод результата вычислений в окне DCL?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сосчитать сумму цифр из отдельных мтекстов (и лисп для подсчета спецификаций) Red Nova LISP 667 18.07.2025 17:09
Ваши сканы, наша обработка и перевод в DJVU. Armin Поиск литературы, чертежей, моделей и прочих материалов 3866 02.04.2025 09:21