v0.14.0
Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
ClipperLib::ClipperBase Class Reference

#include <users_modules/mortar_contact/src/clipper.hpp>

Inheritance diagram for ClipperLib::ClipperBase:
[legend]
Collaboration diagram for ClipperLib::ClipperBase:
[legend]

Public Member Functions

 ClipperBase ()
 
virtual ~ClipperBase ()
 
virtual bool AddPath (const Path &pg, PolyType PolyTyp, bool Closed)
 
bool AddPaths (const Paths &ppg, PolyType PolyTyp, bool Closed)
 
virtual void Clear ()
 
IntRect GetBounds ()
 
bool PreserveCollinear ()
 
void PreserveCollinear (bool value)
 

Protected Types

typedef std::vector< LocalMinimumMinimaList
 
typedef std::priority_queue< cIntScanbeamList
 

Protected Member Functions

void DisposeLocalMinimaList ()
 
TEdgeAddBoundsToLML (TEdge *e, bool IsClosed)
 
virtual void Reset ()
 
TEdgeProcessBound (TEdge *E, bool IsClockwise)
 
void InsertScanbeam (const cInt Y)
 
bool PopScanbeam (cInt &Y)
 
bool LocalMinimaPending ()
 
bool PopLocalMinima (cInt Y, const LocalMinimum *&locMin)
 
OutRecCreateOutRec ()
 
void DisposeAllOutRecs ()
 
void DisposeOutRec (PolyOutList::size_type index)
 
void SwapPositionsInAEL (TEdge *edge1, TEdge *edge2)
 
void DeleteFromAEL (TEdge *e)
 
void UpdateEdgeIntoAEL (TEdge *&e)
 

Protected Attributes

MinimaList::iterator m_CurrentLM
 
MinimaList m_MinimaList
 
bool m_UseFullRange
 
EdgeList m_edges
 
bool m_PreserveCollinear
 
bool m_HasOpenPaths
 
PolyOutList m_PolyOuts
 
TEdgem_ActiveEdges
 
ScanbeamList m_Scanbeam
 

Detailed Description

Definition at line 218 of file clipper.hpp.

Member Typedef Documentation

◆ MinimaList

typedef std::vector<LocalMinimum> ClipperLib::ClipperBase::MinimaList
protected

Definition at line 245 of file clipper.hpp.

◆ ScanbeamList

typedef std::priority_queue<cInt> ClipperLib::ClipperBase::ScanbeamList
protected

Definition at line 256 of file clipper.hpp.

Constructor & Destructor Documentation

◆ ClipperBase()

ClipperLib::ClipperBase::ClipperBase ( )

Definition at line 919 of file clipper.cpp.

◆ ~ClipperBase()

ClipperLib::ClipperBase::~ClipperBase ( )
virtual

Definition at line 926 of file clipper.cpp.

929 {

Member Function Documentation

◆ AddBoundsToLML()

TEdge* ClipperLib::ClipperBase::AddBoundsToLML ( TEdge e,
bool  IsClosed 
)
protected

◆ AddPath()

bool ClipperLib::ClipperBase::AddPath ( const Path pg,
PolyType  PolyTyp,
bool  Closed 
)
virtual

Definition at line 1081 of file clipper.cpp.

1088  {
1089  //nb: allows matching start and end points when not Closed ...
1090  if (E->Curr == E->Next->Curr && (Closed || E->Next != eStart))
1091  {
1092  if (E == E->Next) break;
1093  if (E == eStart) eStart = E->Next;
1094  E = RemoveEdge(E);
1095  eLoopStop = E;
1096  continue;
1097  }
1098  if (E->Prev == E->Next)
1099  break; //only two vertices
1100  else if (Closed &&
1101  SlopesEqual(E->Prev->Curr, E->Curr, E->Next->Curr, m_UseFullRange) &&
1102  (!m_PreserveCollinear ||
1103  !Pt2IsBetweenPt1AndPt3(E->Prev->Curr, E->Curr, E->Next->Curr)))
1104  {
1105  //Collinear edges are allowed for open paths but in closed paths
1106  //the default is to merge adjacent collinear edges into a single edge.
1107  //However, if the PreserveCollinear property is enabled, only overlapping
1108  //collinear edges (ie spikes) will be removed from closed paths.
1109  if (E == eStart) eStart = E->Next;
1110  E = RemoveEdge(E);
1111  E = E->Prev;
1112  eLoopStop = E;
1113  continue;
1114  }
1115  E = E->Next;
1116  if ((E == eLoopStop) || (!Closed && E->Next == eStart)) break;
1117  }
1118 
1119  if ((!Closed && (E == E->Next)) || (Closed && (E->Prev == E->Next)))
1120  {
1121  delete [] edges;
1122  return false;
1123  }
1124 
1125  if (!Closed)
1126  {
1127  m_HasOpenPaths = true;
1128  eStart->Prev->OutIdx = Skip;
1129  }
1130 
1131  //3. Do second stage of edge initialization ...
1132  E = eStart;
1133  do
1134  {
1135  InitEdge2(*E, PolyTyp);
1136  E = E->Next;
1137  if (IsFlat && E->Curr.Y != eStart->Curr.Y) IsFlat = false;
1138  }
1139  while (E != eStart);
1140 
1141  //4. Finally, add edge bounds to LocalMinima list ...
1142 
1143  //Totally flat paths must be handled differently when adding them
1144  //to LocalMinima list to avoid endless loops etc ...
1145  if (IsFlat)
1146  {
1147  if (Closed)
1148  {
1149  delete [] edges;
1150  return false;
1151  }
1152  E->Prev->OutIdx = Skip;
1153  MinimaList::value_type locMin;
1154  locMin.Y = E->Bot.Y;
1155  locMin.LeftBound = 0;
1156  locMin.RightBound = E;
1157  locMin.RightBound->Side = esRight;
1158  locMin.RightBound->WindDelta = 0;
1159  for (;;)
1160  {
1161  if (E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E);
1162  if (E->Next->OutIdx == Skip) break;
1163  E->NextInLML = E->Next;
1164  E = E->Next;
1165  }
1166  m_MinimaList.push_back(locMin);
1167  m_edges.push_back(edges);
1168  return true;
1169  }
1170 
1171  m_edges.push_back(edges);
1172  bool leftBoundIsForward;
1173  TEdge* EMin = 0;
1174 
1175  //workaround to avoid an endless loop in the while loop below when
1176  //open paths have matching start and end points ...
1177  if (E->Prev->Bot == E->Prev->Top) E = E->Next;
1178 
1179  for (;;)
1180  {
1181  E = FindNextLocMin(E);
1182  if (E == EMin) break;
1183  else if (!EMin) EMin = E;
1184 
1185  //E and E.Prev now share a local minima (left aligned if horizontal).
1186  //Compare their slopes to find which starts which bound ...
1187  MinimaList::value_type locMin;
1188  locMin.Y = E->Bot.Y;
1189  if (E->Dx < E->Prev->Dx)
1190  {
1191  locMin.LeftBound = E->Prev;
1192  locMin.RightBound = E;
1193  leftBoundIsForward = false; //Q.nextInLML = Q.prev
1194  } else
1195  {
1196  locMin.LeftBound = E;
1197  locMin.RightBound = E->Prev;
1198  leftBoundIsForward = true; //Q.nextInLML = Q.next
1199  }
1200 
1201  if (!Closed) locMin.LeftBound->WindDelta = 0;
1202  else if (locMin.LeftBound->Next == locMin.RightBound)
1203  locMin.LeftBound->WindDelta = -1;
1204  else locMin.LeftBound->WindDelta = 1;
1205  locMin.RightBound->WindDelta = -locMin.LeftBound->WindDelta;
1206 
1207  E = ProcessBound(locMin.LeftBound, leftBoundIsForward);
1208  if (E->OutIdx == Skip) E = ProcessBound(E, leftBoundIsForward);
1209 
1210  TEdge* E2 = ProcessBound(locMin.RightBound, !leftBoundIsForward);
1211  if (E2->OutIdx == Skip) E2 = ProcessBound(E2, !leftBoundIsForward);
1212 
1213  if (locMin.LeftBound->OutIdx == Skip)
1214  locMin.LeftBound = 0;
1215  else if (locMin.RightBound->OutIdx == Skip)
1216  locMin.RightBound = 0;
1217  m_MinimaList.push_back(locMin);
1218  if (!leftBoundIsForward) E = E2;
1219  }
1220  return true;
1221 }
1222 //------------------------------------------------------------------------------
1223 
1224 bool ClipperBase::AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed)
1225 {
1226  bool result = false;
1227  for (Paths::size_type i = 0; i < ppg.size(); ++i)
1228  if (AddPath(ppg[i], PolyTyp, Closed)) result = true;
1229  return result;
1230 }
1231 //------------------------------------------------------------------------------
1232 
1233 void ClipperBase::Clear()
1234 {
1236  for (EdgeList::size_type i = 0; i < m_edges.size(); ++i)
1237  {
1238  TEdge* edges = m_edges[i];
1239  delete [] edges;
1240  }
1241  m_edges.clear();
1242  m_UseFullRange = false;
1243  m_HasOpenPaths = false;
1244 }
1245 //------------------------------------------------------------------------------
1246 
1247 void ClipperBase::Reset()
1248 {
1249  m_CurrentLM = m_MinimaList.begin();
1250  if (m_CurrentLM == m_MinimaList.end()) return; //ie nothing to process
1251  std::sort(m_MinimaList.begin(), m_MinimaList.end(), LocMinSorter());
1252 
1253  m_Scanbeam = ScanbeamList(); //clears/resets priority_queue
1254  //reset all edges ...
1255  for (MinimaList::iterator lm = m_MinimaList.begin(); lm != m_MinimaList.end(); ++lm)
1256  {
1257  InsertScanbeam(lm->Y);

◆ AddPaths()

bool ClipperLib::ClipperBase::AddPaths ( const Paths ppg,
PolyType  PolyTyp,
bool  Closed 
)

Definition at line 1260 of file clipper.cpp.

1260  {
1261  e->Curr = e->Bot;
1262  e->Side = esLeft;
1263  e->OutIdx = Unassigned;
1264  }
1265 
1266  e = lm->RightBound;

◆ Clear()

void ClipperLib::ClipperBase::Clear ( )
virtual

Definition at line 1269 of file clipper.cpp.

1280 {

◆ CreateOutRec()

OutRec * ClipperLib::ClipperBase::CreateOutRec ( )
protected

Definition at line 1416 of file clipper.cpp.

1424  {
1425  TEdge* Next = Edge1->NextInAEL;
1426  TEdge* Prev = Edge1->PrevInAEL;
1427  Edge1->NextInAEL = Edge2->NextInAEL;
1428  if (Edge1->NextInAEL) Edge1->NextInAEL->PrevInAEL = Edge1;

◆ DeleteFromAEL()

void ClipperLib::ClipperBase::DeleteFromAEL ( TEdge e)
protected

Definition at line 1403 of file clipper.cpp.

1413  {

◆ DisposeAllOutRecs()

void ClipperLib::ClipperBase::DisposeAllOutRecs ( )
protected

Definition at line 1387 of file clipper.cpp.

◆ DisposeLocalMinimaList()

void ClipperLib::ClipperBase::DisposeLocalMinimaList ( )
protected

Definition at line 1315 of file clipper.cpp.

1316  {
1317  if (e->Bot.X < result.left) result.left = e->Bot.X;
1318  if (e->Bot.X > result.right) result.right = e->Bot.X;
1319  e = e->NextInLML;

◆ DisposeOutRec()

void ClipperLib::ClipperBase::DisposeOutRec ( PolyOutList::size_type  index)
protected

Definition at line 1394 of file clipper.cpp.

1396 {
1397  //check that one or other edge hasn't already been removed from AEL ...
1398  if (Edge1->NextInAEL == Edge1->PrevInAEL ||
1399  Edge2->NextInAEL == Edge2->PrevInAEL) return;
1400 

◆ GetBounds()

IntRect ClipperLib::ClipperBase::GetBounds ( )

Definition at line 1331 of file clipper.cpp.

1336 {
1337  m_Scanbeam.push(Y);
1338 }
1339 //------------------------------------------------------------------------------
1340 
1342 {
1343  if (m_Scanbeam.empty()) return false;
1344  Y = m_Scanbeam.top();
1345  m_Scanbeam.pop();
1346  while (!m_Scanbeam.empty() && Y == m_Scanbeam.top()) { m_Scanbeam.pop(); } // Pop duplicates.
1347  return true;
1348 }
1349 //------------------------------------------------------------------------------
1350 
1352  for (PolyOutList::size_type i = 0; i < m_PolyOuts.size(); ++i)
1353  DisposeOutRec(i);
1354  m_PolyOuts.clear();
1355 }
1356 //------------------------------------------------------------------------------
1357 
1358 void ClipperBase::DisposeOutRec(PolyOutList::size_type index)
1359 {
1360  OutRec *outRec = m_PolyOuts[index];
1361  if (outRec->Pts) DisposeOutPts(outRec->Pts);
1362  delete outRec;
1363  m_PolyOuts[index] = 0;
1364 }
1365 //------------------------------------------------------------------------------
1366 
1367 void ClipperBase::DeleteFromAEL(TEdge *e)
1368 {

◆ InsertScanbeam()

void ClipperLib::ClipperBase::InsertScanbeam ( const cInt  Y)
protected

Definition at line 1371 of file clipper.cpp.

◆ LocalMinimaPending()

bool ClipperLib::ClipperBase::LocalMinimaPending ( )
protected

Definition at line 1501 of file clipper.cpp.

1503 {
1504  return Execute(clipType, polytree, fillType, fillType);

◆ PopLocalMinima()

bool ClipperLib::ClipperBase::PopLocalMinima ( cInt  Y,
const LocalMinimum *&  locMin 
)
protected

Definition at line 1322 of file clipper.cpp.

◆ PopScanbeam()

bool ClipperLib::ClipperBase::PopScanbeam ( cInt Y)
protected

Definition at line 1377 of file clipper.cpp.

1381 {
1382  OutRec* result = new OutRec;
1383  result->IsHole = false;
1384  result->IsOpen = false;

◆ PreserveCollinear() [1/2]

bool ClipperLib::ClipperBase::PreserveCollinear ( )
inline

Definition at line 227 of file clipper.hpp.

227 {return m_PreserveCollinear;};

◆ PreserveCollinear() [2/2]

void ClipperLib::ClipperBase::PreserveCollinear ( bool  value)
inline

Definition at line 228 of file clipper.hpp.

228 {m_PreserveCollinear = value;};

◆ ProcessBound()

TEdge * ClipperLib::ClipperBase::ProcessBound ( TEdge E,
bool  IsClockwise 
)
protected

Definition at line 964 of file clipper.cpp.

976  {
977  //We need to be careful with open paths because this may not be a
978  //true local minima (ie E may be following a skip edge).
979  //Also, consecutive horz. edges may start heading left before going right.
980  if (NextIsForward)
981  EStart = E->Prev;
982  else
983  EStart = E->Next;
984  if (IsHorizontal(*EStart)) //ie an adjoining horizontal skip edge
985  {
986  if (EStart->Bot.X != E->Bot.X && EStart->Top.X != E->Bot.X)
988  }
989  else if (EStart->Bot.X != E->Bot.X)
991  }
992 
993  EStart = E;
994  if (NextIsForward)
995  {
996  while (Result->Top.Y == Result->Next->Bot.Y && Result->Next->OutIdx != Skip)
997  Result = Result->Next;
998  if (IsHorizontal(*Result) && Result->Next->OutIdx != Skip)
999  {
1000  //nb: at the top of a bound, horizontals are added to the bound
1001  //only when the preceding edge attaches to the horizontal's left vertex
1002  //unless a Skip edge is encountered when that becomes the top divide
1003  Horz = Result;
1004  while (IsHorizontal(*Horz->Prev)) Horz = Horz->Prev;
1005  if (Horz->Prev->Top.X > Result->Next->Top.X) Result = Horz->Prev;
1006  }
1007  while (E != Result)
1008  {
1009  E->NextInLML = E->Next;
1010  if (IsHorizontal(*E) && E != EStart &&
1011  E->Bot.X != E->Prev->Top.X) ReverseHorizontal(*E);
1012  E = E->Next;
1013  }
1014  if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Prev->Top.X)
1015  ReverseHorizontal(*E);
1016  Result = Result->Next; //move to the edge just beyond current bound
1017  } else
1018  {
1019  while (Result->Top.Y == Result->Prev->Bot.Y && Result->Prev->OutIdx != Skip)
1020  Result = Result->Prev;
1021  if (IsHorizontal(*Result) && Result->Prev->OutIdx != Skip)
1022  {
1023  Horz = Result;
1024  while (IsHorizontal(*Horz->Next)) Horz = Horz->Next;
1025  if (Horz->Next->Top.X == Result->Prev->Top.X ||
1026  Horz->Next->Top.X > Result->Prev->Top.X) Result = Horz->Next;
1027  }
1028 
1029  while (E != Result)
1030  {
1031  E->NextInLML = E->Prev;
1032  if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X)
1033  ReverseHorizontal(*E);
1034  E = E->Prev;
1035  }
1036  if (IsHorizontal(*E) && E != EStart && E->Bot.X != E->Next->Top.X)
1037  ReverseHorizontal(*E);
1038  Result = Result->Prev; //move to the edge just beyond current bound
1039  }
1040 
1041  return Result;
1042 }
1043 //------------------------------------------------------------------------------
1044 
1045 bool ClipperBase::AddPath(const Path &pg, PolyType PolyTyp, bool Closed)
1046 {
1047 #ifdef use_lines
1048  if (!Closed && PolyTyp == ptClip)
1049  throw clipperException("AddPath: Open paths must be subject.");
1050 #else
1051  if (!Closed)
1052  throw clipperException("AddPath: Open paths have been disabled.");
1053 #endif
1054 
1055  int highI = (int)pg.size() -1;
1056  if (Closed) while (highI > 0 && (pg[highI] == pg[0])) --highI;
1057  while (highI > 0 && (pg[highI] == pg[highI -1])) --highI;
1058  if ((Closed && highI < 2) || (!Closed && highI < 1)) return false;
1059 
1060  //create a new edge array ...
1061  TEdge *edges = new TEdge [highI +1];
1062 
1063  bool IsFlat = true;
1064  //1. Basic (first) edge initialization ...
1065  try
1066  {
1067  edges[1].Curr = pg[1];
1068  RangeTest(pg[0], m_UseFullRange);
1069  RangeTest(pg[highI], m_UseFullRange);
1070  InitEdge(&edges[0], &edges[1], &edges[highI], pg[0]);
1071  InitEdge(&edges[highI], &edges[0], &edges[highI-1], pg[highI]);
1072  for (int i = highI - 1; i >= 1; --i)
1073  {
1074  RangeTest(pg[i], m_UseFullRange);
1075  InitEdge(&edges[i], &edges[i+1], &edges[i-1], pg[i]);
1076  }
1077  }
1078  catch(...)

◆ Reset()

void ClipperLib::ClipperBase::Reset ( )
protectedvirtual

Definition at line 1283 of file clipper.cpp.

1287 {
1288  if (m_CurrentLM == m_MinimaList.end() || (*m_CurrentLM).Y != Y) return false;
1289  locMin = &(*m_CurrentLM);
1290  ++m_CurrentLM;
1291  return true;
1292 }
1293 //------------------------------------------------------------------------------
1294 
1295 IntRect ClipperBase::GetBounds()
1296 {
1297  IntRect result;
1298  MinimaList::iterator lm = m_MinimaList.begin();
1299  if (lm == m_MinimaList.end())
1300  {
1301  result.left = result.top = result.right = result.bottom = 0;
1302  return result;
1303  }
1304  result.left = lm->LeftBound->Bot.X;
1305  result.top = lm->LeftBound->Bot.Y;
1306  result.right = lm->LeftBound->Bot.X;
1307  result.bottom = lm->LeftBound->Bot.Y;
1308  while (lm != m_MinimaList.end())
1309  {
1310  //todo - needs fixing for open paths
1311  result.bottom = std::max(result.bottom, lm->LeftBound->Bot.Y);
1312  TEdge* e = lm->LeftBound;

◆ SwapPositionsInAEL()

void ClipperLib::ClipperBase::SwapPositionsInAEL ( TEdge edge1,
TEdge edge2 
)
protected

Definition at line 1431 of file clipper.cpp.

1443 {
1444  if (!e->NextInLML)
1445  throw clipperException("UpdateEdgeIntoAEL: invalid call");
1446 
1447  e->NextInLML->OutIdx = e->OutIdx;
1448  TEdge* AelPrev = e->PrevInAEL;
1449  TEdge* AelNext = e->NextInAEL;
1450  if (AelPrev) AelPrev->NextInAEL = e->NextInLML;
1451  else m_ActiveEdges = e->NextInLML;
1452  if (AelNext) AelNext->PrevInAEL = e->NextInLML;
1453  e->NextInLML->Side = e->Side;
1454  e->NextInLML->WindDelta = e->WindDelta;
1455  e->NextInLML->WindCnt = e->WindCnt;
1456  e->NextInLML->WindCnt2 = e->WindCnt2;
1457  e = e->NextInLML;
1458  e->Curr = e->Bot;
1459  e->PrevInAEL = AelPrev;
1460  e->NextInAEL = AelNext;
1461  if (!IsHorizontal(*e)) InsertScanbeam(e->Top.Y);
1462 }
1463 //------------------------------------------------------------------------------
1464 
1466 {
1467  return (m_CurrentLM != m_MinimaList.end());
1468 }
1469 
1470 //------------------------------------------------------------------------------
1471 // TClipper methods ...
1472 //------------------------------------------------------------------------------
1473 
1474 Clipper::Clipper(int initOptions) : ClipperBase() //constructor
1475 {

◆ UpdateEdgeIntoAEL()

void ClipperLib::ClipperBase::UpdateEdgeIntoAEL ( TEdge *&  e)
protected

Definition at line 1478 of file clipper.cpp.

1490 {
1491  m_ZFill = zFillFunc;
1492 }
1493 //------------------------------------------------------------------------------
1494 #endif
1495 
1496 bool Clipper::Execute(ClipType clipType, Paths &solution, PolyFillType fillType)
1497 {
1498  return Execute(clipType, solution, fillType, fillType);

Member Data Documentation

◆ m_ActiveEdges

TEdge* ClipperLib::ClipperBase::m_ActiveEdges
protected

Definition at line 254 of file clipper.hpp.

◆ m_CurrentLM

MinimaList::iterator ClipperLib::ClipperBase::m_CurrentLM
protected

Definition at line 246 of file clipper.hpp.

◆ m_edges

EdgeList ClipperLib::ClipperBase::m_edges
protected

Definition at line 250 of file clipper.hpp.

◆ m_HasOpenPaths

bool ClipperLib::ClipperBase::m_HasOpenPaths
protected

Definition at line 252 of file clipper.hpp.

◆ m_MinimaList

MinimaList ClipperLib::ClipperBase::m_MinimaList
protected

Definition at line 247 of file clipper.hpp.

◆ m_PolyOuts

PolyOutList ClipperLib::ClipperBase::m_PolyOuts
protected

Definition at line 253 of file clipper.hpp.

◆ m_PreserveCollinear

bool ClipperLib::ClipperBase::m_PreserveCollinear
protected

Definition at line 251 of file clipper.hpp.

◆ m_Scanbeam

ScanbeamList ClipperLib::ClipperBase::m_Scanbeam
protected

Definition at line 257 of file clipper.hpp.

◆ m_UseFullRange

bool ClipperLib::ClipperBase::m_UseFullRange
protected

Definition at line 249 of file clipper.hpp.


The documentation for this class was generated from the following files:
ClipperLib::FindNextLocMin
TEdge * FindNextLocMin(TEdge *E)
Definition: clipper.cpp:947
ClipperLib::ClipperBase::PopScanbeam
bool PopScanbeam(cInt &Y)
Definition: clipper.cpp:1377
ClipperLib::Path
std::vector< IntPoint > Path
Definition: clipper.hpp:106
ClipperLib::Paths
std::vector< Path > Paths
Definition: clipper.hpp:107
ClipperLib::SlopesEqual
bool SlopesEqual(const TEdge &e1, const TEdge &e2, bool UseFullInt64Range)
Definition: clipper.cpp:577
ClipperLib::DisposeOutPts
void DisposeOutPts(OutPt *&pp)
Definition: clipper.cpp:742
ClipperLib::ClipperBase::m_UseFullRange
bool m_UseFullRange
Definition: clipper.hpp:249
ClipperLib::RangeTest
void RangeTest(const IntPoint &Pt, bool &useFullRange)
Definition: clipper.cpp:932
ClipperLib::ClipperBase::ProcessBound
TEdge * ProcessBound(TEdge *E, bool IsClockwise)
Definition: clipper.cpp:964
ClipperLib::ClipperBase::m_HasOpenPaths
bool m_HasOpenPaths
Definition: clipper.hpp:252
ClipperLib::Clipper::Execute
bool Execute(ClipType clipType, Paths &solution, PolyFillType fillType=pftEvenOdd)
Definition: clipper.cpp:1532
ClipperLib::PolyFillType
PolyFillType
Definition: clipper.hpp:70
ClipperLib::cInt
signed long long cInt
Definition: clipper.hpp:77
E
ClipperLib::ReverseHorizontal
void ReverseHorizontal(TEdge &e)
Definition: clipper.cpp:792
ClipperLib::TEdge::PrevInAEL
TEdge * PrevInAEL
Definition: clipper.cpp:117
ClipperLib::RemoveEdge
TEdge * RemoveEdge(TEdge *e)
Definition: clipper.cpp:781
ClipperLib::ClipperBase::m_edges
EdgeList m_edges
Definition: clipper.hpp:250
ClipperLib::ClipperBase::InsertScanbeam
void InsertScanbeam(const cInt Y)
Definition: clipper.cpp:1371
ClipperLib::ClipperBase::AddPath
virtual bool AddPath(const Path &pg, PolyType PolyTyp, bool Closed)
Definition: clipper.cpp:1081
ClipperLib::ClipperBase::LocalMinimaPending
bool LocalMinimaPending()
Definition: clipper.cpp:1501
ClipperLib::ClipperBase::DeleteFromAEL
void DeleteFromAEL(TEdge *e)
Definition: clipper.cpp:1403
ClipperLib::ClipperBase::DisposeAllOutRecs
void DisposeAllOutRecs()
Definition: clipper.cpp:1387
ClipperLib::ClipperBase::Reset
virtual void Reset()
Definition: clipper.cpp:1283
ClipperLib::ClipperBase::m_ActiveEdges
TEdge * m_ActiveEdges
Definition: clipper.hpp:254
ClipperLib::ClipperBase::m_PreserveCollinear
bool m_PreserveCollinear
Definition: clipper.hpp:251
ClipperLib::Clipper::Clipper
Clipper(int initOptions=0)
Definition: clipper.cpp:1510
ClipperLib::ptClip
@ ptClip
Definition: clipper.hpp:65
ClipperLib::ClipperBase::DisposeOutRec
void DisposeOutRec(PolyOutList::size_type index)
Definition: clipper.cpp:1394
ClipperLib::ClipperBase::Clear
virtual void Clear()
Definition: clipper.cpp:1269
ClipperLib::InitEdge2
void InitEdge2(TEdge &e, PolyType Pt)
Definition: clipper.cpp:765
ClipperLib::TEdge::Side
EdgeSide Side
Definition: clipper.cpp:108
ClipperLib::ClipperBase::GetBounds
IntRect GetBounds()
Definition: clipper.cpp:1331
ClipperLib::ClipperBase::ClipperBase
ClipperBase()
Definition: clipper.cpp:919
ClipperLib::Unassigned
static const int Unassigned
Definition: clipper.cpp:95
ClipperLib::PolyType
PolyType
Definition: clipper.hpp:65
ClipperLib::esRight
@ esRight
Definition: clipper.hpp:198
ClipperLib::ClipperBase::DisposeLocalMinimaList
void DisposeLocalMinimaList()
Definition: clipper.cpp:1315
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
ClipperLib::ClipperBase::m_CurrentLM
MinimaList::iterator m_CurrentLM
Definition: clipper.hpp:246
ClipperLib::ClipperBase::AddPaths
bool AddPaths(const Paths &ppg, PolyType PolyTyp, bool Closed)
Definition: clipper.cpp:1260
ClipperLib::ClipperBase::ScanbeamList
std::priority_queue< cInt > ScanbeamList
Definition: clipper.hpp:256
ClipperLib::InitEdge
void InitEdge(TEdge *e, TEdge *eNext, TEdge *ePrev, const IntPoint &Pt)
Definition: clipper.cpp:755
ClipperLib::TEdge::NextInLML
TEdge * NextInLML
Definition: clipper.cpp:115
ClipperLib::IsHorizontal
bool IsHorizontal(TEdge &e)
Definition: clipper.cpp:614
ClipperLib::Skip
static const int Skip
Definition: clipper.cpp:96
ClipperLib::esLeft
@ esLeft
Definition: clipper.hpp:198
ClipperLib::ClipperBase::m_Scanbeam
ScanbeamList m_Scanbeam
Definition: clipper.hpp:257
ClipperLib::ClipperBase::m_PolyOuts
PolyOutList m_PolyOuts
Definition: clipper.hpp:253
ClipperLib::Pt2IsBetweenPt1AndPt3
bool Pt2IsBetweenPt1AndPt3(const IntPoint pt1, const IntPoint pt2, const IntPoint pt3)
Definition: clipper.cpp:896
convert.int
int
Definition: convert.py:64
ClipperLib::ClipType
ClipType
Definition: clipper.hpp:64
ClipperLib::ClipperBase::m_MinimaList
MinimaList m_MinimaList
Definition: clipper.hpp:247