ЧАСЫ на Лиспе - Олимпийская задачка
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > ЧАСЫ на Лиспе - Олимпийская задачка

ЧАСЫ на Лиспе - Олимпийская задачка

Ответ
Поиск в этой теме
Непрочитано 02.12.2005, 13:08 #1
ЧАСЫ на Лиспе - Олимпийская задачка
Danilin
 
Сообщений: n/a

Задача проста: стрелочные ЧАСЫ средствами Автокад.
Покрасивее, пожалуйста...
Просмотров: 11641
 
Непрочитано 02.12.2005, 14:03
#2
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Глупый вопрос: часы стоячие или ходячие?
А если ходячие, то должны показывать правильное время?

Покорректнее задачку, пожалуйста
vk вне форума  
 
Непрочитано 02.12.2005, 14:13
#3
Кулик Алексей aka kpblc
Moderator

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


И вид - спередии? Сбоку? Сзади? 3Д или 2Д?
И наручные? Или с кукушкой? И кукушка должна выскакивать и чего-то пищать или нет?
И самое главное - пока часы работают, в каде можно будет работать или нет?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.12.2005, 15:56
#4
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


И главный вопрос. Почему задача ОЛИМПИЙСКАЯ :?: :?: :?:
Медаль золотую с пятью кольцами за её решение дают?
{Smirnoff} вне форума  
 
Непрочитано 03.12.2005, 11:24 Привет
#5
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Наверное материальное поощерение будет
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 03.12.2005, 12:43
#6
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от {Smirnoff}
И главный вопрос. Почему задача ОЛИМПИЙСКАЯ :?: :?: :?:
Скорей всего, это означает, что срок сдачи решения задачи где то ближе к Олимпийским играм. Так что года два еще есть. [sm2305]
За полгода может быть утрясутся условия задачи, потом за два дня код напишем, а оставшиеся полтора года уйдут на отлов багов.

ПэЭс: для разнообразия попутно можно сделать песочную и солнечную версии. С последней, боюсь, могут возникнуть проблемы из за нехватки разрядности АКАД. Солнечную систему случайно никто 1:1 не моделировал в 3D ?
vk вне форума  
 
Непрочитано 03.12.2005, 15:50
#7
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>VK
Цитата:
Солнечную систему случайно никто 1:1 не моделировал в 3D ?
А в чём проблема? Парсеки в единицах измерения есть. Правда либо километры придется писать миллионами, либо парсеки очень далеко от запятой.

Желающие могут написать прогу для визуализации движения небесных тел на AutoLISP

Данилину предлагается нарисовать собственное виденье Марса и потренироваться в реалистичности рендеринга.
{Smirnoff} вне форума  
 
Непрочитано 03.12.2005, 16:31
#8
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


Цитата:
Сообщение от {Smirnoff}
Данилину предлагается нарисовать собственное виденье Марса и потренироваться в реалистичности рендеринга.
В 5-м ArchiCADе по чертежам из AutoCADа 8)
asys вне форума  
 
Непрочитано 03.12.2005, 16:48
#9
Danilin


 
Сообщений: n/a


Смешно, но я думал, задача не вызовет проблем.
Хотя бы как игра-шутка: стрелочные часы с секундной стрелкой идут и показывают текущее время. В автокаде. Неужели невозможно?
 
 
Непрочитано 03.12.2005, 18:44
#10
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Danilin
Смешно, но я думал, задача не вызовет проблем.
Хотя бы как игра-шутка: стрелочные часы с секундной стрелкой идут и показывают текущее время. В автокаде. Неужели невозможно?
Вообще странно, ты такой бывалый...Чё нить слышал о поиске в Google? Я еще два года назад скачивал 4 типа часов реально
ходящих
Ищите и обрящете
fixo вне форума  
 
Непрочитано 03.12.2005, 19:34
#11
Danilin


 
Сообщений: n/a


Искал в Google, можете убедиться: бесполензно.
Простая задачка, а ставит всех в тупик?
На Бейсике стрелочные часы сделать очень просто.
А на Лиспе? Неужели невозможно?
 
 
Непрочитано 03.12.2005, 19:58
#12
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Да можно сделать то... И даже тикать будут... Только если на чистом Лиспе - то получится совершенно бестолковая ерунда. Во первых, использовать бесконечный цикл вроде "посмотреть скока время (в системе) -> перечертить (или повернуть) примитивы-стрелки" (чтоб не сбивать точность хода, вряд ли стоит делать через дилей). Естественно, никакие другие действия с этим документом (где работает часовой Лисп) сделать нельзя. Во вторых, Лисп работает только с активным документом, стало быть при переходе на другой документ чтото должно испортиться в этой системе. Может как то можно решить проблему с компиляцией в VLX, но очень не уверен, что получится.
Другое дело, если использовать внешнее по отношению к АКАДу приложение как часовой механизм, а АКАДу оставить скромную роль "циферблата со стрелками". Тогда в одном файле можно и на часы любоваться и план застройки Марса чертить....
vk вне форума  
 
Непрочитано 03.12.2005, 22:00
#13
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Danilin
Искал в Google, можете убедиться: бесполензно.
Простая задачка, а ставит всех в тупик?
На Бейсике стрелочные часы сделать очень просто.
А на Лиспе? Неужели невозможно?
Плохо ищешь
Переименуй расширение на LSP

:x
fixo вне форума  
 
Непрочитано 05.12.2005, 10:33
#14
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Цитата:
Сообщение от vk
... -> перечертить (или повернуть) примитивы-стрелки"...
А я бы стрелки не примитивами рисовал, а функцией GRDRAW.
Pilot вне форума  
 
Непрочитано 21.12.2005, 14:25
#15
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


А вот и механика для часиков, с дизайном я не очень...
Код:
[Выделить все]
(defun c:my-clock (/ A B)
  (setvar "cmdecho" 0)
  (if (not (tblsearch "BLOCK" "cl_arrow"))
    (PROGN
      (setvar "clayer" "0")
      (setq a (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
		       (vlax-3D-point (list 0. 0.))
		       "cl_arrow"
	      ) ;_  vla-add
      ) ;_  setq
      (vla-AddLine a (vlax-3D-point 0. -1.) (vlax-3D-point 0. 1.))
      (vla-AddLine a (vlax-3D-point 0. 1.) (vlax-3D-point 1. 0.))
      (vla-AddLine a (vlax-3D-point 1. 0.) (vlax-3D-point 0. -1.))
    ) ;_  PROGN
  ) ;_  if
  (setq a (getpoint "\nУкажите точку "))
  (setq	b (mapcar
	    (function
	      (lambda (x)
		(vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
				 (car x)
				 "cl_arrow"
				 (cadr x)
				 (caddr x)
				 1.
				 0.
		) ;_  vla-insertblock
	      ) ;_  lambda
	    ) ;_  function
	    (list (list (vlax-3d-point a) 100. 1.)
		  (list (vlax-3d-point a) 75. 2.5)
		  (list (vlax-3d-point a) 45. 5.)
		  (list (vlax-3d-point (polar a pi 100)) 1. 1.)
	    ) ;_  list
	  ) ;_  mapcar
	b (append b
		  (vlax-safearray->list
		    (vlax-variant-value (vla-ArrayPolar (cadddr b) 12 (* pi 2) (vlax-3d-point a)))
		  ) ;_  vlax-safearray->list
	  ) ;_  append
  ) ;_  setq
  (repeat 90
    (vl-cmdf "Delay" 200)
    (vla-put-Rotation (caddr b)
		      (- (/ pi 2.)
			 (* (/ pi 6.)
			    (+ (atoi (menucmd "M=$(edtime,$(getvar,date),H)"))
			       (/ (atoi (menucmd "M=$(edtime,$(getvar,date),MM)")) 60.)
			    ) ;_  +
			 ) ;_  *
		      ) ;_  -
    ) ;_  vla-put-Rotation
    (vla-put-Rotation (cadr b)
		      (- (/ pi 2.) (* (/ pi 30.) (atoi (menucmd "M=$(edtime,$(getvar,date),MM)"))))
    ) ;_  vla-put-Rotation
    (vla-put-Rotation
      (car b)
      (- (/ pi 2.) (* (/ pi 30.) (atof (menucmd "M=$(edtime,$(getvar,date),SS.MSEC)"))))
    ) ;_  vla-put-Rotation
  ) ;_  repeat
  (mapcar (function (lambda (x) (vla-delete x) (vlax-release-object x))) b)
  (vla-purgeall (vla-get-activedocument (vlax-get-acad-object)))
  (setvar "cmdecho" 1)
)
Елпанов Евгений вне форума  
 
Непрочитано 21.12.2005, 14:30
#16
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


>Елпанов Евгений
Здорово! А вот дизайн и впрям слишком лаконичен
asys вне форума  
 
Непрочитано 21.12.2005, 14:34
#17
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Asys
>Елпанов Евгений
Здорово! А вот дизайн и впрям слишком лаконичен
Была бы механика, а корпус можно подобрать любой...
Елпанов Евгений вне форума  
 
Непрочитано 22.12.2005, 11:48
#18
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Циферблатик немного доделал - теперь не совсем спартанский вид...
Код:
[Выделить все]
(defun c:my-clock (/ A B)
 (setvar "cmdecho" 0)
 (if (not (tblsearch "BLOCK" "cl_arrow"))
  (PROGN
   (setvar "clayer" "0")
   (setq a (vla-add (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
		    (vlax-3D-point (list 0. 0.))
		    "cl_arrow"
	   ) ;_  vla-add
   ) ;_  setq
   (vla-AddLine a (vlax-3D-point 0. 1.) (vlax-3D-point 1. 0.))
   (vla-AddLine a (vlax-3D-point 1. 0.) (vlax-3D-point 0. -1.))
  ) ;_  PROGN
 ) ;_  if
 (setq a (getpoint "\nУкажите точку ")
       b (mapcar
	  (function
	   (lambda (x)
	    (vla-insertblock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
			     (car x)
			     "cl_arrow"
			     (cadr x)
			     (caddr x)
			     1.
			     0.
	    ) ;_  vla-insertblock
	   ) ;_  lambda
	  ) ;_  function
	  (list	(list (vlax-3d-point a) 100. 0.5)
		(list (vlax-3d-point a) 90. 5.0)
		(list (vlax-3d-point a) 65. 5.)
		(list (vlax-3d-point (polar a pi 100)) 20. 1.)
		(list (vlax-3d-point (polar a pi 100)) 2.5 0.5)
	  ) ;_  list
	 ) ;_  mapcar
       b (append b
		 (cons (vla-AddCircle (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
				      (vlax-3D-point a)
				      5.
		       ) ;_  vla-AddCircle
		       (append
			(vlax-safearray->list
			 (vlax-variant-value (vla-ArrayPolar (nth 4 b) 60 (* pi 2) (vlax-3d-point a)))
			) ;_  vlax-safearray->list
			(vlax-safearray->list
			 (vlax-variant-value (vla-ArrayPolar (cadddr b) 12 (* pi 2) (vlax-3d-point a)))
			) ;_  vlax-safearray->list
		       ) ;_  append
		 ) ;_  cons
	 ) ;_  append
 ) ;_  setq
 (repeat 150
  (vl-cmdf "Delay" 200)
  (vla-put-Rotation (caddr b)
		    (- (/ pi 2.)
		       (* (/ pi 6.)
			  (+ (atoi (menucmd "M=$(edtime,$(getvar,date),H)"))
			     (/ (atoi (menucmd "M=$(edtime,$(getvar,date),MM)")) 60.)
			  ) ;_  +
		       ) ;_  *
		    ) ;_  -
  ) ;_  vla-put-Rotation
  (vla-put-Rotation (cadr b)
		    (- (/ pi 2.) (* (/ pi 30.) (atoi (menucmd "M=$(edtime,$(getvar,date),MM)"))))
  ) ;_  vla-put-Rotation
  (vla-put-Rotation (car b)
		    (- (/ pi 2.) (* (/ pi 30.) (atof (menucmd "M=$(edtime,$(getvar,date),SS.MSEC)"))))
  ) ;_  vla-put-Rotation
 ) ;_  repeat
 (mapcar (function (lambda (x) (vla-delete x) (vlax-release-object x))) b)
 (vla-purgeall (vla-get-activedocument (vlax-get-acad-object)))
 (setvar "cmdecho" 1)
)
Елпанов Евгений вне форума  
 
Непрочитано 22.12.2005, 12:18
#19
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


Другое дело а цифирки будут?
asys вне форума  
 
Непрочитано 22.12.2005, 12:25
#20
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


А они и впрямь нужны?
Можешь сам добавить или лучше сразу определить конечные рамки, в смысле, что нужно от этих часов...
Можно и корпус в трехмерке сварганить или настоящий часовой механизм с шестеренками (чтоб было видно как работают).

PS. Мне в этой затее было интересно реализовать более менее оптимальный код, с наименьшим количеством построений - в принципе, задача выполнена.
Елпанов Евгений вне форума  
 
Непрочитано 22.12.2005, 12:28
#21
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


А к сожалению не шарю в программировании, но развивать идею можно долго - маятник например подвесить А часы классные, я по ним время смотрю
asys вне форума  
 
Непрочитано 22.12.2005, 12:36
#22
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


>Asys
Осторожнее...
В конце кода выполняется
purge all (один раз, чтоб удалить остатки часиков)
Можно запросто потерять только, что созданные слои или описания блоков не используемых в чертеже и еще много чего...
Елпанов Евгений вне форума  
 
Непрочитано 22.12.2005, 12:59
#23
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


Цитата:
В конце кода выполняется
purge all (один раз, чтоб удалить остатки часиков)
Э-э, блин позно :?

Ну да ладно, что с воза упало - то пропало
asys вне форума  
 
Непрочитано 22.12.2005, 13:05
#24
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Asys
Э-э, блин позно :?
Ну да ладно, что с воза упало - то пропало
Извини...
Я делал чистую демонстрацию - не думал, что ее будут использовать как будильник в акаде...
PS. Сам то я использую "Chameleon Clock" - простой и не напрягает.
Елпанов Евгений вне форума  
 
Непрочитано 22.12.2005, 13:16
#25
МВ


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


А как сие (пост 18) в картинку воплотить человеку далекому от программирования?
МВ вне форума  
 
Непрочитано 22.12.2005, 13:21
#26
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


Да ладно, не страшно, я то просто время глянуть , да девчонок удивить Я всегда в новом файле все запускал, а тут че та стормозил.
asys вне форума  
 
Непрочитано 22.12.2005, 13:31
#27
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


>Asys
Цитата:
Сообщение от Asys
Я всегда в новом файле все запускал, а тут че та стормозил.
Замени строчку
Код:
[Выделить все]
(vla-purgeall (vla-get-activedocument (vlax-get-acad-object)))
на
Код:
[Выделить все]
;(vla-purgeall (vla-get-activedocument (vlax-get-acad-object)))
Это обойдется тебе лишним описанием блока "cl_arrow" из двух линий. Зато сможешь запускать в любом чертеже...
>МВ
Не понял...
Что значит воплотить в картинку - эта программа выводит на экран циферблат нарисованный блоком на ограниченное время, а после чистит за собой файл...
Правда время показывает системное - обновляет около 5 раз в секунду.
Поясни, в чем проблема.
Елпанов Евгений вне форума  
 
Непрочитано 22.12.2005, 13:37
#28
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


>Елпанов Евгений
спасибо, а часы с маятником и кукушкой ???
asys вне форума  
 
Непрочитано 22.12.2005, 13:41
#29
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Нарисуй чертеж маятника, кукушки и самого корпуса...
Думаю, что все возможно - было бы время
Елпанов Евгений вне форума  
 
Непрочитано 22.12.2005, 13:50
#30
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


Цитата:
Нарисуй чертеж маятника, кукушки и самого корпуса...
Сделаю, попозже только
asys вне форума  
 
Непрочитано 22.12.2005, 14:01
#31
МВ


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


>Елпанов Евгений
Объяснить, для непродвинутого, пошагово, где взять, куда вставить, что бы лицезреть сие на экране.

Предыдущий мой пост писал и как то смайлик прилип вместо воьмерки и скобки.
МВ вне форума  
 
Непрочитано 22.12.2005, 14:30
#32
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Посмотри здесь
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=19612AN
Елпанов Евгений вне форума  
 
Непрочитано 22.12.2005, 17:12
#33
МВ


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


Спасибо, но когда взлянешь на этот громадный массив синего текста, становится почему то тоскливо.
МВ вне форума  
 
Непрочитано 11.01.2006, 18:19
#34
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Еще немного поработал над дизайном и убрал текст - теперь готовый скомпилированный файл...
[ATTACH]1136992824.rar[/ATTACH]
Елпанов Евгений вне форума  
 
Непрочитано 11.01.2006, 23:03
#35
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,342


Отличная работа, Евгений. Такой вопрос - а изменяемая длина стрелки, чтоб она не вылезала за эллипс циферблата насколько сложна в исполнении?
asys вне форума  
 
Непрочитано 11.01.2006, 23:08
#36
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Наверное ты прав - буду думать, как это попроще реализовать.
Здесь наклонный элипс...
Елпанов Евгений вне форума  
 
Непрочитано 12.01.2006, 11:41
#37
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


>Елпанов Евгений
Запустил на русском акаде и получил
Цитата:
Неизвестная команда "DELAY". Для вызова справки нажмите F1.
200
Неизвестная команда "DELAY". Для вызова справки нажмите F1.
Подозреваю, что при вызове команд или опций не используется _
Былобы неплохо добавить что-то типа
Код:
[Выделить все]
(princ "\nНаберите CLO для запуска команды")
а то не сразу додумался, все c:my-clock да c:my-clock
VVA вне форума  
 
Непрочитано 12.01.2006, 12:07
#38
PSW


 
Регистрация: 12.01.2006
Донецк
Сообщений: 30


ЧАСЫ ИДУЩИЕ 10 секунд
;************************************************************
(defun *ERROR* ()
(command "_ZOOM" "_ALL" )
(command "_ERASE" "_w" '(-100.0 -100.0) '(100.0 100.0) "")
(SetVar "FILEDIA" 1) (princ)
) ; end defun *error*
;***********************************************************
(defun C:PSW (/ A A1 A2 A3 A4 B1 T0 T1 T2 U U1 W1 W2 W3)
(setvar "CMDECHO" 0)
(command "_ZOOM" "_w" '(-100.0 -100.0) '(100.0 100.0))
(setq T1 (list 0.0 90.0))
(setq T2 (list 0.0 100.0))
(setq T0 (list 0.0 0.0))
(command "_LINE" T1 T2 "")
(setq A (entlast))
(command "_ARRAY" A "" "_p" T0 60 "" "")
;***************************************************
(setq T1 (list 0.0 85.0))
(setq T2 (list 0.0 100.0))
(command "_PLINE" T1 "_w" 2.0 2.0 T2 "")
(setq A (entlast))
(command "_ARRAY" A "" "_p" (list 0.0 0.0) 12 "" "")
;***************************************************
(repeat 10
(setq A (rtos (getvar "CDATE") 2 8))
(setq A1 (substr A 10 2)); Часы
(setq A2 (substr A 12 2)); Минуты
(setq A3 (substr A 14 2)); Cекунды
(setq A4 A3)
;*****************************************************
(setq B1 (+ (atoi A1) (/ (atoi A2) 60.0)))
(setq U (- 90.0 (* B1 30.0)))
(command "_PLINE"
(polar T0 (G2R (+ 180.0 U)) 20.0)
T0 "_w" 4.0 4.0
(polar T0 (G2R U) 50.0) ""
)
(setq W1 (entlast))
;*****************************************************
(setq B1 (+ (atof A2) (/ (atof A3) 60.0) ))
(setq U (- 90.0 (* B1 6.0)))
(command "_PLINE"
(polar T0 (G2R (+ 180.0 U)) 20.0)
T0 "_w" 4.0 4.0
(polar T0 (G2R U) 80.0) ""
)
(setq W2 (entlast))
;*****************************************************
(setq B1 (atof A3))
(setq U (- 90.0 (* B1 6.0)))
(setq U1 (fix (- 90.0 (* B1 6.0))))
(command "_LINE" (polar T0 (G2R (+ 180.0 U)) 20.0)
(polar T0 (G2R U) 100.0) "")
(setq W3 (entlast))
;*****************************************************
(while (= A3 A4)
(setq A (rtos (getvar "CDATE") 2 8))
(setq A4 (substr A 14 2))
)
;*****************************************************
(entdel W1)
(entdel W2)
(entdel W3)
); REPEAT
(command "_ZOOM" "_ALL" )
(command "_ERASE" "_w" '(-100.0 -100.0) '(100.0 100.0) "")
(SetVar "FILEDIA" 1) (princ)
)
PSW вне форума  
 
Непрочитано 12.01.2006, 12:23
#39
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


>PSW
Допиши до кучи функцию
G2R
Без нее же не будет работать...
Елпанов Евгений вне форума  
 
Непрочитано 12.01.2006, 12:56
#40
PSW


 
Регистрация: 12.01.2006
Донецк
Сообщений: 30


ФУНКЦИИ перевода градусы в радианы и наоборот
;************************************************************
; Функция переводит градусы в радианы
; Параметр - угол в градусах
;************************************************************(defun G2R (GG / AA)
(setq AA (/ (* pi GG) 180.0))
) ;END DEFUN
;************************************************************ ;************************************************************
;************************************************************
; Функция переводит радианы в градусы
; Параметр - угол в радианах
(defun R2G (GG / AA)
(setq AA (/ (* 180.0 GG) pi))
) ;END DEFUN
;************************************************************************
PSW вне форума  
 
Непрочитано 12.01.2006, 13:29
#41
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


>PSW
1 У тебя, почему то, слетело форматирование - потерялись некоторые скобки.
2 После приведения в порядок п 1 нашел еще две ошибки в вытаскивании даты не все цифры доставались, пришлось заменить
Код:
[Выделить все]
(setq A (rtos (getvar "CDATE") 2))
на
Код:
[Выделить все]
(setq A (rtos (getvar "CDATE") 2 16))
Тогда часики пошли, но очень быстро (полностью заканчивали работу за долю секунды) пришлось добавить в цикл
Код:
[Выделить все]
(vl-cmdf "Delay" 200)
и увеличить количество повторов...
После всех доделок получились приятные часики...
Код:
[Выделить все]
;**********Автор PSW ************************
; Функция переводит градусы в радианы ; Параметр - угол в градусах
;************************************************************
(defun G2R (GG / AA) (setq AA (/ (* pi GG) 180.0)) )

;************************************************************
;************************************************************
;************************************************************
; Функция переводит радианы в градусы
; Параметр - угол в радианах
(defun R2G (GG / AA) (setq AA (/ (* 180.0 GG) pi)) )

;************************************************************
;************************************************************
(defun *ERROR* ()
  (command "_ZOOM" "_ALL")
  (command "_ERASE" "_w" '(-100.0 -100.0) '(100.0 100.0) "")
  (SetVar "FILEDIA" 1)
  (princ)
) ;_  defun
  ; end defun *error*
  ;***********************************************************
(defun C:PSW (/ A A1 A2 A3 A4 B1 T0 T1 T2 U U1 W1 W2 W3)
  (setvar "CMDECHO" 0)
  (command "_ZOOM" "_w" '(-100.0 -100.0) '(100.0 100.0))
  (setq T1 (list 0.0 90.0))
  (setq T2 (list 0.0 100.0))
  (setq T0 (list 0.0 0.0))
  (command "_LINE" T1 T2 "")
  (setq A (entlast))
  (command "_ARRAY" A "" "_p" T0 60 "" "")
  ;***************************************************
  (setq T1 (list 0.0 85.0))
  (setq T2 (list 0.0 100.0))
  (command "_PLINE" T1 "_w" 2.0 2.0 T2 "")
  (setq A (entlast))
  (command "_ARRAY" A "" "_p" (list 0.0 0.0) 12 "" "")
  ;***************************************************
  (repeat 50
    (setq A (rtos (getvar "CDATE") 2 16))
    (setq A1 (substr A 10 2))
  ; Часы
    (setq A2 (substr A 12 2))
  ; Минуты
    (setq A3 (substr A 14 2))
  ; Cекунды
    (setq A4 A3)
  ;*****************************************************
    (setq B1 (+ (atoi A1) (/ (atoi A2) 60.0)))
    (setq U (- 90.0 (* B1 30.0)))
    (command "_PLINE" (polar T0 (G2R (+ 180.0 U)) 20.0) T0 "_w" 4.0 4.0 (polar T0 (G2R U) 50.0) "")
    (setq W1 (entlast))
  ;*****************************************************
    (setq B1 (+ (atof A2) (/ (atof A3) 60.0)))
    (setq U (- 90.0 (* B1 6.0)))
    (command "_PLINE" (polar T0 (G2R (+ 180.0 U)) 20.0) T0 "_w" 4.0 4.0 (polar T0 (G2R U) 80.0) "")
    (setq W2 (entlast))
  ;*****************************************************
    (setq B1 (atof A3))
    (setq U (- 90.0 (* B1 6.0)))
    (setq U1 (fix (- 90.0 (* B1 6.0))))
    (command "_LINE" (polar T0 (G2R (+ 180.0 U)) 20.0) (polar T0 (G2R U) 100.0) "")
    (setq W3 (entlast))
  ;*****************************************************
    (while (= A3 A4)
      (vl-cmdf "Delay" 200)
      (setq A (rtos (getvar "CDATE") 2))
      (setq A4 (substr A 14 2))
  ;*****************************************************
      (entdel W1)
      (entdel W2)
      (entdel W3)
    ) ;_  while
  ); REPEAT
    (command "_ZOOM" "_ALL")
    (command "_ERASE" "_w" '(-100.0 -100.0) '(100.0 100.0) "")
    (SetVar "FILEDIA" 1)
    (princ)
) ;_  defun
Елпанов Евгений вне форума  
 
Непрочитано 12.01.2006, 13:31
#42
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


>PSW
Если обидел, извини за нахальство.
Елпанов Евгений вне форума  
 
Непрочитано 12.01.2006, 14:15
#43
PSW


 
Регистрация: 12.01.2006
Донецк
Сообщений: 30


Евгений, в исходном тексте программы вместо числа 8 появился смайлики рожицы. Видимо их надо было отключить, а за функцию G2R правильное замечание, они у меня прописаны в ACAD.LSP, и я постоянно ими пользуюсь забывая присоединить к программам.
PSW вне форума  
 
Непрочитано 13.01.2006, 14:00
#44
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от VVA
>Елпанов Евгений
Запустил на русском акаде и получил
Цитата:
Неизвестная команда "DELAY". Для вызова справки нажмите F1.
200
Неизвестная команда "DELAY". Для вызова справки нажмите F1.
Подозреваю, что при вызове команд или опций не используется _
Былобы неплохо добавить что-то типа
Код:
[Выделить все]
(princ "\nНаберите CLO для запуска команды")
а то не сразу додумался, все c:my-clock да c:my-clock
Исправленно...
[ATTACH]1137150689.rar[/ATTACH]
Елпанов Евгений вне форума  
 
Непрочитано 13.01.2006, 14:04
#45
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Asys
Отличная работа, Евгений. Такой вопрос - а изменяемая длина стрелки, чтоб она не вылезала за эллипс циферблата насколько сложна в исполнении?
Если изменять длинну стрелок может оказаться, что часовая будет короче минутной например в 3-00...
Наверное имеет смысл уменьшить секундную отрисовав ее тонкой линией.
Елпанов Евгений вне форума  
 
Непрочитано 13.01.2006, 14:29
#46
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


>Елпанов Евгений Не сочти за занудство, мне не влом будильник удалить ручками, просто так, для порядка. Появилось
Цитата:
Неизвестная команда "UNDO"
VVA вне форума  
 
Непрочитано 13.01.2006, 14:37
#47
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от VVA
>Елпанов Евгений Не сочти за занудство, мне не влом будильник удалить ручками, просто так, для порядка. Появилось
Цитата:
Неизвестная команда "UNDO"
Исправленно:
[ATTACH]1137152275.rar[/ATTACH]
Елпанов Евгений вне форума  
 
Непрочитано 13.01.2006, 15:53
#48
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Переделал секундную стрелку и добавил обработку ошибок на случай ESC...
[ATTACH]1137156816.rar[/ATTACH]
Елпанов Евгений вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > ЧАСЫ на Лиспе - Олимпийская задачка