7
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:
jean-pierre charras 2024-12-01 09:38:49 +01:00
parent 13625daeca
commit d3bcc81d5d
2 changed files with 36 additions and 52 deletions
libs/kimath
include/geometry
src/geometry

View File

@ -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 ) +

View File

@ -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;