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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > _wipeout из Lisp

_wipeout из Lisp

Ответ
Поиск в этой теме
Непрочитано 22.03.2012, 12:01 #1
_wipeout из Lisp
Shustrik_oeas
 
Регистрация: 22.03.2012
Сообщений: 6

Доброго времени суток, многоуважаемый All.
Возникла проблемка:
Нужно построить в autocad круглую маскировку (_wipeout)
Вот мой код:
Код:
[Выделить все]
 
(defun arccos (x /)
 (cond
  ((= x 0.0) (/ PI 2.0))
  ((= x 1.0) 0.0)
  ((= x –1.0) PI)
  (t (- (/ PI 2.0) (atan (/ x (sqrt (abs (- 1 (* x x))))))))
  )
)

(DeFun C:MaskCircle()
    (SetQ Centr  (GetPoint "Центр")
	  Radius (GetPoint "Радиус")
	  Delta 10  ; это длинна сегмента
	  CentrX (Car Centr)
	  CentrY (Cadr Centr)
	  RadiusX (Car Radius)
	  RadiusY (Cadr Radius)
	  R (Sqrt (+ (* (- RadiusX CentrX) (- RadiusX CentrX)) (* (- RadiusY CentrY) (- RadiusY CentrY))))
	  L (* 2 Pi R)
	  C (- (Fix (/ L Delta)) 1)
	  Con (/ Pi 360)
	  Alpha (arccos (- 1 (/ (* Delta Delta) (* 2 R R))))
	  Alpha1 Alpha
	  PCList (List (+ R CentrX)  CentrY 0.0 "")
    )
    (Repeat C ; здесь расчитываются последующие точки
       (SetQ  NextX (+ CentrX (* R (cos (* Alpha1 Con))))
	      NextY (+ CentrY (* R (sin (* Alpha1 Con))))
	      Alpha1 (+ Alpha1 Alpha)
	      PCList (Append PCList (List NextX NextY 0.0 ""))
       )
    )
    (Command "_wipeout" PCList "") ; А вот здесь сама проблема
)
Все считается, но команда выполняться со списком PCList не хочет. Может кто-то сталкивался с подобной проблемой (как подставить в команду ожним списком несколько точек).
Просмотров: 2601
 
Непрочитано 22.03.2012, 12:10
#2
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,373


_wipeout по отдельным точкам рисуется или по указанной замкнутой полилинии
Хмурый вне форума  
 
Автор темы   Непрочитано 22.03.2012, 12:14
#3
Shustrik_oeas


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


Я исходил, что по отдельным точкам. Хотя как полилинию я строить не пробовал.
Shustrik_oeas вне форума  
 
Непрочитано 22.03.2012, 12:16
#4
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,373


Shustrik_oeas, ты весь список ему скармливаешь, а следует отдельные координаты...
Хмурый вне форума  
 
Автор темы   Непрочитано 22.03.2012, 12:17
#5
Shustrik_oeas


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


Я это понимаю, но отдельных координат при различных радиусах будет разное количество
Shustrik_oeas вне форума  
 
Непрочитано 22.03.2012, 12:20
#6
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,373


а это тут при чём? у тебя есть список с координатами точек, ну и выбирай из него координаты.
если нужно- вычисли длину списка

Последний раз редактировалось Хмурый, 22.03.2012 в 12:25.
Хмурый вне форума  
 
Автор темы   Непрочитано 22.03.2012, 12:26
#7
Shustrik_oeas


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


Т.е.
Код:
[Выделить все]
 
(Command "_wipeout" (Repeat C  (SetQ XY (Car PCList)  PCList (Cdr PClist)) XY) "З")
Эта конструкция также не работает.
Длина списка известна, а вот как должна выглядеть команда не понятно.
Shustrik_oeas вне форума  
 
Непрочитано 22.03.2012, 12:36
#8
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,373


перменная должна быть списком вида x y (координаты точки) через пробел
Хмурый вне форума  
 
Автор темы   Непрочитано 22.03.2012, 12:49
#9
Shustrik_oeas


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


когда в одной переменной больше 1 пары XY команда отказывается работать. Если бы заранее можно было сформировать конструкцию вида:
Код:
[Выделить все]
 
(Command "_wipeout" (List X Y) (List X1 Y1) ........... (List Xn Yn) "") 
Но я не знаю как ее запустить скажем из строковой переменной. Можно ли вообще сформировать какую либо переменную, а затем выполнить ее внутри этой прогнраммы?
Shustrik_oeas вне форума  
 
Непрочитано 22.03.2012, 12:52
1 | #10
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Код:
[Выделить все]
 
; lst - список координат
; например: 
_$ lst
((1052.91 1031.52 0.0) (1062.32 1043.75 0.0) (1076.43 1043.22 0.0) (1099.67 1036.41 0.0) (1097.97 1024.54 0.0))
(apply 'vl-cmdf (append (list "_.wipeout") lst (list "")))
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 22.03.2012, 12:55
#11
Shustrik_oeas


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


Спасибо!
Shustrik_oeas вне форума  
 
Непрочитано 22.03.2012, 13:00
#12
VVA

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


Код:
[Выделить все]
(DeFun C:MaskCircle()
    (SetQ Centr  (GetPoint "Центр:")
	  Radius (Getdist Centr "Радиус:")
          startparam 0 ;_Начальный угол 0
          endparam   (* 2 PI) ;_360
          anginc (* pi (/ 5.0 180.0)) ;_Сегменты по 5 градусов
    )
  (while
      (or
        (< startparam endparam)
        (equal startparam endparam 1e-12)
      )
      (setq pt (polar Centr startparam Radius)
            ptlst (cons pt ptlst)
            startparam (+ anginc startparam)
      )
    )
  (while (> (getvar "CMDACTIVE") 0) (command))
  (Command "_wipeout")
  (foreach pt ptlst (command "_none" pt))
  (Command "")
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > _wipeout из Lisp



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) Red Nova LISP 5025 20.08.2025 22:52
Умер разработчик языка программирования Lisp andr_g LISP 1 27.10.2011 08:36
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
Запуск Lisp команды в новом документе BlackHarp LISP 1 26.03.2009 23:06
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19