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

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

Расчленение блока и перемещение объектов на передний план (VBA)

Ответ
Поиск в этой теме
Непрочитано 22.01.2017, 00:08
Расчленение блока и перемещение объектов на передний план (VBA)
Theodor
 
Петрозаводск
Регистрация: 16.04.2009
Сообщений: 323

Коллеги, доброго здоровичка!
Выручайте, не могу побороть проблемку в VBA.

Средствами метода .explode взрываю блок, но в блоке есть "маскировка". Важно, что бы все примитивы блока после расчленения были выше этой "маскировки" (так сказать на переднем плане чертежа). Кроме того, саму "маскировку" нельзя отправлять на задний план.

Алгоритм вижу такой:
- получить массив объектов после расчленения блоков
- удалить из массива "маскировку", или создать новый массив без этой маскировки.
- переместить оставшиеся объекты (примитивы) на передний план

Массив после расчленения получаю так:
Dim SetExpBlock as variant
SetExpBlock=OBlock.Explode 'OBlock - это статический блок на чертеже

а тут начинаются проблемы:
- как из набора (массива) убрать элемент "маскировка"? Найти их при переборке получается, но как убрать? Не удалив при этом сам объект с чертежа.
If TypeName(SetExpBlock(Index)) = "IAcadRasterImage" Then ...

И как этот массив (набор) подсунуть в метод переноса на передний план (попытка ниже)? У меня от VBA одна ругань на неопределенные переменные. Я просто запутался в их типах.

Перемещение объектов на передний план пытаюсь сделать методом
Dim DrawDic As Object
Dim MObj As Object
Set DrawDic = ThisDrawing.ModelSpace.GetExtensionDictionary
Set MObj = DrawDic.AddObject("ACAD_SORTENTS", "AcDbSortentsTable")
MObj.MoveToTop SetObjs ' SetObjs - объект или набор - тут не понятно


В общем: как получить все объекты расчленения блока, и те из них, которые не являются "маскировкой" (растровым изображением), переместить на передний план?

Спасибо за понимание.
Прошу прощения, что не оформил код
Просмотров: 8396
 
Автор темы   Непрочитано 30.07.2017, 23:10
#21
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323


Маскировку нельзя на задний план по условию использования. В противном случае на кой она вообще нужна на заднем плане, если ничего закрывать не будет.
Theodor вне форума  
 
Непрочитано 01.08.2017, 08:57
#22
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


новая вводная:
использовать команду
_XPLODE
с параметром
_По объекту
она не перекидывает маскировку на верх.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 03.08.2017, 21:01
#23
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323


Цитата:
Сообщение от maratovich Посмотреть сообщение
использовать команду
_XPLODE
Вся затея реализовать свою функцию на VBA вылезла из необходимости сохранить значение атрибутов. При штатном расчленении они превращаются в названия полей.
А функция в expresstools маскировку размещает когда как.
Theodor вне форума  
 
Непрочитано 03.08.2017, 21:08
#24
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от Theodor Посмотреть сообщение
А функция в expresstools маскировку размещает когда как.
Это вы про _burst ?

----- добавлено через ~1 мин. -----
так у вас ещё и атрибуты ???? условие усложняется...
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 03.08.2017, 21:13
#25
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323


Цитата:
Сообщение от maratovich Посмотреть сообщение
Это вы про _burst ?
Не знаю, как она точно называется. Сейчас е-тулса нет под рукой, посмотреть не смогу в ближайшие три недели.

Да и использование сторонних решений мне не всегда актуально, так как в своем коде я добавлю дополнительный функционал - например отфильтровываю блоки по некоторым критериям.
Theodor вне форума  
 
Непрочитано 03.08.2017, 21:13
#26
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Кстати Theodor, а вы в своём коде что, каждый блок делаете .Explode и обрабатываете ?
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 03.08.2017, 21:14
#27
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323


Цитата:
Сообщение от maratovich Посмотреть сообщение
условие усложняется...
ну с этими условиями у меня нет сложностей.
Theodor вне форума  
 
Непрочитано 03.08.2017, 21:15
#28
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


имелось ввиду - каждое вхождение в чертеже обрабатываете ?
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 03.08.2017, 21:23
#29
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323


Цитата:
Сообщение от maratovich Посмотреть сообщение
Кстати Theodor, а вы в своём коде что, каждый блок делаете .Explode и обрабатываете ?
Цитата:
Сообщение от maratovich Посмотреть сообщение
имелось ввиду - каждое вхождение в чертеже обрабатываете ?
Увы, да. А есть пакетное расчленение с получением массива объектов?

Иногда приходят мысли, с учетом того, что задача с расчленением блока постоянно расширяется (с момента постановки вопроса), то в комплексе придется рассматривать метод с лишним циклом и создания временного массива или может в итоге и xplode подойдет (останется разобраться как к ней прикрутить набор, заданный программно).
Theodor вне форума  
 
Непрочитано 03.08.2017, 21:31
#30
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от Theodor Посмотреть сообщение
Увы, да.
А вот теперь... ахалай махалай, сяски.... зачем ???!!!
Блок то один, просто его вхождений много (одинаковых, без учета значения атрибутов), из этого следует что расчленить и обработать можно только один блок. Потом этим расчленением просто заменять существующий блок. Это будет в разы быстрее. Вставляете по точке вставки блока, а порядок расположения по порядку как есть в каде.
По поводу атрибутов - надо смотреть цель, чего с ними делаете. Поэтому и просили реальный пример.
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 03.08.2017, 21:47
#31
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323


Цитата:
Сообщение от maratovich Посмотреть сообщение
Блок то один, просто его вхождений много (одинаковых, без учета значения атрибутов), из этого следует что расчленить и обработать можно только один блок. Потом этим расчленением просто заменять существующий блок. Это будет в разы быстрее. Вставляете по точке вставки блока, а порядок расположения по порядку как есть в каде.
Ну это не всегда так. Да и блоки есть динамические. Плюс надо учитывать поворот блока - в общем не пойдет такой вариант.

Цитата:
Сообщение от maratovich Посмотреть сообщение
По поводу атрибутов - надо смотреть цель, чего с ними делаете. Поэтому и просили реальный пример.
Я уже понял в диалоге, что есть альтернативные методы, плюс учет, что у самого стали появляться дополнительные потребности. Постараюсь задачу обрисовать целиком, и возможно собрать то, что пока использую (код).
Theodor вне форума  
 
Непрочитано 03.08.2017, 21:49
| 1 #32
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от Theodor Посмотреть сообщение
Да и блоки есть динамические
Без нормального ТЗ результат ХЗ
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Автор темы   Непрочитано 03.08.2017, 22:06
#33
Theodor


 
Регистрация: 16.04.2009
Петрозаводск
Сообщений: 323


Цитата:
Сообщение от maratovich Посмотреть сообщение
Без нормального ТЗ результат ХЗ
Это точно!!! Полезная рифма, учту в работе по проектированию.

Просто вопрос то был: можно ли преобразовать массив примитивов, полученного расчленением, в массив, пригодный для .MoveToTop без перебора в цикле.
И уж если никак этого не избежать, то и придется смотреть на задачу комплексе и искать возможности по ускорению обработки.

Ну пока вкратце (сейчас нет под рукой решений) некое ТЗ:
есть куча блоков на плане (в том числе и динамические, и с атрибутами, и с маскировкой) - вариации разные.
надо провести пакетное расчленение (как правило запрашивается пространство, но отфильтровываются блоки по именам) с преобразованием атрибутов в текстовые поля, и размещением вытащенных примитивов и полученных текстов поверх маскировок.

Все необходимое мне понято как реализовать, но скорость из-за промежуточных циклов падает - пример я выкладывал. Хотя кое какие мысли имеются, но до реализации пока руки не дошли.
Theodor вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Расчленение блока и перемещение объектов на передний план (VBA)

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция чтения свойств и их значений динамического блока 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