|
[code]#include <dbobjptr.h>
void deleteVertex()
{
ads_name polyName;
ads_point pt;
if(acedEntSel(_T("\nВыберите a 3D-полилинию: "), polyName, pt) != RTNORM)
return;
AcDbObjectId polyId;
acdbGetObjectId(polyId, polyName);
// получим полилинию как интеллектуальный указатель
AcDbObjectPointer<AcDb3dPolyline> pPoly(polyId, AcDb::kForRead);
Acad::ErrorStatus es = pPoly.openStatus();
// если не открылась
if(es != Acad::eOk)
{
if (es == Acad::eNotThatKindOfClass)
acutPrintf(_T("\nВы выбрали не 3D-полилинию."));
else
acutPrintf(_T("\nОшибка открытия примитива."));
return;
}
// Добавим все вершины к массиву AcDbObjectId
AcDbObjectIdArray vertexArray;
AcDbObjectIterator *pIter = pPoly->vertexIterator();
for(pIter->start(); !pIter->done(); pIter->step())
vertexArray.append(pIter->objectId());
delete pIter;
// Указываем и находим вершину для удаления
ACHAR prompt[256];
acutPrintf(prompt,_T( "\nУкажите номер удаляемой вершины (1-%d): "), vertexArray.length());
int delVertex = -1;
if(acedGetInt(prompt, &delVertex) != RTNORM)
return;
if(delVertex < 1 || delVertex > vertexArray.length())
{
acutPrintf(_T("\nНедопустимый номер вершины."));
return;
}
// Открываем вершину и удаляем её
AcDbObjectPointer<AcDbObject> pObj(vertexArray[delVertex-1], AcDb::kForWrite);
if(pObj.openStatus() != Acad::eOk)
{
acutPrintf(_T("\nОшибка открытия вершины: %d"), delVertex);
return;
}
pObj->erase();
}
[/code] |
|