KiCad PCB EDA Suite
Loading...
Searching...
No Matches
shape_poly_set.cpp File Reference
#include <algorithm>
#include <assert.h>
#include <cmath>
#include <cstdio>
#include <istream>
#include <limits>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <thread>
#include <utility>
#include <vector>
#include <array>
#include <clipper2/clipper.h>
#include <geometry/geometry_predicates.h>
#include <geometry/geometry_utils.h>
#include <geometry/polygon_triangulation.h>
#include <geometry/seg.h>
#include <geometry/shape.h>
#include <geometry/shape_line_chain.h>
#include <geometry/shape_poly_set.h>
#include <geometry/segment_index.h>
#include <math/box2.h>
#include <math/util.h>
#include <math/vector2d.h>
#include <hash.h>
#include <mmh3_hash.h>
#include <geometry/shape_segment.h>
#include <geometry/shape_circle.h>
#include <geometry/fracture_edge_index_utils.h>
#include <wx/log.h>

Go to the source code of this file.

Classes

struct  FractureEdge
 
class  FRACTURE_EDGE_INDEX
 
struct  FRACTURE_EDGE_INDEX::NODE
 
struct  FractureEdgeSlow
 

Macros

#define TRIANGULATESIMPLIFICATIONLEVEL   ADVANCED_CFG::GetCfg().m_TriangulateSimplificationLevel
 
#define ENABLECACHEFRIENDLYFRACTURE   ADVANCED_CFG::GetCfg().m_EnableCacheFriendlyFracture
 
#define ENABLEFRACTUREEDGEINDEX   ADVANCED_CFG::GetCfg().m_EnableFractureEdgeIndex
 
#define SEG_CNT_MAX   64
 
#define SEG_CNT_MAX   64
 

Typedefs

typedef std::vector< FractureEdge > FractureEdgeSet
 
typedef std::vector< FractureEdgeSlow * > FractureEdgeSetSlow
 

Functions

static bool splitAtBridges (const SHAPE_LINE_CHAIN &aChain, std::vector< SHAPE_LINE_CHAIN > &aRings)
 Split a closed ring into the rings left once pairs of coincident opposite edges are removed.
 
static int fractureIntersectX (const FractureEdge &aEdge, int aY)
 
static FractureEdge * processHole (FractureEdgeSet &edges, FractureEdge::Index provokingIndex, FractureEdge::Index edgeIndex, FractureEdge::Index bridgeIndex, FRACTURE_EDGE_INDEX *aIndex)
 
static void fractureSingleCacheFriendly (SHAPE_POLY_SET::POLYGON &paths)
 
static int processEdge (FractureEdgeSetSlow &edges, FractureEdgeSlow *edge)
 
static void fractureSingleSlow (SHAPE_POLY_SET::POLYGON &paths)
 

Macro Definition Documentation

◆ ENABLECACHEFRIENDLYFRACTURE

#define ENABLECACHEFRIENDLYFRACTURE   ADVANCED_CFG::GetCfg().m_EnableCacheFriendlyFracture

Definition at line 72 of file shape_poly_set.cpp.

Referenced by SHAPE_POLY_SET::fractureSingle().

◆ ENABLEFRACTUREEDGEINDEX

#define ENABLEFRACTUREEDGEINDEX   ADVANCED_CFG::GetCfg().m_EnableFractureEdgeIndex

Definition at line 73 of file shape_poly_set.cpp.

Referenced by fractureSingleCacheFriendly().

◆ SEG_CNT_MAX [1/2]

#define SEG_CNT_MAX   64

◆ SEG_CNT_MAX [2/2]

#define SEG_CNT_MAX   64

◆ TRIANGULATESIMPLIFICATIONLEVEL

#define TRIANGULATESIMPLIFICATIONLEVEL   ADVANCED_CFG::GetCfg().m_TriangulateSimplificationLevel

Definition at line 71 of file shape_poly_set.cpp.

Typedef Documentation

◆ FractureEdgeSet

typedef std::vector<FractureEdge> FractureEdgeSet

Definition at line 1388 of file shape_poly_set.cpp.

◆ FractureEdgeSetSlow

typedef std::vector<FractureEdgeSlow*> FractureEdgeSetSlow

Definition at line 1924 of file shape_poly_set.cpp.

Function Documentation

◆ fractureIntersectX()

static int fractureIntersectX ( const FractureEdge & aEdge,
int aY )
inlinestatic

◆ fractureSingleCacheFriendly()

◆ fractureSingleSlow()

◆ processEdge()

◆ processHole()

◆ splitAtBridges()

static bool splitAtBridges ( const SHAPE_LINE_CHAIN & aChain,
std::vector< SHAPE_LINE_CHAIN > & aRings )
static

Split a closed ring into the rings left once pairs of coincident opposite edges are removed.

Fracture() joins holes to their outline through such pairs.

Returns
false, leaving aRings empty, when the ring holds no pair.

Definition at line 769 of file shape_poly_set.cpp.

References SHAPE_LINE_CHAIN::Append(), SHAPE_LINE_CHAIN::CPoints(), hash_combine(), next(), operator==(), partner, SHAPE_LINE_CHAIN::PointCount(), and SHAPE_LINE_CHAIN::SetClosed().

Referenced by SHAPE_POLY_SET::appendBridgeFreePaths(), and SHAPE_POLY_SET::unfractureSingle().