Вот пример кода (обработка ошибок убрана):
// - AddRotDim
static void AddRotDim(void)
{
ads_point p1,p2,p3;
if (acedGetPoint(NULL,"\nУкажите первую точку размера: ",p1) != RTNORM ||
acedGetPoint(p1, "\nУкажите вторую точку размера: ",p2) != RTNORM ||
acedGetPoint(p2, "\nУкажите место выноски: ", p3) != RTNORM)
return;
acdbUcs2Wcs(p1,p1,false); acdbUcs2Wcs(p2,p2,false); acdbUcs2Wcs(p3,p3,false);
double rotang = AcGeVector2d(1,0).angleTo(asPnt2d(p2)-asPnt2d(p1));
AcDbDatabase *pNewDb = new AcDbDatabase();
AcDbDatabase *pOldDb = acdbHostApplicationServices()->workingDatabase();
acdbHostApplicationServices()->setWorkingDatabase(pNewDb);
{
AcDbBlockTableRecordPointer pBTR(ACDB_MODEL_SPACE,pNewDb,AcDb::kForWrite);
AcDbRotatedDimension *pEnt =
new AcDbRotatedDimension(rotang,asPnt3d(p1),asPnt3d(p2),asPnt3d(p3));
pBTR->appendAcDbEntity(pEnt);
pBTR->close();
pEnt->close();
acdbHostApplicationServices()->setWorkingDatabase(pOldDb);
pNewDb->saveAs("C:\\RotDim.dwg");
}
delete pNewDb;
}
// InsertDWG
static void InsertDWG(void)
{
AcDbDatabase *pNewDb = new AcDbDatabase(false);
pNewDb->readDwgFile("C:\\RotDim.dwg",_SH_DENYNO);
AcDbDatabase *pCurDb = acdbHostApplicationServices()->workingDatabase();
pCurDb->insert(AcGeMatrix3d::kIdentity,pNewDb,true);
delete pNewDb;
}
Команда AddRotDim добавляет AcDbRotatedDimension в MODEL_SPACE новой базы и сохраняет ее в dwg-файле.
Команда InsertDWG вставляет примитивы из MODEL_SPACE этого dwg-файла в текущую базу. После этого операции по растягиванию/переносу и т.д. размера не разваливают AutoCAD. Можешь проверить.