Вчера вечером, чтобы проверить как все работает сделал простенький проект, прога рисует отрезок, прямоугольник и круг и пореакции пользователь удаляет какой либо из этих эл-тов. Так вот с отрезком и кругом проблем при удалении не возникает, а с прямоугольником продолжаю мучаться.
Acad::ErrorStatus DeleteEntity(AcDbObjectId objId)
{
Acad::ErrorStatus es = Acad::eOk;
AcDbObjectPointer<AcDbObject>
pObj(objId,AcDb::kForWrite);
if ((es = pObj.openStatus()) == Acad::eOk)
{
return pObj->erase();
}
return es;
}
AcDb2dVertex *pVertex; //Объявляем указатель на вершину
void Proga()
{
//Рисуем отрезок
AcDbObjectId my_line;
AcGePoint3d startPt(500, 50, 0.0);
AcGePoint3d endPt(1000, 100, 0.0);
AcDbLine *pLine = new AcDbLine(startPt, endPt);
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
pBlockTable->close();
pBlockTableRecord->appendAcDbEntity(my_line, pLine);
pBlockTableRecord->close();
pLine->close();
/////////////////////////////////////////////////////////////////////////////////
//Рисуем прямоугольник
AcDbObjectId my_Polyline;
{
AcDb2dPolyline *pRectLine = new AcDb2dPolyline();//Объявляем полилинию для обмотки
pRectLine->setColorIndex(5);
pVertex=new AcDb2dVertex(AcGePoint3d(0,250,0),0,0,0,0);//Cоздаем 4 вершины и добавляем их к полилинии
pRectLine->appendVertex(pVertex);
pVertex=new AcDb2dVertex(AcGePoint3d(2000,250,0),0,0,0,0);
pRectLine->appendVertex(pVertex);
pVertex=new AcDb2dVertex(AcDb2dVertex(AcGePoint3d(2000,250-1300,0),0,0,0,0));
pRectLine->appendVertex(pVertex);
pVertex=new AcDb2dVertex(AcDb2dVertex(AcGePoint3d(0,250-1300,0),0,0,0,0));
pRectLine->appendVertex(pVertex);
pRectLine->makeClosed();//делаем полилинию замкнутой
addEntityToDb(pRectLine);//добавляем полилинию в базу данных
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
pBlockTable->close();
pBlockTableRecord->appendAcDbEntity(my_Polyline, pRectLine);
pBlockTableRecord->close();
pRectLine->close(); //закрываем полилинию
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Рисуем круг
AcDbObjectId my_Circle;
{
AcGePoint3d center(0,0, 0.0);
AcGeVector3d normal(0.0, 0.0, 1.0);
AcDbCircle *pCirc = new AcDbCircle(center, normal, 200);
AcDbBlockTable *pBlockTable;
pCirc->setColorIndex(3);
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);
pBlockTable->close();
pBlockTableRecord->appendAcDbEntity(my_Circle, pCirc);
pBlockTableRecord->close();
pCirc->close();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int iParameterUnrolling;
if(acedGetInt("\nУкажите параметр (1-удалить отрезок; 2-удалить прямоугольник; 3-удалить круг): ",&iParameterUnrolling)!=RTNORM)
return;
if (iParameterUnrolling==1)
{
DeleteEntity(my_line);
}
if (iParameterUnrolling==2)
{
DeleteEntity(my_Polyline);
}
if (iParameterUnrolling==3)
{
DeleteEntity(my_Circle);
}
}
Подскажите, что же не так.