Продолжение...
есть код:
bool
cACADActions::DSsLoad(CString DSName)
{
Acad::ErrorStatus es;
AcDbDimStyleTable *pDimTable;
AcDbTextStyleTable *pTS;
AcDbDimStyleTableRecord *pDimTblRecord = NULL;
acdbHostApplicationServices()->workingDatabase()->getDimStyleTable(pDimTable, AcDb::kForRead);
if(!pDimTable->has(DSName))
{
pDimTable->close();
pDimTblRecord = new AcDbDimStyleTableRecord;
pDimTblRecord->setName(DSName);
pDimTblRecord->setDimadec(...);
pDimTblRecord->setDimalt(...);
pDimTblRecord->setDimaltd(...);
pDimTblRecord->setDimaltf(...);
pDimTblRecord->setDimaltrnd(...);
pDimTblRecord->setDimalttd(...);
pDimTblRecord->setDimalttz(...);
pDimTblRecord->setDimaltu(...);
pDimTblRecord->setDimaltz(...);
pDimTblRecord->setDimapost(...);
pDimTblRecord->setDimasz(...);
pDimTblRecord->setDimatfit(...);
pDimTblRecord->setDimaunit(...);
pDimTblRecord->setDimazin(...);
//dimblk
[b]AcDbObjectId dimblkid;
es = AcDmUtil::getArrowId(..., dimblkid);
if(es == Acad::eOk && dimblkid != 0)
{
pDimTblRecord->setDimblk(dimblkid);
}
//dimblk1
AcDbObjectId dimblk1id;
es = AcDmUtil::getArrowId(..., dimblk1id);
if(es == Acad::eOk && dimblk1id != 0)
{
pDimTblRecord->setDimblk1(dimblk1id);
}
//dimblk2
AcDbObjectId dimblk2id;
es = AcDmUtil::getArrowId(..., dimblk2id);
if(es == Acad::eOk && dimblk2id != 0)
{
pDimTblRecord->setDimblk2(dimblk2id);
}[/b]
pDimTblRecord->setDimcen(...);
//dimclrd
Adesk::UInt16 vald = ...;
AcCmColor dimclrd;
dimclrd.setColorIndex(vald);
pDimTblRecord->setDimclrd(dimclrd);
//dimclre
Adesk::UInt16 vale = ...;
AcCmColor dimclre;
dimclre.setColorIndex(vale);
pDimTblRecord->setDimclre(dimclre);
//dimclrt
Adesk::UInt16 valt = ...;
AcCmColor dimclrt;
dimclrt.setColorIndex(valt);
pDimTblRecord->setDimclrt(dimclrt);
pDimTblRecord->setDimdec(...);
pDimTblRecord->setDimdle(...);
pDimTblRecord->setDimdli(...);
pDimTblRecord->setDimdsep(...);
pDimTblRecord->setDimexe(...);
pDimTblRecord->setDimexo(...);
pDimTblRecord->setDimfrac(...);
pDimTblRecord->setDimgap(...);
pDimTblRecord->setDimjust(...);
//dimldrblk
[b]AcDbObjectId dimldrblk;
es = AcDmUtil::getArrowId(..., dimldrblk);
if(es == Acad::eOk && dimldrblk != 0)
{
pDimTblRecord->setDimldrblk(dimldrblk);
}[/b]
pDimTblRecord->setDimlfac(...);
pDimTblRecord->setDimlim(...);
pDimTblRecord->setDimlunit(...);
pDimTblRecord->setDimlwd(...);
pDimTblRecord->setDimlwe(...);
pDimTblRecord->setDimpost(...);
pDimTblRecord->setDimrnd(...);
pDimTblRecord->setDimsah(...);
pDimTblRecord->setDimscale(...);
pDimTblRecord->setDimsd1(...);
pDimTblRecord->setDimsd2(...);
pDimTblRecord->setDimse1(...);
pDimTblRecord->setDimse2(...);
pDimTblRecord->setDimsoxd(...);
pDimTblRecord->setDimtad(...);
pDimTblRecord->setDimtdec(...);
pDimTblRecord->setDimtfac(...);
pDimTblRecord->setDimtih(...);
pDimTblRecord->setDimtix(...);
pDimTblRecord->setDimtm(...);
pDimTblRecord->setDimtmove(...);
pDimTblRecord->setDimtofl(...);
pDimTblRecord->setDimtoh(...);
pDimTblRecord->setDimtol(...);
pDimTblRecord->setDimtolj(...);
pDimTblRecord->setDimtp(...);
pDimTblRecord->setDimtsz(...);
pDimTblRecord->setDimtvp(...);
//dimtxsty
acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pTS, AcDb::kForRead);
char *pBTRecName4 = ..;
AcDbObjectId dimtxsty;
es = pTS->getAt(pBTRecName4, dimtxsty);
if(dimtxsty != 0)
{
es = pDimTblRecord->setDimtxsty(dimtxsty);
}
else
{
es = pTS->erase();
es = pTS->close();
TextStylesLoad();
acdbHostApplicationServices()->workingDatabase()->getTextStyleTable(pTS, AcDb::kForRead);
pTS->getAt(pBTRecName4, dimtxsty);
if(dimtxsty != 0)
pDimTblRecord->setDimtxsty(dimtxsty);
}
es = pTS->close();
pDimTblRecord->setDimtxt(...);
pDimTblRecord->setDimtzin(...);
pDimTblRecord->setDimupt(...);
pDimTblRecord->setDimzin(...);
acdbHostApplicationServices()->workingDatabase()->getDimStyleTable(pDimTable, AcDb::kForWrite);
pDimTable->add(pDimTblRecord);
es = pDimTblRecord->close();
es = pDimTable->close();
}
return true;
}
точки означают некие int, double и char значения.
При однократном использовании (создание одного размерного стиля) все нормально срабатывает. При создании нескольких размерных стилей все создается, НО при последующей попытке просмотреть список размерных стилей AutoCAD вываливается с ошибкой, причем нашел список "шаманских" манипуляций для избежания ошибки (если после создания просмотреть список слоев и список стилей таблиц, то потом список размерных стилей открывается и можно просмотреть успешный результат создания нескольких размерных стилей). Также, если убрать код, который выделен жирным шрифтом, то несколько размерных стилей создается и без проблем просматривается. Такое чувство, что я чтото не закрыл, но что понять не могу... или может AcDmUtil::getArrowId не правильно работает, хотя все время возвращает eOk... подскажите кто что думает?