Проверил. Оказалось чуть-чуть сложнее. Лови:
static void VertexDelVertexDel(void)
{
// Add your code for command VertexDel.VertexDel here
ads_name ssName;
ads_point ptres;
int nRet = acedEntSel("\nУкажите 3d полилинию: ", ssName, ptres);
if(nRet!=RTNORM) {
acutPrintf("\nЛиния не выбрана!");
return;
}
AcDbObjectId lineId;
AcDbObjectIterator *pVtxIt = NULL;
AcDbObjectIdArray aVtxIds;
int iVtx = 1;
if (acdbGetObjectId(lineId, ssName) == Acad::eOk) {
AcDbObjectPointer<AcDb3dPolyline> pPoly(lineId, AcDb::kForWrite);
if (pPoly.openStatus() != Acad::eOk) return;
pVtxIt = pPoly->vertexIterator();
AcDbObjectId firstId = pVtxIt->objectId();
if(pVtxIt->objectId().isErased()) {
pVtxIt->step();
firstId = pVtxIt->objectId();
}
for (pVtxIt->setPosition(firstId); !pVtxIt->done(); pVtxIt->step()){
if(pVtxIt->objectId().isErased()) continue;
aVtxIds.append(pVtxIt->objectId());
}
delete pVtxIt;
} else return;
char prompt[128]="";
sprintf(prompt,"\nУкажите номер вершины (1 - %d): ",aVtxIds.length());
Acad:ErrorStatus es;
while (acedGetInt(prompt,&iVtx) == RTNORM && (iVtx < 1 || iVtx > aVtxIds.length())) {
acutPrintf("\nТакой вершины нет. Повторите!!!");
}
if (iVtx >= 1 && iVtx <= aVtxIds.length()) {
actrTransactionManager->startTransaction();
{
AcDbObjectPointer<AcDb3dPolylineVertex> pVt(aVtxIds[iVtx-1], AcDb::kForWrite);
if (pVt.openStatus() == Acad::eOk) {
es = pVt->erase(true);
if (es != Acad::eOk) {
acutPrintf("\nОшибка удаления вершины: %s", acadErrorStatusText(es));
}
}
}
actrTransactionManager->endTransaction();
actrTransactionManager->startTransaction();
{
AcDbObjectPointer<AcDb3dPolyline> pPoly(lineId, AcDb::kForWrite);
if (pPoly.openStatus() == Acad::eOk) {
pPoly->recordGraphicsModified(true);
}
}
actrTransactionManager->endTransaction();
}
}