| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
22.01.2017, 00:08 | #1 | |
Расчленение блока и перемещение объектов на передний план (VBA)
Петрозаводск
Регистрация: 16.04.2009
Сообщений: 323
|
||
Просмотров: 8394
|
|
||||
ну и перемещай обьекты на передний план в цикле, начиная с маскировки
обьекты блока будут поверх нее, а маскировка поверх обьектов чертежа
__________________
Мастерская СПДС |
||||
|
||||
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323
|
Прошу прощения с давность темы
Дело том, что в цикле перемещать каждый объект - процесс долгий. Учитывая то, что функционал VBA позволяет перемещать сразу набор. Вот и хочется получив набор разбитого блока переместить сразу, но при этом убрать из набора маскировку |
|||
|
||||
Создать новый массив с размером -1 от набора.
засунуть в этот массив всё из набора за исключением маскировки это перебором, но будут быстрее чем каждый на верх. массив переместить на верх целиком. это теоретически, но думаю должно работать
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем..... |
||||
|
||||
никак
в смысле программно или по условию задачи ? ----- добавлено через ~4 мин. ----- Как вариант получаете габарит блока, взрываете, создаёте набор 1 с фильтром который берёт только маскировку, вырезаете маскировку, создаёте набор 2 со всеми элементами без маскировки, вставляете маскировку, перемещаете набор 2 на верх. С вас пиво.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем..... |
||||
|
||||
ну блин.... на сухую сложно писать...
кидаешь свой набор в коодинаты 100000 на 100000 обрабатываешь как я описал выше перемещаешь набор в свои координаты.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем..... |
||||
|
||||
как вам это удается.. без строчки кода и прииера чертежа.. профи !!!
послежу, почитаю
__________________
Мастерская СПДС |
||||
|
||||
Делаем эксплоде, получаем массив всего содержимого блока, так ?
Этот массив делаем муве в космос, получилось? По координатам массива делаем селект сет с фильтром на маскировку, получаем ее и делаем муве в исходное координаты, получилось? Потом опять селект сет на оставшееся в космосе, и муве в исходные. По логике маскировка должна получиться снизу. Пишу смобилы проверить не могу.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем..... |
||||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
|
|||
|
||||
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323
|
Коллеги, я понял в чем основной затык, который не дает обойтись без перебора. Нет возможности в .MoveToTop подсунуть набор, там требуется массив объектов.
На данный момент у меня уже есть реализация схожая с решением от Boxa, но она замедлена циклом, и я думал, что должно быть более оптимальное решение. Хотя, кое что попробую еще упростить. Кстати, Boxa, отсечение маскировок делал сравнивая с "IAcadRasterImage" вместо "IAcadWipeout". Вроде то же работает. Ну и пока обхожусь одним циклом. Два перебора, мне совсем печально будет. maratovich, к сожалению применение "космоса" меня пока не избавляет от создания массива циклом. |
|||
|
||||
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323
|
Тут не поспоришь. Но как говориться, на безрыбье и рак рыба. Альтернативные языки для данной задачи изучать нет желания. Вот и ищу оптимизацию на том уровне, которым владею.
Цитата:
В целом я уже благодаря этой дискуссии понял, что минимум один цикл нужен (из-за разницы в типах данных). Видимо придется смириться. Кстати, о словарях сортировки. Может кто имеет в них более глубокое познание: - если я создаю один словарь и начну его использовать для разных сортировок, то это не приведет к откату первых? То есть: создал в словаре сортировку, при помощи нее сгруппировал объекты (одни расположил над другими). Потом взял под другие объекты и при помощи того же словаря сгруппировал (вторые разместит над третьими).. И не получится так, что из-за этого сортировка первых со вторыми вернется на свои места? Этот вопрос исключительно, если владеете информацией. Целенаправленно проверять не надо. Спасибо. |
|||
|
||||
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323
|
Вот вариант процедуры. В файл не размещаю, думаю, что каждому удобнее вставить в свои пакеты, что бы не заморачиваться с библиотеками.
И прилагаю файл, где есть две пачки блоков (по 100 штук). В них отличается число примитивов и при обработке этих пачек наблюдается снижение скорости почти в два раза. Код:
|
|||
|
||||
Собственно кто это сказал ?
Вот код переноса назад: Код:
А не лучше селект сет с фильтром выбрать и взорвать все блоки , а потом так же выбрать только маскировку и переместить назад ? Или есть каки то особенности что надо каждый блок по очереди ? ----- добавлено через 26 сек. ----- Я ж говорю - на сухую плохо идёт
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем..... |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Функция чтения свойств и их значений динамического блока | Supermax | Библиотека функций | 11 | 16.03.2020 09:11 |
Как сделать макрос на расчленение объектов MagiCAD 2011.11/Ru | Alex_GSP | Программирование | 12 | 04.11.2015 12:38 |
Visual LISP: Почему перебор объектов в SelectionSet неактивного документа происходит очень медленно? | Shourick | LISP | 15 | 13.03.2015 15:23 |
Присвоение атрибуту блока значения атрибута другого блока. | shartal | Программирование | 4 | 14.11.2013 14:02 |
Проблема с базовой точкой блока и вхождением блока в DXF | nogaems | Программирование | 5 | 29.08.2013 15:46 |