#include <cmath>
#include "clipper2/clipper.h"
#include "clipper2/clipper.offset.h"
namespace Clipper2Lib {
const double default_arc_tolerance = …;
const double floating_point_tolerance = …;
std::optional<size_t> GetLowestClosedPathIdx(const Paths64& paths)
{ … }
PointD GetUnitNormal(const Point64& pt1, const Point64& pt2)
{ … }
inline bool AlmostZero(double value, double epsilon = 0.001)
{ … }
inline double Hypot(double x, double y)
{ … }
inline PointD NormalizeVector(const PointD& vec)
{ … }
inline PointD GetAvgUnitVector(const PointD& vec1, const PointD& vec2)
{ … }
inline bool IsClosedPath(EndType et)
{ … }
inline Point64 GetPerpendic(const Point64& pt, const PointD& norm, double delta)
{ … }
inline PointD GetPerpendicD(const Point64& pt, const PointD& norm, double delta)
{ … }
inline void NegatePath(PathD& path)
{ … }
ClipperOffset::Group::Group(const Paths64& _paths, JoinType _join_type, EndType _end_type): … { … }
void ClipperOffset::AddPath(const Path64& path, JoinType jt_, EndType et_)
{ … }
void ClipperOffset::AddPaths(const Paths64 &paths, JoinType jt_, EndType et_)
{ … }
void ClipperOffset::BuildNormals(const Path64& path)
{ … }
void ClipperOffset::DoBevel(const Path64& path, size_t j, size_t k)
{ … }
void ClipperOffset::DoSquare(const Path64& path, size_t j, size_t k)
{ … }
void ClipperOffset::DoMiter(const Path64& path, size_t j, size_t k, double cos_a)
{ … }
void ClipperOffset::DoRound(const Path64& path, size_t j, size_t k, double angle)
{ … }
void ClipperOffset::OffsetPoint(Group& group, const Path64& path, size_t j, size_t k)
{ … }
void ClipperOffset::OffsetPolygon(Group& group, const Path64& path)
{ … }
void ClipperOffset::OffsetOpenJoined(Group& group, const Path64& path)
{ … }
void ClipperOffset::OffsetOpenPath(Group& group, const Path64& path)
{ … }
void ClipperOffset::DoGroupOffset(Group& group)
{ … }
#ifdef USINGZ
void ClipperOffset::ZCB(const Point64& bot1, const Point64& top1,
const Point64& bot2, const Point64& top2, Point64& ip)
{
if (bot1.z && ((bot1.z == bot2.z) || (bot1.z == top2.z))) ip.z = bot1.z;
else if (bot2.z && (bot2.z == top1.z)) ip.z = bot2.z;
else if (top1.z && (top1.z == top2.z)) ip.z = top1.z;
else if (zCallback64_) zCallback64_(bot1, top1, bot2, top2, ip);
}
#endif
size_t ClipperOffset::CalcSolutionCapacity()
{ … }
bool ClipperOffset::CheckReverseOrientation()
{ … }
void ClipperOffset::ExecuteInternal(double delta)
{ … }
void ClipperOffset::Execute(double delta, Paths64& paths)
{ … }
void ClipperOffset::Execute(double delta, PolyTree64& polytree)
{ … }
void ClipperOffset::Execute(DeltaCallback64 delta_cb, Paths64& paths)
{ … }
}