Тема: Бага при роботе с полилинией дугой

Если в стартовой точке полилинии спросить getDistAtPoint, то получаем в результате eInvalidInput.
Функция:
bool getPointDistanseByPoly(const AcDbPolyline& poly, AcGePoint3d point, double& dist, double delta )
{
    // ход конём.
    AcGePoint3d startPoint;
    poly.getStartPoint(startPoint);
    if(startPoint == point)    {
        dist = 0;
        return true;
    }
   
    AcGePoint3d pointOnLine;
    ISOK_BOOL( poly.getClosestPointTo( point, pointOnLine ) );
    double distance;
    ISOK_BOOL( poly.getDistAtPoint( pointOnLine, distance ) );
   
    if( pointOnLine.distanceTo( point ) > delta )
        return false;
    dist = distance;
    return true;
}

Re: Бага при роботе с полилинией дугой

Причина 1:
getDistAtPoint(const AcGePoint3d& unnamed,
double& unnamed) const;
На вход функции передаем 3D point. Если полилиния имеет elevation+normal не совпадающие со значениями по умолчанию то переданная точка может и не лежать на полилинии.
Причина 2: у полилинии может не быть точек

Re: Бага при роботе с полилинией дугой

Причина 1:
Перед использованием функции getDistAtPoint я использую getClosestPointTo и получаю точку на полилинии.
Причина 2:
На вход приходит полилиния у которой есть точки.

Re: Бага при роботе с полилинией дугой

Не помню уже в какой из версий AutoCAD getDistAtPoint работало некорректно. Правильнее использовать getParamAtPoint, а затем getDistAtParam.