123b3eb3cSopenharmony_ci/*
223b3eb3cSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
323b3eb3cSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
423b3eb3cSopenharmony_ci * you may not use this file except in compliance with the License.
523b3eb3cSopenharmony_ci * You may obtain a copy of the License at
623b3eb3cSopenharmony_ci *
723b3eb3cSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
823b3eb3cSopenharmony_ci *
923b3eb3cSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1023b3eb3cSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1123b3eb3cSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1223b3eb3cSopenharmony_ci * See the License for the specific language governing permissions and
1323b3eb3cSopenharmony_ci * limitations under the License.
1423b3eb3cSopenharmony_ci */
1523b3eb3cSopenharmony_ci
1623b3eb3cSopenharmony_ci#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_ARC_H
1723b3eb3cSopenharmony_ci#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_ARC_H
1823b3eb3cSopenharmony_ci
1923b3eb3cSopenharmony_ci#include "base/geometry/point.h"
2023b3eb3cSopenharmony_ci#include "base/utils/utils.h"
2123b3eb3cSopenharmony_ci
2223b3eb3cSopenharmony_ci#define PI_NUM 3.1415926f
2323b3eb3cSopenharmony_ci
2423b3eb3cSopenharmony_cinamespace OHOS::Ace {
2523b3eb3cSopenharmony_ci
2623b3eb3cSopenharmony_ciclass Arc {
2723b3eb3cSopenharmony_cipublic:
2823b3eb3cSopenharmony_ci    Arc() = default;
2923b3eb3cSopenharmony_ci    ~Arc() = default;
3023b3eb3cSopenharmony_ci
3123b3eb3cSopenharmony_ci    const Point& GetCenterPoint() const
3223b3eb3cSopenharmony_ci    {
3323b3eb3cSopenharmony_ci        return centerPoint_;
3423b3eb3cSopenharmony_ci    }
3523b3eb3cSopenharmony_ci
3623b3eb3cSopenharmony_ci    void SetCenterPoint(const Point& point)
3723b3eb3cSopenharmony_ci    {
3823b3eb3cSopenharmony_ci        centerPoint_ = point;
3923b3eb3cSopenharmony_ci    }
4023b3eb3cSopenharmony_ci
4123b3eb3cSopenharmony_ci    double GetRadius() const
4223b3eb3cSopenharmony_ci    {
4323b3eb3cSopenharmony_ci        return radius_;
4423b3eb3cSopenharmony_ci    }
4523b3eb3cSopenharmony_ci
4623b3eb3cSopenharmony_ci    void SetRadius(double radius)
4723b3eb3cSopenharmony_ci    {
4823b3eb3cSopenharmony_ci        radius_ = radius;
4923b3eb3cSopenharmony_ci    }
5023b3eb3cSopenharmony_ci
5123b3eb3cSopenharmony_ci    double GetStartAngle() const
5223b3eb3cSopenharmony_ci    {
5323b3eb3cSopenharmony_ci        return startAngle_;
5423b3eb3cSopenharmony_ci    }
5523b3eb3cSopenharmony_ci
5623b3eb3cSopenharmony_ci    void SetStartAngle(double angle)
5723b3eb3cSopenharmony_ci    {
5823b3eb3cSopenharmony_ci        startAngle_ = angle;
5923b3eb3cSopenharmony_ci    }
6023b3eb3cSopenharmony_ci
6123b3eb3cSopenharmony_ci    double GetEndAngle() const
6223b3eb3cSopenharmony_ci    {
6323b3eb3cSopenharmony_ci        return endAngle_;
6423b3eb3cSopenharmony_ci    }
6523b3eb3cSopenharmony_ci
6623b3eb3cSopenharmony_ci    void SetEndAngle(double angle)
6723b3eb3cSopenharmony_ci    {
6823b3eb3cSopenharmony_ci        endAngle_ = angle;
6923b3eb3cSopenharmony_ci    }
7023b3eb3cSopenharmony_ci
7123b3eb3cSopenharmony_ci    double GetSweepAngle() const
7223b3eb3cSopenharmony_ci    {
7323b3eb3cSopenharmony_ci        return endAngle_ - startAngle_;
7423b3eb3cSopenharmony_ci    }
7523b3eb3cSopenharmony_ci
7623b3eb3cSopenharmony_ci    void Rotate(const Point& point, double angle)
7723b3eb3cSopenharmony_ci    {
7823b3eb3cSopenharmony_ci        centerPoint_.Rotate(point, angle);
7923b3eb3cSopenharmony_ci        startAngle_ += angle;
8023b3eb3cSopenharmony_ci        endAngle_ += angle;
8123b3eb3cSopenharmony_ci    }
8223b3eb3cSopenharmony_ci
8323b3eb3cSopenharmony_ci    void Move(double xOffset, double yOffset)
8423b3eb3cSopenharmony_ci    {
8523b3eb3cSopenharmony_ci        centerPoint_.SetX(centerPoint_.GetX() + xOffset);
8623b3eb3cSopenharmony_ci        centerPoint_.SetY(centerPoint_.GetY() + yOffset);
8723b3eb3cSopenharmony_ci    }
8823b3eb3cSopenharmony_ci
8923b3eb3cSopenharmony_ci    void GetPointByAngle(double angle, Point& out) const
9023b3eb3cSopenharmony_ci    {
9123b3eb3cSopenharmony_ci        out.SetX(centerPoint_.GetX() + radius_);
9223b3eb3cSopenharmony_ci        out.SetY(centerPoint_.GetY());
9323b3eb3cSopenharmony_ci        out.Rotate(centerPoint_, angle);
9423b3eb3cSopenharmony_ci    }
9523b3eb3cSopenharmony_ci
9623b3eb3cSopenharmony_ci    void GetStartPoint(Point& out) const
9723b3eb3cSopenharmony_ci    {
9823b3eb3cSopenharmony_ci        GetPointByAngle(startAngle_, out);
9923b3eb3cSopenharmony_ci    }
10023b3eb3cSopenharmony_ci
10123b3eb3cSopenharmony_ci    void GetEndPoint(Point& out) const
10223b3eb3cSopenharmony_ci    {
10323b3eb3cSopenharmony_ci        GetPointByAngle(endAngle_, out);
10423b3eb3cSopenharmony_ci    }
10523b3eb3cSopenharmony_ci
10623b3eb3cSopenharmony_ci    Point GetStartPoint() const
10723b3eb3cSopenharmony_ci    {
10823b3eb3cSopenharmony_ci        Point startPoint;
10923b3eb3cSopenharmony_ci        GetStartPoint(startPoint);
11023b3eb3cSopenharmony_ci        return startPoint;
11123b3eb3cSopenharmony_ci    }
11223b3eb3cSopenharmony_ci
11323b3eb3cSopenharmony_ci    Point GetEndPoint() const
11423b3eb3cSopenharmony_ci    {
11523b3eb3cSopenharmony_ci        Point endPoint;
11623b3eb3cSopenharmony_ci        GetEndPoint(endPoint);
11723b3eb3cSopenharmony_ci        return endPoint;
11823b3eb3cSopenharmony_ci    }
11923b3eb3cSopenharmony_ci
12023b3eb3cSopenharmony_ci    double GetLeft() const
12123b3eb3cSopenharmony_ci    {
12223b3eb3cSopenharmony_ci        return centerPoint_.GetX() - radius_;
12323b3eb3cSopenharmony_ci    }
12423b3eb3cSopenharmony_ci
12523b3eb3cSopenharmony_ci    double GetRight() const
12623b3eb3cSopenharmony_ci    {
12723b3eb3cSopenharmony_ci        return centerPoint_.GetX() + radius_;
12823b3eb3cSopenharmony_ci    }
12923b3eb3cSopenharmony_ci
13023b3eb3cSopenharmony_ci    double GetTop() const
13123b3eb3cSopenharmony_ci    {
13223b3eb3cSopenharmony_ci        return centerPoint_.GetY() - radius_;
13323b3eb3cSopenharmony_ci    }
13423b3eb3cSopenharmony_ci
13523b3eb3cSopenharmony_ci    double GetBottom() const
13623b3eb3cSopenharmony_ci    {
13723b3eb3cSopenharmony_ci        return centerPoint_.GetY() + radius_;
13823b3eb3cSopenharmony_ci    }
13923b3eb3cSopenharmony_ci
14023b3eb3cSopenharmony_ciprivate:
14123b3eb3cSopenharmony_ci    Point centerPoint_;
14223b3eb3cSopenharmony_ci    double radius_ = 0.0;
14323b3eb3cSopenharmony_ci    double startAngle_ = 0.0;
14423b3eb3cSopenharmony_ci    double endAngle_ = 0.0;
14523b3eb3cSopenharmony_ci};
14623b3eb3cSopenharmony_ci
14723b3eb3cSopenharmony_ci} // namespace OHOS::Ace
14823b3eb3cSopenharmony_ci
14923b3eb3cSopenharmony_ci#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_ARC_H
150