Тема: Как узнать имя/id текущего BlockTableRecord-a?
Как узнать какой Block Table Record сейчас текущий? Может быть включен Modal Space, Paper Space 1, Paper Space 2 и т.д. ???
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → ObjectARX → Как узнать имя/id текущего BlockTableRecord-a?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как узнать какой Block Table Record сейчас текущий? Может быть включен Modal Space, Paper Space 1, Paper Space 2 и т.д. ???
Если ничего не путаю,
в зависимости от TILEMODE использовать
AcDbSymbolUtilities::Services::blockPaperSpaceId AcDbSymbolUtilities::Services::blockModelSpaceId
Так пейпер спейсов может быть до черта... в том то и дело... если я ничего не путаю... к тому же у меня в хелпе есть что AcDbSymbolUtilities::ServicesPtr, но что такое Servive и что там есть - уже нет - хелп старый для 2002-го
Если TILEMODE == 1, то use ACDB_MODEL_SPACE
иначе use ACDB_PAPER_SPACE
Но листов может быть много - Для каждого листа создается свой BlockTable??? Как получить текущий id BlockTableRecorda листа...?
Кусок кода из справки по ObjectARX (раздел Iterating through a Block Table Record)
if (acdbHostApplicationServices()->workingDatabase() ->tilemode() == Adesk::kFalse) { struct resbuf rb; acedGetVar("[b]cvport[/b]", &rb); if (rb.resval.rint == 1) { strcpy(blkName, ACDB_PAPER_SPACE); } else { strcpy(blkName, ACDB_MODEL_SPACE); } } else { strcpy(blkName, ACDB_MODEL_SPACE); }
CVPORT
Type: Integer
Saved in: Drawing
Initial value: 2
Sets the identification number of the current viewport.
Спасибо, проверю, поэксперементирую. Кажись все понял.
Но вопрос уже не в том как получить id - а в понимании основ:
Есть блок ACDB_MODEL_SPACE, есть блок ACDB_PAPER_SPACE
В акаде если посмотреть на вкладку внизу документа видно Model, Layout 1, Layout 2 и т.д.
Ну с Model спейсом все ясно - он один, это AcDbBlockTableRecord в AcDbBlockTable. Те entity, что туда помещаются - видно на чертеже в модели.
Чтобы найти текущий layout надо воспользоваться методом
AcDbLayoutManager::getActiveLayoutBTRId()
Если модел спейс один, то что такое ACDB_MODEL_SPACE понятно...
Если layout-ов много, то что такое ACDB_PAPER_SPACE - я не совсем понимаю... или PaperSpace это не то же что Layout??? Или это первый paper space...?
Просто меня окончательно добила путаница в мануалах - в половине мест говорят про paper space в половине про layout-ы (не путать с layer-ами)
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → ObjectARX → Как узнать имя/id текущего BlockTableRecord-a?
Форум работает на PunBB, при поддержке Informer Technologies, Inc