Тема: проблема с блоком

Здравствуйте! Начну по порядку, например, я рисую в 2011 автокаде три различных фигуры, в таком порядке как  "линия", "круг", "квадрат". Потом в командной строке пишу bmake, и создаю блок тыкая по созданным фигурам, но только в другом порядке, например "круг","линия", "квадрат". Потом найдя в примерах по arx такую функцию printall() вызываю её. Подаю в неё название своего блока и  она мне выводит те фигуры, которые я добавил в блок, но только не в том порядке в котором они были добавлены в блок, а в том порядке, как они были нарисованы. Так вот у меня вопрос, можно ли как-то эту проблему исправить?

Re: проблема с блоком

Алексей пишет:

Подаю в неё название своего блока и она мне выводит те фигуры, которые я добавил в блок, но только не в том порядке в котором они были добавлены в блок, а в том порядке, как они были нарисованы.

Это в блок они добавляются не в том порядке, как ты их выбирал.

Re: проблема с блоком

Возможно, но так как я это делаю через bmake, и как я понимаю эта функция "засекречена"). Не могли бы вы мне сказать как можно решить эту проблему, работая уже с готовым блоком, то есть чтобы итератор шёл по элементам в нужном мне порядке?
Также у меня ещё была идея, и даже попытка создавать блок самому с помощью:
ads_name nn;
acedSSget(NULL,NULL,NULL,NULL,nn);
потом получаю
ID
по ID получаю entity
и по аналогии с функцией из arx, которая вроде называется makeAblock()
пытаюсь создать BlockRecord, он создаётся, но оказывается пустым. 
Код к сожалению не могу предоставить!(
Хотя я думаю, что такая проблема возникала не только у меня, и так как велосипед не охото изобретать, поэтому вот и подумал спросить у опытных людей!

Re: проблема с блоком

Алексей пишет:

Код к сожалению не могу предоставить!(

О! Конечно же он совершенно секретный...  :D

Алексей пишет:

то есть чтобы итератор шёл по элементам в нужном мне порядке?

Итератор идет в том порядке, в котором примитивы добавлены в блок.
Значит или нужно добавлять их в нужном порядке или сначала выбрать итератором все примитивы из блока, а затем уже (по одному тебе известному закону) упорядочить их.

Алексей пишет:

и по аналогии с функцией из arx, которая вроде называется makeAblock() пытаюсь создать BlockRecord, он создаётся, но оказывается пустым.

Не знаю я такой функции. В ObjectARX такой нет. Есть пример, который так называется. Пустым блок может быть только при ошибке (анализируй коды завершения). Короче говоря без твоего кода ничего не будет...

Re: проблема с блоком

Здравствуйте, снова я. Вот код:

ads_name ss;
acedSSGet(NULL,NULL,NULL,NULL,ss);

int rc;
    TCHAR blkName[50];
    *blkName = _T('\0');
    rc = acedGetString(Adesk::kTrue,
        _T("Enter Block Name : "),
        blkName);

long length;
acedSSLength(ss, &length);

AcDbBlockTableRecord *pBlockTableRec
         = new AcDbBlockTableRecord();
     pBlockTableRec->setName(blkName);

     // Get the block table.
     //
     AcDbBlockTable *pBlockTable = NULL;
     acdbHostApplicationServices()->workingDatabase()
        ->getSymbolTable(pBlockTable, AcDb::kForWrite);

     // Add the new block table record to the block table.
     //
     AcDbObjectId blockTableRecordId;
     pBlockTable->add(blockTableRecordId, pBlockTableRec);
     pBlockTable->close();

AcDbObjectIdArray  objList;
for (int i = 0; i < length; i++)
{
  ads_name ent;
acedSSName(ss, i, ent);
AcDbObjectId objId;
acdbGetObjectId(objId, ent);

   AcDbEntity *pEnt;
 
int BB;
    BB = acdbOpenAcDbEntity(pEnt, objId, AcDb::kForRead);
   

   pBlockTableRec->appendAcDbEntity(objId, pEnt);

pEnt->close();
pBlockTableRec->close();
}
Блок создаётся, но пустой, а переменная BB != RTNORM. Пожалуйста, подскажите в чём проблема?

Re: проблема с блоком

Алексей пишет:

Блок создаётся, но пустой, а переменная BB != RTNORM.

Она и не должна быть == RTNORM. Смотри описание функции acdbOpenAcDbEntity.
Ошибка твоя в том, что ты пытаешься добавить в блок объекты, которые уже содержатся в чертеже.

Re: проблема с блоком

Спасибо, большое за помощь, вроде разобрался!