Тема: Как узнать имя/id текущего BlockTableRecord-a?

Как узнать какой Block Table Record сейчас текущий? Может быть включен Modal Space, Paper Space 1, Paper Space 2 и т.д. ???

Re: Как узнать имя/id текущего BlockTableRecord-a?

Если ничего не путаю,
в зависимости от TILEMODE использовать

AcDbSymbolUtilities::Services::blockPaperSpaceId
AcDbSymbolUtilities::Services::blockModelSpaceId

Re: Как узнать имя/id текущего BlockTableRecord-a?

Так пейпер спейсов может быть до черта... в том то и дело... если я ничего не путаю... к тому же у меня в хелпе есть что AcDbSymbolUtilities::ServicesPtr, но что такое Servive и что там есть - уже нет - хелп старый для 2002-го

Re: Как узнать имя/id текущего BlockTableRecord-a?

Если TILEMODE == 1, то use ACDB_MODEL_SPACE
иначе use ACDB_PAPER_SPACE
Но листов может быть много - Для каждого листа создается свой BlockTable??? Как получить текущий id BlockTableRecorda листа...?

Re: Как узнать имя/id текущего BlockTableRecord-a?

Кусок кода из справки по 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.

Re: Как узнать имя/id текущего BlockTableRecord-a?

Спасибо, проверю, поэксперементирую. Кажись все понял.
Но вопрос уже не в том как получить 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...?

Re: Как узнать имя/id текущего BlockTableRecord-a?

Просто меня окончательно добила путаница в мануалах - в половине мест говорят про paper space в половине про layout-ы (не путать с layer-ами)