Совершенно не понятно зачем в данном случае нужна функция getOsnapPoints. Текст имеет только одно точку привязки - точку вставки текста, которая для центрирования текста относительно линии или дуги не удобна. Значительно удобнее пользоваться функцией getGeomExtents и находить среднюю (и по вертикали, и по горизонтали) точку текста:
static void GetOsnaps(void)
{
// Add your code for command GetOsnapPoints.GetOsnaps here
ads_name en;
ads_point p;
if (acedEntSel("\nУкажите текстовую строку:",en,p) == RTNORM) {
AcDbObjectId objId; acdbGetObjectId(objId,en);
AcDbObjectPointer<AcDbText> pTxt(objId,AcDb::kForRead);
if (pTxt.openStatus() == Acad::eOk) {
AcGePoint3d pickPoint = pTxt->position(),
lastPoint = pickPoint;
AcGeMatrix3d mat; mat.setToIdentity();
AcDbIntArray geomIds;
AcGePoint3dArray pSnaps;
pTxt->getOsnapPoints(AcDb::kOsModeIns,0,pickPoint,lastPoint,mat,pSnaps,geomIds);
for (int i=0; i< pSnaps.length(); i++) {
acutPrintf("\np[%d]=(%g,%g,%g)",i+1,pSnaps[i][X],pSnaps[i][Y],pSnaps[i][Z]);
}
AcDbExtents exts;
pTxt->getGeomExtents(exts);
AcGePoint3d midPoint = exts.minPoint() + (exts.maxPoint()-exts.minPoint())*0.5;
acutPrintf("\nСредняя точка текста=(%g,%g,%g)",midPoint[X],midPoint[Y],midPoint[Z]);
} else {
acutPrintf("\nВыбран не текст или примитив нельзя открыть для чтения!");
}
}
}