(изменено: teem0n, 26 сентября 2011г. 12:52:48)

Тема: Пользовательские параметры

Здравствуйте!

Не могу понять, как читать пользовательские параметры блоков (которые задаются в диспетчере параметров) с помощью ObjectARX.

Имеется:

AcDbEntity *pEnt;
AcDbBlockReference *pBlockRef=AcDbBlockReference::cast(pEnt);

Итератор pAttIterator = pBlockRef->attributeIterator(); ничего не выдает :(

Re: Пользовательские параметры

А что в pEnt? Судя по коду ничего. И вообще-то pBlockRef->attributeIterator() возвращает атрибуты блока, а не "пользовательские параметры блока". Почитай в справке AutoCAD что такое атрибуты блока.

(изменено: teem0n, 26 сентября 2011г. 15:40:12)

Re: Пользовательские параметры

Тут не весь код, строку с pEnt вставил, чтобы был понятен тип переменной.
pEnt не пустое, там есть проверка.

В блоке есть один атрибут, но его тоже не видно - ни программно, ни в свойствах :(
Я его создал в редакторе блоков, но ни к чему не подцепляя, может, в этом дело?

Справку читал, но она не сильно информативная...

На данный момент решил вопрос с хранением данных с помощью xData, но все-таки хотелось бы узнать про пользовательские переменные.

(изменено: Александр Ривилис, 26 сентября 2011г. 15:50:51)

Re: Пользовательские параметры

teem0n пишет:

В блоке есть один атрибут, но его тоже не видно - ни программно, ни в свойствах :( Я его создал в редакторе блоков, но ни к чему не подцепляя, может, в этом дело?

1. Ты в редакторе блоков что создал? В редакторе блоков можно создать определение атрибута (ATTDEF), а не сам атрибут.
2. Если атрибут константный, то он привязан к определению блока, а не к вставке блока и итератором ты его не найдёшь.
Пользуйся поиском: https://www.caduser.ru/forum/post123478.html#p123478 (код неюникодовский, так что где надо замени "..." на _T("...") или L"...")

(изменено: teem0n, 27 сентября 2011г. 12:08:02)

Re: Пользовательские параметры

Спасибо, код попробовал.

Понял, что не понимаю разницы между созданным блоком (и раскопированным по модели с помощью ctrl+c - ctrl+v) и вставленным командой _insert. Получается, я определение копировал?

Re: Пользовательские параметры

teem0n пишет:

Понял, что не понимаю разницы между созданным блоком (и раскопированным по модели с помощью ctrl+c - ctrl+v) и вставленным командой _insert. Получается, я определение копировал?

А что ты копировал? Объекты, которые включал в блок или вставку блока (AcDbBlockReference)? Вообще-то для копирования внутри чертежа нужно пользоваться командой _COPY, а не копировать через буфер обмена, иначе отгребешь кучу проблем.
P.S.: Пользуйся ARXDBG (из комплекта ObjectARX SDK: samples\database\ARXDBG) для понимания что происходит. Очень рекомендую.

(изменено: teem0n, 27 сентября 2011г. 14:15:30)

Re: Пользовательские параметры

Александр Ривилис пишет:

А что ты копировал? Объекты, которые включал в блок или вставку блока (AcDbBlockReference)? Вообще-то для копирования внутри чертежа нужно пользоваться командой _COPY, а не копировать через буфер обмена, иначе отгребешь кучу проблем.

P.S.: Пользуйся ARXDBG (из комплекта ObjectARX SDK: samples\database\ARXDBG) для понимания что происходит. Очень рекомендую.

Вроде соседи-проектировщики так делали (через буфер обмена) :oops:
Нашел, как программно работать через _insert, буду его использовать.

Я пытался с ARXDBG поработать, но x64 не компилируется почему-то... Выдает:

"Project not selected to build for this solution configuration"

Александр, спасибо большое за терпение!

//////////////////////////////////
Разобрался с проблемой. Причина была в неправильном файле .sln у Visual Studio.

Re: Пользовательские параметры

teem0n пишет:

Я пытался с ARXDBG поработать, но x64 не компилируется почему-то...

Возьми готовый: http://www.maestrogroup.com.ua/support/ArxDbg2010.zip

Re: Пользовательские параметры

teem0n пишет:

Вроде соседи-проектировщики так делали (через буфер обмена)

В другой чертеж - это я еще понимаю, т.к. про команды _WBLOCK и _INSERT они даже не догадываются, но в пределах одного чертежа... Даже слов нет.

Re: Пользовательские параметры

Александр Ривилис пишет:

В другой чертеж - это я еще понимаю, т.к. про команды _WBLOCK и _INSERT они даже не догадываются, но в пределах одного чертежа... Даже слов нет.

Прощения прошу за оффтоп, но чем это грозит?

(изменено: Александр Ривилис, 27 сентября 2011г. 15:04:31)

Re: Пользовательские параметры

Чтобы не быть голословным, воспользуйся ARXDBG (вызывает команду _REACTORS):
Пользовательские параметры
Выставь следующие флаги:
Пользовательские параметры
1. Ну а теперь посмотри что происходит при Ctrl+C/Ctrl+V и при команде _COPY. Нажми F2 и посмотри протокол. Убедись, что команда _COPY значительно менее затратна.
2. Выполни _PURGE _ALL. Попробуй нажать ESC при запросе точки вставки при Ctrl+V. Снова запусти _PURGE и убедись, что у тебя появился на ровном месте блок с именем вида A$XXXXXXXX:
Пользовательские параметры
Это только верхушка айсберга.