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

ADN Club => AutoCAD .NET API => Тема начата: Константин А от 02-02-2018, 15:11:14

Название: Быстрый перебор объектов в модели
Отправлено: Константин А от 02-02-2018, 15:11:14
Добрый день.
Делаю плагин для AutoCAD.

Задача следующая:
Имеется набор чертежей в пространстве модели.
Плагин будет раскидывать чертежи (рамки) по отдельным файлам dwg, и публиковать в pdf.

Рассматриваю, такую логику, выбираем рамки, создаем копию документа по кол-ву рамок, в каждом документе удаляем все объекты кроме соответствующей рамки и объектов в её границах, и так в каждом документе.
Проблема в следующем:
Перебор всех объектов (Entity), с проверкой координат (в нашей рамке объект или нет), (удаляем все что за границами рамки), занимает много времени.

Может у Вас есть идеи, или может есть способ программного выделения области (дабы не перебирать все объекты а получить набор выделения)?
Благодарю!
Название: Re: Быстрый перебор объектов в модели
Отправлено: Александр Ривилис от 02-02-2018, 15:16:00
Рассматриваю, такую логику, выбираем рамки, создаем копию документа по кол-ву рамок, в каждом документе удаляем все объекты кроме соответствующей рамки и объектов в её границах, и так в каждом документе.
Не понял зачем так. Достаточно для каждой рамки отобрать всё что внутри неё и использовать метод Database.Wblock для создания нового файла, в котором только объекты внутри рамки.
Название: Re: Быстрый перебор объектов в модели
Отправлено: Константин А от 02-02-2018, 15:21:09
Достаточно для каждой рамки отобрать всё что внутри неё
Процесс отбора объектов и занимает относительно много времени, ибо набор объектов неизвестен, приходиться проходить по всем объектам пространства модели и проверять координаты.
Название: Re: Быстрый перебор объектов в модели
Отправлено: Александр Ривилис от 02-02-2018, 15:24:39
Можно воспользоваться Editor.SelectWindow или Editor.SelectCrossingWindow, указав диагональные точки рамки. При этом точки должны быть видны на экране.
Название: Re: Быстрый перебор объектов в модели
Отправлено: Константин А от 02-02-2018, 19:54:59
Можно воспользоваться Editor.SelectWindow или Editor.SelectCrossingWindow, указав диагональные точки рамки. При этом точки должны быть видны на экране.
То что нужно.
Благодарю!