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

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

Как на лиспе начертить много линий по заданным координатам из одной точки

Ответ
Поиск в этой теме
Непрочитано 26.09.2009, 17:56 #1
Как на лиспе начертить много линий по заданным координатам из одной точки
topograf83
 
Регистрация: 26.09.2009
Сообщений: 9

Подскажите пожалуйста. Задача из заданной точки, указанием мышки нужно прочертить линии, полилинии до заданного объекта, объектов.
т.е у меня есть одна точка и на определенном удалении от нее замкнутая полилиния, мне нужно чтобы из этой точки быстро были проведены линии к каждой ручки полилинии.
Заранее спасибо.
Просмотров: 2631
 
Непрочитано 26.09.2009, 19:42
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


После загрузки этого лиспа введи команду "zvezda"
Код:
[Выделить все]
(defun c:zvezda( / pt1)
(setq pt1 (getpoint "\nНачальную точку"))
(vla-startundomark (vlax-get-property (vlax-get-acad-object) 'ActiveDocument))
(mapcar '(lambda (pt2) (entmakex (list (cons 0 "line") (cons 10 pt1) (cons 11 pt2))))
(apply 'append (mapcar '(lambda (obj / lst) (if (setq lst (pltolist obj)) lst (3dplntolist obj))) 
(sstolist (ssget (list (cons -4 "<OR") (cons 0 "polyline") (cons 0 "lwpolyline") (cons -4 "OR>")))))))
(vla-endundomark (vlax-get-property (vlax-get-acad-object) 'ActiveDocument))
);end of zvezda

;библиотечные
(defun sstolist (ss / i lst); конвертирует набор в список
(setq i 0)
(if ss
(repeat (sslength ss)
(setq lst (append lst (list (ssname ss i))) i (1+ i))
));end of repeat & if
lst
);end of sstolist

(defun pltolist (obj / tmp); возращает список координат вершин полилинии
(if (= (cod 0 obj) "LWPOLYLINE")
(mapcar '(lambda (x) (trans (append (cdr x) (list (cod 38 obj))) (cod 210 obj) 0)) (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget obj)))
);end of if
);end of pltolist

(defun 3dplntolist (pln / lst); возращает список координат вершин 3Д полилинии
(if (= (cod 0 pln) "POLYLINE")
(while (/= (cod 0 pln) "SEQEND")
(setq	lst (cons (cod 10 pln) lst)
	pln (entnext pln)
);end of setq
));end of while & if
(cdr (reverse lst))
);end of 3dplntolist

(defun cod (cd obj) ; возращает код cd примитива obj.
(if (and obj (= (type obj) 'ename))
(cdr (assoc cd (entget obj)))
));end of cod
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 26.09.2009, 20:04
#3
topograf83


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


Дима огромное спасибо!!! Все рабтает как часы, я даже не ожидал, что мне так быстро помогут. Большое человеческое спасибо.
topograf83 вне форума  
 
Непрочитано 26.09.2009, 21:05
#4
VVA

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


2 Дима_. Вместо конструкцуии ИЛИ (OR) в ssget можно еще использовать и *
Код:
[Выделить все]
 
(ssget '((0 . "*POLYLINE")))
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.09.2009, 22:53
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Знаю, я просто про обычные полилинии не сразу вспомнил - и добавил "наотмаш", но все равно спасибо - что смотришь - я чужой код вобще с трудом воспринимаю - привык с asm'а в столбец "без разноса" писать - даже немного завидую - мне прощ новую функцию напсать, чем в чужую "въезжать".
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как на лиспе начертить много линий по заданным координатам из одной точки

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 915 08.07.2022 12:36
Как начертить линию с заданным углом наклона? evsu AutoCAD 12 07.11.2008 23:29
Мониторы LCD CRT Разное 94 17.06.2008 10:51
как в solidworks поставить "групповой" размер от одной точки покругу? jeniabell SolidWorks 2 15.01.2008 14:38
ЮМОР 2006 =) Perezz!! Разное 1122 04.01.2007 00:46