Тема: Проблема с формированием массива AcDbObjectIDArray
Многие функции требуют в качестве параметра такой массив. Мне нужно сформировать массив указателей на видовые экраны пространств листа чертежа.
Но непосредственно при вызове функции append AutoCAD выбрасывает. Что делать?
#include "mainfunctions.h"
Acad::ErrorStatus SetCurrentLayerFreezedInAllViewports (AcDbObjectId &layerId)
{Acad::ErrorStatus es;
AcDbDictionary *dLayouts;
AcDbDictionaryIterator *iLayout;
AcDbLayout *LLayout;
AcDbViewport *VViewport;
AcDbObjectId idLayout;
AcDbObjectId idLayout2;
AcDbObjectId idViewport;
AcDbObject* ObjLayout;
AcDbObjectIdArray *listLayers;
AcDbObjectIdArray *listViewports2;
AcDbObjectIdArray *listViewports;
AcDbBlockTable *tBlock;
AcDbBlockTableIterator *iBlock;
AcDbBlockTableRecord *rBlock;
char *LayoutName;
char *LayoutName2;
char *BlockName;
bool TrFl;
acedAlert("Начинаем работать в теле функции!!!");
int i;
int j=0;
if ((es=acdbHostApplicationServices ()->workingDatabase ()->getBlockTable(tBlock, AcDb::kForWrite))!=Acad::eOk)
{acedAlert("Не открылся таблица блоков!");}
tBlock->newIterator(iBlock,true,true);
es=tBlock->newIterator(iBlock, true,true);
//////////////////////////////////////// #1/////////////////////////////////////////////////////////////
for (iBlock->start(); !iBlock->done(); iBlock->step())
{
if ((iBlock->getRecord(rBlock,AcDb::kForWrite)!=Acad::eOk)){acedAlert("Не получили запись из табл. блоков!");};
rBlock->getName(BlockName);
acedAlert(BlockName);
if ((rBlock->isLayout())!=Adesk::kFalse)
{j=j+1;
idLayout=rBlock->getLayoutId();
if ((es=acdbOpenObject(LLayout,idLayout,AcDb::kForRead))!=Acad::eOk){acedAlert("Не открыли Layout!");};
if ((es=LLayout->getLayoutName(LayoutName))!=Acad::eOk){acedAlert("Не взяли имя Layoutа!");};
if (j>1)
{
acedAlert(LayoutName);
listViewports.append(LLayout->getViewportArray());
acedAlert("Стоп 1");
for (i=1;i<listViewports.length();i++)
{
idViewport=listViewports.at(i);
es=acdbOpenObject(VViewport,idViewport,AcDb::kForWrite);
if ((es=Acad::eOk)) {acedAlert("Открыли Viewport!!!!");}
}
}
}
}
delete iBlock;
tBlock->close();
delete iLayout;
dLayouts->close();
acutPrintf("\nВроде, дошли до конца фунцции..............");
return(es);
}
P.S. Видел что в некоторых примерах вместо -> ставят точки при работе с массивами. А у меня не компилируется! Ставлю в этих местах вместо точек стрелочки - компилируется, но выбрасывает из АКАДа. Почему?
Заранее благодарю за помощь.