Тема: Вторая точка дуги

Подскажите пожалуйста функцию, которая возвращает вторую точку дуги (т.е. вторую точку, которая требуется для построения дуги).

Re: Вторая точка дуги

Имеется в виду вторая точка при построении дуги по трем точкам? Уточни вопрос.

Re: Вторая точка дуги

Да. Конкретно задача заключается в следующем в момент преребора выбранных примитивов при обработке дуг
if (AcDbArc::cast(pEnt.object())){
    //обработка дуги
    AcGePoint3d pStart,pEnd,pMid;
    pArc->getStartPoint(pStart);//получаем
    pArc->getEndPoint(pEnd);
    pMid = ???
}
необходимо получить координаты стартовой, конечной и второй точки (той которая используется при построении дуги по трем точкам).

Re: Вторая точка дуги

> Алексей
Координату именно той точки, которая использовалась при создании дуги ты не получишь (информация о ней нигде не сохраняется), а вот среднюю точку дуги, которую можно использовать в качестве второй точки для построения дуги, получить не сложно:

static void ArcMid(void)
{
  ads_name en; ads_point p;
  if (acedEntSel(_T("\nВыберите дугу: "),en,p) == RTNORM) {
    AcDbObjectId eId; acdbGetObjectId(eId,en);
    AcDbObjectPointer<AcDbArc> pArc(eId,AcDb::kForRead);
    if (pArc.openStatus() == Acad::eOk) {
      double parmStart=0, parmEnd=0;
      AcGePoint3d pStart, pEnd, pMid;
      if (pArc->getStartParam(parmStart) == Acad::eOk && pArc->getEndParam(parmEnd) == Acad::eOk) {
        double parmMid = 0.5*(parmStart+parmEnd);
        pArc->getPointAtParam(parmStart,pStart);
        pArc->getPointAtParam(parmEnd,pEnd);
        pArc->getPointAtParam(parmMid,pMid);
        acutPrintf(_T("\nStart=(%g %g %g) End = (%g %g %g) Mid=(%g %g %g)"),
          pStart.x,pStart.y,pStart.z,
          pEnd.x,pEnd.y,pEnd.z,
          pMid.x,pMid.y,pMid.z
        );
      }
    }
  }
}

Все координаты возвращаются в МСК (WCS).

Re: Вторая точка дуги

Спасибо.