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

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

Найти полигон (замкнутая полилиния) по клику

Ответ
Поиск в этой теме
Непрочитано 28.08.2014, 15:24 #1
Найти полигон (замкнутая полилиния) по клику
nolte
 
спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190

видел, что возможно определить нужную плинию клинув внутри ее, но как это сделать.
getboundingbox определяет плинию на чистом чертеже, но если есть несколько да еще и со смежными сторонами, возникает проблема.кто то подскажет логику.
__________________
Знание лисп: со справочником Н. Полещука
Просмотров: 2696
 
Непрочитано 28.08.2014, 15:53
#2
Кулик Алексей aka kpblc
Moderator

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


Вариант 1: через _boundary строить контур и искать полилинию по таким же координатам
Вариант 2: получив точку, проходить по всем полилиниям текущего пространства и искать наименее удаленную.
Наверняка есть вариант 3, 4 и далее.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.08.2014, 16:17
#3
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


не Алексей не то и не то не катит, не будет однозначного ответа.
ищу варианты 3, 4 и т.д.

----- добавлено через ~40 мин. -----
решил кажись спасибо.
__________________
Знание лисп: со справочником Н. Полещука
nolte вне форума  
 
Непрочитано 28.08.2014, 18:45
#4
gomer

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


Ищи на болоте
gomer вне форума  
 
Непрочитано 28.08.2014, 18:52
#5
VVA

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


Цитата:
Сообщение от gomer Посмотреть сообщение
Ищи на болоте
Как вариант можно здесь посмотреть Там сделано через boundary.
Распознаются следуюшие контура:
1. Треугольник (в том числе прямоугольный, равносторонний и равнобедренный)
2. Ромб
3. Квадрат
4. Трапеция
5. Параллелограмм
6. Прямоугольник
7. Круг
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 28.08.2014, 20:02
#6
nolte

спринклеры, сантехника
 
Регистрация: 26.01.2010
Сообщений: 190
Отправить сообщение для nolte с помощью Skype™


вот так работает(пока ошибок не нашел).работает для всего, в том числе и не выпуклых многоугольников.
для проверки- в командную строку
(redraw(vlax-vla-object->ename(c:90)) 3)
выключить выделение
РЕГЕН или _regen
Код:
[Выделить все]
 
;;;    ОПРЕДЕЛЕНИЕ ПРИНАДЛЕЖНОСТИ ТОЧКИ ПОЛИГОНУ
(defun c:90 (/ tmp_obj p lst)
(vl-load-com)
(seta lst(list 1000000000))
(setq tmp_obj
	(vla-addray (vla-get-modelspace(vla-get-activedocument(vlax-get-acad-object)))
		(vlax-3d-point(setq p(getpoint "\nPIK INSERT POINT FOR TEXT :")))
		(vlax-3d-point(subst (1+ (cadr p))(cadr p) p))
	)
)
(mapcar '(lambda(a / mm)
					(if(eq(vla-get-closed a) :vlax-true)
						(if
							(not
								(eq
									(vlax-safearray-get-u-bound
										(setq mm(vlax-variant-value (vla-intersectwith tmp_obj a acExtendNone)))
										1
									)
									'-1
								)
							)
							(if(not(zerop(rem(length(setq mm(l-lst-to-lst-3-coor(vlax-safearray->list mm)))) 2)))
								(if lst
									(if(>(car lst)(distance p (car mm)))
										(setq lst(list (distance p (car mm)) a))
									)
								)
							)
						)
					)
				)
	(mapcar 'vlax-ename->vla-object(l-conv-set-to-lst(ssget "_X" (list(cons 0 "*POLYLINE")))))
)
(vla-delete tmp_obj)
(cadr lst)
)
;;---------------------------
(defun L-conv-set-to-lst (n / i lst)
(repeat (setq i (sslength n))
	(setq lst (cons (ssname n (setq i (1- i))) lst))
)
)
;;---------------------------
(defun l-lst-to-lst-3-coor (lst / l2)
(while lst
	(setq l2 (cons (list(car lst)(cadr lst)(caddr lst)) l2))
	(setq lst(cdddr lst))
)
(reverse l2)
)
__________________
Знание лисп: со справочником Н. Полещука

Последний раз редактировалось nolte, 29.08.2014 в 23:24.
nolte вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Найти полигон (замкнутая полилиния) по клику



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить, что замкнутая полилиния является прямоугольником? annt Программирование 6 15.10.2014 12:49