Сообщество программистов Autodesk в СНГ

ADN Club => AutoLisp / VisualLISP и DCL => Тема начата: 1958 от 21-03-2017, 16:18:22

Название: Выбор примитивов между двумя полилиниями
Отправлено: 1958 от 21-03-2017, 16:18:22
Имеется две замкнутые полилинии, одна в другой. Между ними находятся примитивы. Как их выбрать для дальнейшего удаления/перемещения/копирования?
(https://s2.postimg.org/pj5jcyr2d/image.jpg) (https://postimg.org/image/pj5jcyr2d/)
Название: Re: Выбор примитивов между двумя полилиниями
Отправлено: Александр Ривилис от 21-03-2017, 17:06:59
Скажу сразу, что ни в одном из AutoCAD'овских API нет готовых средств для этой цели. Самое простое из того, что можно сделать - это получить два набора примитивов и убрать из первого те примитивы, которые есть во втором наборе.
Получаем список вершин (или точек аппроксимации, если в полилинии есть дуговые сегменты) внешней полилинии (назовём его pts1), список вершин (или точек аппроксимации) внутренней полилинии (pts2)
Получаем два набора:
Код - Auto/Visual Lisp [Выбрать]
  1. (setq ss1 (ssget "_CP" pts1))
  2. (setq ss2 (ssget "_CP" pts2))
Ну и из набора ss1 выкидываем всё, что есть в наборе ss2. Ну и в конце для выделения набора:
Код - Auto/Visual Lisp [Выбрать]
  1. (sssetfirst nil ss1)
При этом обе полилинии должны находится в видимой области в момент обращения к функциям (ssget)
Как-то так.
Название: Re: Выбор примитивов между двумя полилиниями
Отправлено: 1958 от 21-03-2017, 17:30:58
Спасибо!
Скажу сразу, что такое решение у меня вертелось в голове. Думал, что есть что-нибудь красивее.
Ну, что же! Будем ваять два набора.  :)