Очень странно. Похоже это все-таки у тебя ошибка. Попробуй этот примерчик для добавления вершины в 3DPOLY. После добавления им вершины я нормально получаю координаты точек на сегментах полилинии с правильным Z. Проверял в AutoCAD 2006.
static void AddVertex(void)
{
// Add your code for command InsertNewpoint.AddVertex here
ads_point p; ads_name entPoly;
resbuf view; acedGetVar ("VIEWSIZE", &view);
double gsize = view.resval.rreal * 0.03;
AcDbObjectId vertexAfterId;
AcGePoint3d pointAfter;
if (acedEntSel("\nSelect 3DPoly: ", entPoly, p) == RTNORM) {
AcDbObjectId pObjId;
if (acdbGetObjectId(pObjId,entPoly) == Acad::eOk) {
AcDbObjectPointer<AcDb3dPolyline> poly3d(pObjId,AcDb::kForWrite);
if (poly3d.openStatus() != Acad::eOk) return;
AcDbObjectIterator *pVertIter= poly3d->vertexIterator();
AcDbObjectId vertexObjId;
for (;!pVertIter->done();pVertIter->step()) {
vertexObjId = pVertIter->objectId();
AcDbObjectPointer<AcDb3dPolylineVertex> pVertex(vertexObjId,AcDb::kForRead);
AcGePoint3d vPts = pVertex->position();
acdbWcs2Ucs(asDblArray(vPts),asDblArray(vPts),0);
acedGrDraw(asDblArray(vPts - AcGeVector3d(gsize,gsize,0)),asDblArray(vPts + AcGeVector3d(gsize,gsize,0)),1,1);
acedGrDraw(asDblArray(vPts - AcGeVector3d(gsize,-gsize,0)),asDblArray(vPts + AcGeVector3d(gsize,-gsize,0)),1,1);
acedInitGet(RSG_OTHER,"Yes No _ Yes No");
char ans[512];
int rc = 0;
if ((rc = acedGetKword("\nInsert new vertex after this vertex? [Yes/No] <No>: ",ans)) == RTNORM) {
if (!strcmp(ans,"") || !stricmp(ans,"YES")) {
vertexAfterId = vertexObjId;
pointAfter = vPts;
acedRedraw(NULL,1);
break;
}
} else if (rc == RTCAN) {
acedRedraw(NULL,1);
break;
}
acedRedraw(NULL,1);
}
delete pVertIter;
if (!vertexAfterId.isNull()) {
acedInitGet(1,NULL);
if (acedGetPoint(asDblArray(pointAfter),"\nSelect point: ",asDblArray(pointAfter)) == RTNORM) {
acdbUcs2Wcs(asDblArray(pointAfter),asDblArray(pointAfter),0);
AcDb3dPolylineVertex *vertex = new AcDb3dPolylineVertex(pointAfter);
AcDbObjectId newVertexId;
poly3d->insertVertexAt(newVertexId,vertexAfterId,vertex);
vertex->close();
}
}
}
}
}