mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-20 00:21:31 +00:00
libkimath: fix a link issue on mingw/msys2 build.
Remove option "use Clipper1" (now outdated) on all platforms. Use of advanced config created the issue, so it is just disabled on msys2. Should not change anything on other platforms.
This commit is contained in:
parent
13625daeca
commit
d3bcc81d5d
libs/kimath
@ -60,12 +60,23 @@
|
||||
|
||||
#include <wx/log.h>
|
||||
|
||||
// ADVANCED_CFG::GetCfg() cannot be used on msys2/mingw builds (link failure)
|
||||
// So we use the ADVANCED_CFG default values
|
||||
#if defined( __MINGW32__ )
|
||||
#define TRIANGULATESIMPLIFICATIONLEVEL 50
|
||||
#define TRIANGULATEMINIMUMAREA 1000
|
||||
#else
|
||||
#define TRIANGULATESIMPLIFICATIONLEVEL ADVANCED_CFG::GetCfg().m_TriangulateSimplificationLevel
|
||||
#define TRIANGULATEMINIMUMAREA ADVANCED_CFG::GetCfg().m_TriangulateMinimumArea
|
||||
#endif
|
||||
|
||||
#define TRIANGULATE_TRACE "triangulate"
|
||||
|
||||
class POLYGON_TRIANGULATION : public VERTEX_SET
|
||||
{
|
||||
public:
|
||||
POLYGON_TRIANGULATION( SHAPE_POLY_SET::TRIANGULATED_POLYGON& aResult ) :
|
||||
VERTEX_SET( ADVANCED_CFG::GetCfg().m_TriangulateSimplificationLevel ),
|
||||
VERTEX_SET( TRIANGULATESIMPLIFICATIONLEVEL ),
|
||||
m_vertices_original_size( 0 ), m_result( aResult )
|
||||
{};
|
||||
|
||||
@ -181,7 +192,7 @@ private:
|
||||
VERTEX* retval = aStart;
|
||||
int count = 0;
|
||||
|
||||
double sq_dist = ADVANCED_CFG::GetCfg().m_TriangulateSimplificationLevel;
|
||||
double sq_dist = TRIANGULATESIMPLIFICATIONLEVEL;
|
||||
sq_dist *= sq_dist;
|
||||
|
||||
do
|
||||
@ -427,7 +438,7 @@ private:
|
||||
* At this point, our polygon should be fully tessellated.
|
||||
*/
|
||||
if( aPoint->prev != aPoint->next )
|
||||
return std::abs( aPoint->area() ) > ADVANCED_CFG::GetCfg().m_TriangulateMinimumArea;
|
||||
return std::abs( aPoint->area() ) > TRIANGULATEMINIMUMAREA;
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -439,7 +450,7 @@ private:
|
||||
|
||||
bool isTooSmall( const VERTEX* aPoint ) const
|
||||
{
|
||||
double min_area = ADVANCED_CFG::GetCfg().m_TriangulateMinimumArea;
|
||||
double min_area = TRIANGULATEMINIMUMAREA;
|
||||
double prev_sq_len = ( aPoint->prev->x - aPoint->x ) * ( aPoint->prev->x - aPoint->x ) +
|
||||
( aPoint->prev->y - aPoint->y ) * ( aPoint->prev->y - aPoint->y );
|
||||
double next_sq_len = ( aPoint->next->x - aPoint->x ) * ( aPoint->next->x - aPoint->x ) +
|
||||
|
@ -42,7 +42,6 @@
|
||||
#include <utility> // for swap, move
|
||||
#include <vector>
|
||||
|
||||
#include <clipper.hpp> // for Clipper, PolyNode, Clipp...
|
||||
#include <clipper2/clipper.h>
|
||||
#include <geometry/geometry_utils.h>
|
||||
#include <geometry/polygon_triangulation.h>
|
||||
@ -63,6 +62,15 @@
|
||||
|
||||
#include <wx/log.h>
|
||||
|
||||
// ADVANCED_CFG::GetCfg() cannot be used on msys2/mingw builds (link failure)
|
||||
// So we use the ADVANCED_CFG default values
|
||||
#if defined( __MINGW32__ )
|
||||
#define TRIANGULATESIMPLIFICATIONLEVEL 50
|
||||
#define ENABLECACHEFRIENDLYFRACTURE true
|
||||
#else
|
||||
#define TRIANGULATESIMPLIFICATIONLEVEL ADVANCED_CFG::GetCfg().m_TriangulateSimplificationLevel
|
||||
#define ENABLECACHEFRIENDLYFRACTURE ADVANCED_CFG::GetCfg().m_EnableCacheFriendlyFracture
|
||||
#endif
|
||||
|
||||
SHAPE_POLY_SET::SHAPE_POLY_SET() :
|
||||
SHAPE( SH_POLY_SET )
|
||||
@ -964,77 +972,53 @@ void SHAPE_POLY_SET::booleanOp( Clipper2Lib::ClipType aType, const SHAPE_POLY_SE
|
||||
|
||||
void SHAPE_POLY_SET::BooleanAdd( const SHAPE_POLY_SET& b, POLYGON_MODE aFastMode )
|
||||
{
|
||||
if( ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
booleanOp( Clipper2Lib::ClipType::Union, b );
|
||||
else
|
||||
booleanOp( ClipperLib::ctUnion, b, aFastMode );
|
||||
booleanOp( Clipper2Lib::ClipType::Union, b );
|
||||
}
|
||||
|
||||
|
||||
void SHAPE_POLY_SET::BooleanSubtract( const SHAPE_POLY_SET& b, POLYGON_MODE aFastMode )
|
||||
{
|
||||
if( ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
booleanOp( Clipper2Lib::ClipType::Difference, b );
|
||||
else
|
||||
booleanOp( ClipperLib::ctDifference, b, aFastMode );
|
||||
booleanOp( Clipper2Lib::ClipType::Difference, b );
|
||||
}
|
||||
|
||||
|
||||
void SHAPE_POLY_SET::BooleanIntersection( const SHAPE_POLY_SET& b, POLYGON_MODE aFastMode )
|
||||
{
|
||||
if( ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
booleanOp( Clipper2Lib::ClipType::Intersection, b );
|
||||
else
|
||||
booleanOp( ClipperLib::ctIntersection, b, aFastMode );
|
||||
booleanOp( Clipper2Lib::ClipType::Intersection, b );
|
||||
}
|
||||
|
||||
|
||||
void SHAPE_POLY_SET::BooleanXor( const SHAPE_POLY_SET& b, POLYGON_MODE aFastMode )
|
||||
{
|
||||
if( ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
booleanOp( Clipper2Lib::ClipType::Xor, b );
|
||||
else
|
||||
booleanOp( ClipperLib::ctXor, b, aFastMode );
|
||||
booleanOp( Clipper2Lib::ClipType::Xor, b );
|
||||
}
|
||||
|
||||
|
||||
void SHAPE_POLY_SET::BooleanAdd( const SHAPE_POLY_SET& a, const SHAPE_POLY_SET& b,
|
||||
POLYGON_MODE aFastMode )
|
||||
{
|
||||
if( ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
booleanOp( Clipper2Lib::ClipType::Union, a, b );
|
||||
else
|
||||
booleanOp( ClipperLib::ctUnion, a, b, aFastMode );
|
||||
booleanOp( Clipper2Lib::ClipType::Union, a, b );
|
||||
}
|
||||
|
||||
|
||||
void SHAPE_POLY_SET::BooleanSubtract( const SHAPE_POLY_SET& a, const SHAPE_POLY_SET& b,
|
||||
POLYGON_MODE aFastMode )
|
||||
{
|
||||
if( ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
booleanOp( Clipper2Lib::ClipType::Difference, a, b );
|
||||
else
|
||||
booleanOp( ClipperLib::ctDifference, a, b, aFastMode );
|
||||
booleanOp( Clipper2Lib::ClipType::Difference, a, b );
|
||||
}
|
||||
|
||||
|
||||
void SHAPE_POLY_SET::BooleanIntersection( const SHAPE_POLY_SET& a, const SHAPE_POLY_SET& b,
|
||||
POLYGON_MODE aFastMode )
|
||||
{
|
||||
if( ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
booleanOp( Clipper2Lib::ClipType::Intersection, a, b );
|
||||
else
|
||||
booleanOp( ClipperLib::ctIntersection, a, b, aFastMode );
|
||||
booleanOp( Clipper2Lib::ClipType::Intersection, a, b );
|
||||
}
|
||||
|
||||
|
||||
void SHAPE_POLY_SET::BooleanXor( const SHAPE_POLY_SET& a, const SHAPE_POLY_SET& b,
|
||||
POLYGON_MODE aFastMode )
|
||||
{
|
||||
if( ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
booleanOp( Clipper2Lib::ClipType::Xor, a, b );
|
||||
else
|
||||
booleanOp( ClipperLib::ctXor, a, b, aFastMode );
|
||||
booleanOp( Clipper2Lib::ClipType::Xor, a, b );
|
||||
}
|
||||
|
||||
|
||||
@ -1344,10 +1328,7 @@ void SHAPE_POLY_SET::Inflate( int aAmount, CORNER_STRATEGY aCornerStrategy, int
|
||||
{
|
||||
int segCount = GetArcToSegmentCount( std::abs( aAmount ), aMaxError, FULL_CIRCLE );
|
||||
|
||||
if( ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
inflate2( aAmount, segCount, aCornerStrategy, aSimplify );
|
||||
else
|
||||
inflate1( aAmount, segCount, aCornerStrategy );
|
||||
inflate2( aAmount, segCount, aCornerStrategy, aSimplify );
|
||||
}
|
||||
|
||||
|
||||
@ -1899,7 +1880,7 @@ static void fractureSingleSlow( SHAPE_POLY_SET::POLYGON& paths )
|
||||
|
||||
void SHAPE_POLY_SET::fractureSingle( POLYGON& paths )
|
||||
{
|
||||
if( ADVANCED_CFG::GetCfg().m_EnableCacheFriendlyFracture )
|
||||
if( ENABLECACHEFRIENDLYFRACTURE )
|
||||
return fractureSingleCacheFriendly( paths );
|
||||
fractureSingleSlow( paths );
|
||||
}
|
||||
@ -2109,10 +2090,7 @@ void SHAPE_POLY_SET::Simplify( POLYGON_MODE aFastMode )
|
||||
{
|
||||
SHAPE_POLY_SET empty;
|
||||
|
||||
if( ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
booleanOp( Clipper2Lib::ClipType::Union, empty );
|
||||
else
|
||||
booleanOp( ClipperLib::ctUnion, empty, aFastMode );
|
||||
booleanOp( Clipper2Lib::ClipType::Union, empty );
|
||||
}
|
||||
|
||||
|
||||
@ -3296,14 +3274,9 @@ void SHAPE_POLY_SET::cacheTriangulation( bool aPartition, bool aSimplify,
|
||||
}
|
||||
else if( pass == 2 )
|
||||
{
|
||||
polySet.SimplifyOutlines(
|
||||
ADVANCED_CFG::GetCfg().m_TriangulateSimplificationLevel );
|
||||
polySet.SimplifyOutlines( TRIANGULATESIMPLIFICATIONLEVEL );
|
||||
}
|
||||
// In Clipper2, there is only one type of simplification
|
||||
else if( pass == 3 && !ADVANCED_CFG::GetCfg().m_UseClipper2 )
|
||||
{
|
||||
polySet.Fracture( PM_STRICTLY_SIMPLE );
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user