コード例 #1
0
ファイル: mgellipse.cpp プロジェクト: firehot/touchvg
bool MgArc::_setHandlePoint(int index, const Point2d& pt, float)
{
    if (index == 1) {
        return setStartMidEnd(pt, getMidPoint(), getEndPoint());
    }
    if (index == 2) {
        return setStartMidEnd(getStartPoint(), getMidPoint(), pt);
    }
    if (index == 3) {
        return setStartMidEnd(getStartPoint(), pt, getEndPoint());
    }
    if (index == 4) {
        float a = (pt - getCenter()).angle2();
        return setCenterRadius(getCenter(), getRadius(), a, getEndAngle() - a);
    }
    if (index == 5) {
        float a = (pt - getCenter()).angle2();
        return setCenterRadius(getCenter(), getRadius(), getStartAngle(), a - getStartAngle());
    }
    if (index == 6) {
        return setTanStartEnd(pt - getStartPoint(), getStartPoint(), getEndPoint());
    }
    if (index == 7) {
        return (setTanStartEnd(getEndPoint() - pt, getEndPoint(), getStartPoint())
            && _reverse());
    }
    return setCenterStartEnd(pt, getStartPoint(), getEndPoint());
}
コード例 #2
0
ファイル: mgarc.cpp プロジェクト: Vito2015/vgcore
bool MgArc::_setHandlePoint2(int index, const Point2d& pt, float, int& data)
{
    static float lastSweepAngle;
    
    if (index == 1 || index == 2) {     // 起点、终点
        return setCenterRadius(getCenter(), pt.distanceTo(getCenter()), getStartAngle(), getSweepAngle());
    }
    if (index == 3) {                   // 弧线中点
        return setStartMidEnd(getStartPoint(), pt, getEndPoint());
    }
    if (index == 4) {                   // 改变起始角度
        if (data == 0) {
            lastSweepAngle = getSweepAngle();
            data++;
        }
        Point2d startPt(getCenter().polarPoint((pt - getCenter()).angle2(), getRadius()));
        bool ret = setCSE(getCenter(), startPt, getEndPoint(), lastSweepAngle);
        lastSweepAngle = getSweepAngle();
        return ret;
    }
    if (index == 5) {                   // 改变终止角度
        if (data == 0) {
            lastSweepAngle = getSweepAngle();
            data++;
        }
        Point2d endPt(getCenter().polarPoint((pt - getCenter()).angle2(), getRadius()));
        bool ret = setCSE(getCenter(), getStartPoint(), endPt, lastSweepAngle);
        lastSweepAngle = getSweepAngle();
        return ret;
    }
    if (index == 6) {
        return setTanStartEnd(pt - getStartPoint(), getStartPoint(), getEndPoint());
    }
    if (index == 7) {
        return (setTanStartEnd(getEndPoint() - pt, getEndPoint(), getStartPoint())
            && _reverse());
    }
    return offset(pt - getCenter(), -1);
}