(изменено: Александр Ривилис, 15 апреля 2016г. 12:32:53)

Тема: ObjectARX. Расчленение и удаление proxy-объектов

Команда EXPLODEALLPROXY:
Расчленяет все proxy-примитивы (которые можно расчленить, т.е. программист при их создании не указал флаг нерасчленяемости), во всем чертеже.
Команда REMOVEALLPROXY:
Удаляет все proxy-объекты и proxy-примитивы (в том числе и те, которые имеют флаг неудаляемости). Ее удобно выполнять после EXPLODEALLPROXY - тогда она удалит все то, что не удалось расчленить.
=====================================================
Для вызова из VisualLisp:
(ExplodeProxyEntity ent)
ent - имя примитива вида <entity name: 321456465465465>. Расчленяет только этот
примитив, даже если он входит в блок.
Например: (explodeproxyentity (car (nentsel)))
(ExplodeAllProxyInBlock "имя блока")
Этой функции можно передавать не только имя блока, но и имя примитива внутри блока.
Например: (explodeallproxyinblock (car (nentsel)))
расчленит все прокси в блоке, на который указали.
Функции возвращают следующие значения:

0 success - успешное завершение
-1  parmerr - ошибка передачи параметра
-2  openerr - ошибка открытия proxy-объекта
-3  explerr - ошибка разбития proxy
-4  appenderr - ошибка добавления "состава" proxy в файл dwg.
-5  eraseerr  - ошибка удаления исходного объекта.

Во всех случаях, кроме success и appenderr, требуется провести _AUDIT для файла.
Кроме того обязательно (!!!) выполнить команду _AUDIT после вызова RemoveAllProxy
arx-файлы для AutoCAD 2000...2017 находятся здесь: http://www.maestrogroup.com.ua/support/ExplodeProxy.zip
Достаточно однократной загрузки соответствующего arx-файла в AutoCAD (при помощи команд _APPLOAD или _ARX), чтобы при следующих запусках AutoCAD этот arx-файл загружался сам.
В версии AutoCAD 2008 и выше команда RemoveAllProxy позволяет удалить неиспользуемые масштабы (AcDbScale) из списка масштабов.
Добавлено принудительное удаление неиспользуемых классов объектов/примитивов.

Спасибо сказали: Valery Brelovsky1

Re: ObjectARX. Расчленение и удаление proxy-объектов

Как быть в случае (explodeproxyentity (car (nentsel))) = "-2"?
Присутствуют невидимые блочки в чужих блоках... созданные на отдельных слоях типа "1", "2"...
Разбивать и уничтожать блоки - нельзя!
Как бороться - не знаю :(

Re: ObjectARX. Расчленение и удаление proxy-объектов

> iv
Это "блочки" или proxy-примитивы? Если это не proxy-примитивы - моя программа с ними ничего делать не будет!

Re: ObjectARX. Расчленение и удаление proxy-объектов

А как узнать? И что делать если это блочки??
Извиняюсь за дилетантизм в этом вопросе. :) Поиск не помог к сожалению :(

Re: ObjectARX. Расчленение и удаление proxy-объектов

> iv
Набрать в командной строке AutoCAD:

(entget(car(nentsel)))

ткнуть в "неизвестно что" и поместить сюда то, что напечатает AutoCAD.

Re: ObjectARX. Расчленение и удаление proxy-объектов

Один из простых примеров:
Select object: ((-1 . <Entity name: 7e46a180>) (0 . "LINE") (330 . <Entity
name: 7e46a0e8>) (5 . "8028") (100 . "AcDbEntity") (67 . 0) (8 . "0") (6 .
"Continuous") (100 . "AcDbLine") (10 -971.631 799.591 0.0) (11 -158.29 -13.4127
0.0) (210 0.0 0.0 1.0))
Их куча, а по хорошему ничего из себя не представляют - просто "картиночки" оборудования, которые впролне достойны быть внутри одного, корневого блока и на слое 0.

Re: ObjectARX. Расчленение и удаление proxy-объектов

> iv
Это не ко мне.

Re: ObjectARX. Расчленение и удаление proxy-объектов

Изменен алгоритм работы. Теперь proxy-объекты удаляются из чертежа даже если у них при создании был установлен флаг неудаляемости.

Re: ObjectARX. Расчленение и удаление proxy-объектов

Программа полезная и удобная.

Re: ObjectARX. Расчленение и удаление proxy-объектов

Добавил обработку заблокированных слоев в команды REMOVEALLPROXY и EXPLODEALLPROXY.

Re: ObjectARX. Расчленение и удаление proxy-объектов

Уважаемый Александр Наумович.
А можно ли получить исходный текст Вашей программы. Очень нужная штука(я имею ввиду програму), но мне бы хотелось внедрить её в свою утилиту, да для позновательных целей не мешало бы разобраться. Спасибо.
PS. Так, на всякий случай AutoCAD 2007

Re: ObjectARX. Расчленение и удаление proxy-объектов

> Vic
Напишите мне на e-mail. Подумаю, что смогу передать.

Re: ObjectARX. Расчленение и удаление proxy-объектов

> Александр Ривилис
Программа не просто хороша она стала жизненно необходимой.
Спасибо автору!!!

Re: ObjectARX. Расчленение и удаление proxy-объектов

> Yuriy
Да ладно уж... (краснею) smile

Re: ObjectARX. Расчленение и удаление proxy-объектов

Сегодня столкнулся с проблемой, которую Вы решили давно. Воспользуюсь ExplodeAllProxy (пришёл на сайт по совету Модератора dwg.ru), так как уверен в продукте заранее. Пользуюсь Вашими программами SelSim и GeomProps, и доволен, как наевшийся рыбы кот!
Где-то прочитал, что малодушные люди "бледнеют", а храбрые люди "краснеют".
"Краснейте" столько, сколько Вам и заблагорассудится!

Re: ObjectARX. Расчленение и удаление proxy-объектов

> basf
Нужно использовать и ExplodeAllProxy и RemoveAllProxy.

Re: ObjectARX. Расчленение и удаление proxy-объектов

И потом пойдут проблемы не копируются и не вставляются объекты.
Вот тут сразу как от них избавится.
ObjectARX. Расчленение и удаление proxy-объектов
https://www.caduser.ru/forum/topic31852.html

Re: ObjectARX. Расчленение и удаление proxy-объектов

> Valery
Brelovsky
А масло то масляное!
(сравните ссылки)

Re: ObjectARX. Расчленение и удаление proxy-объектов

Да, Валерий заблудился.:)

Re: ObjectARX. Расчленение и удаление proxy-объектов

> Александр Ривилис
А так же и audit не помешает
При условии, что explodeproxy.arx загружен, макрос может быть таким

^C^CEXPLODEALLPROXY;REMOVEALLPROXY;_AUDIT;_Y;_LAYERP;_LAYERP;

Re: ObjectARX. Расчленение и удаление proxy-объектов

добрый день,  у меня вопросик, набираю команду _explodeallproxy или _removeallproxy и мне пишет, что неизвестная команда :(

Re: ObjectARX. Расчленение и удаление proxy-объектов

> Natashechka
Значит не загружен соответствующий arx-файл. В первом сообщении указано где его взять. В AutoCAD при помощи команды _APPLOAD нужно загрузить ExplodeProxy200X.arx
X зависит от версии AutoCAD.

Re: ObjectARX. Расчленение и удаление proxy-объектов

Модифицированный вариант макроса с подгрузкой arx модуля отсюда:

^C^C(if(not(member "explodeproxy200[b]X[/b].arx" (arx)))(arxload "explodeproxy200[b]X[/b].arx"));EXPLODEALLPROXY;REMOVEALLPROXY;_AUDIT;_Y;_LAYERP;_LAYERP;

Вместо X вписать
0 - 2002 Автокад
6 - 2004,2005,2006 Автокад
7 - 2007, 2008, 2009 Автокад
Вариант для 2004,2005 и 2006 Автокада

^C^C(if(not(member "explodeproxy200[b]6[/b].arx" (arx)))(arxload "explodeproxy200[b]6[/b].arx"));EXPLODEALLPROXY;REMOVEALLPROXY;_AUDIT;_Y;_LAYERP;_LAYERP;

Сами arx модули можно взять по ссылке в 1-м посте

Re: ObjectARX. Расчленение и удаление proxy-объектов

А можно эту же прокси переделать в line? Многие програмы создают проксиобъекты - не пропадать же добру. На сколько эта спецификация отличается от спецификации объекта Line

Re: ObjectARX. Расчленение и удаление proxy-объектов

> Сантехник
Это раздел готовых программ.