Тема: Mline

Каким образом лучше получать длину объекта Mline (AcDbMline)? Он не является наследником AcDbCurve и getDistAtParam там не работает.
(Длину считаем по центральной линии - т.е. расстояние между grips)

Re: Mline

Попробуй так:

static void MLINEGetLength(void)
{
  ads_name en; ads_point p;
  Acad::ErrorStatus es;
  if (acedEntSel("\nВыберите мультилинию: ",en,p) == RTNORM) {
    AcDbObjectId eid; acdbGetObjectId(eid,en);
    AcDbObjectPointer<AcDbMline> pML(eid,AcDb::kForRead);
    if ((es = pML.openStatus()) == Acad::eOk) {
      AcGePoint3dArray pts;
      AcDbIntArray snapModes, geomIds;
      int nVert = pML->numVertices();
      double len = 0;
      for (int i=0; i < nVert-1; i++) {
        len += pML->vertexAt(i).distanceTo(pML->vertexAt(i+1));
      }
      acutPrintf("\nMline length = %.8g",len);
    } else {
      acutPrintf("\npML.openStatus()=%s",acadErrorStatusText(es));
    }
  }
}

Re: Mline

Спасибо.
Попробую.