hopefully fix windows build
This commit is contained in:
parent
01814b3e3e
commit
512693f001
4 changed files with 44 additions and 46 deletions
|
@ -296,8 +296,6 @@ void LinearFeature::ConvertContour( BezContour* src, bool closed )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// calculate linear distance to determine how many segments we want
|
// calculate linear distance to determine how many segments we want
|
||||||
Point3D destLoc = nextNode->GetLoc();
|
|
||||||
|
|
||||||
if (num_segs > 1)
|
if (num_segs > 1)
|
||||||
{
|
{
|
||||||
for (int p=0; p<num_segs; p++)
|
for (int p=0; p<num_segs; p++)
|
||||||
|
|
|
@ -93,7 +93,7 @@ public:
|
||||||
|
|
||||||
int Finish( bool closed, unsigned int idx );
|
int Finish( bool closed, unsigned int idx );
|
||||||
int BuildBtg( float alt_m, superpoly_list* line_polys, texparams_list* line_tps, ClipPolyType* line_accum, superpoly_list* lights, bool debug );
|
int BuildBtg( float alt_m, superpoly_list* line_polys, texparams_list* line_tps, ClipPolyType* line_accum, superpoly_list* lights, bool debug );
|
||||||
int BuildBtg( float alt_m, superpoly_list* line_polys, texparams_list* line_tps, Polygons* line_accum, superpoly_list* lights );
|
// int BuildBtg( float alt_m, superpoly_list* line_polys, texparams_list* line_tps, ClipPolyType* line_accum, superpoly_list* lights );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Point3D OffsetPointFirst( Point3D *cur, Point3D *next, double offset_by );
|
Point3D OffsetPointFirst( Point3D *cur, Point3D *next, double offset_by );
|
||||||
|
|
|
@ -165,13 +165,15 @@ double tgPolygonCalcAngle(point2d a, point2d b, point2d c) {
|
||||||
double TGPolygon::area_contour( const int contour ) const {
|
double TGPolygon::area_contour( const int contour ) const {
|
||||||
point_list c = poly[contour];
|
point_list c = poly[contour];
|
||||||
double area = 0.0;
|
double area = 0.0;
|
||||||
int i, j;
|
unsigned int i, j;
|
||||||
|
|
||||||
|
if (c.size()) {
|
||||||
j = c.size() - 1;
|
j = c.size() - 1;
|
||||||
for (i=0; i<c.size(); i++) {
|
for (i=0; i<c.size(); i++) {
|
||||||
area += (c[j].x() + c[i].x()) * (c[j].y() - c[i].y());
|
area += (c[j].x() + c[i].x()) * (c[j].y() - c[i].y());
|
||||||
j=i;
|
j=i;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return fabs(area * 0.5);
|
return fabs(area * 0.5);
|
||||||
}
|
}
|
||||||
|
@ -483,17 +485,17 @@ TGPolygon polygon_clip( clip_op poly_op, const TGPolygon& subject,
|
||||||
#define FIXEDPT (10000000000000000)
|
#define FIXEDPT (10000000000000000)
|
||||||
#define FIXED1M ( 90090)
|
#define FIXED1M ( 90090)
|
||||||
|
|
||||||
IntPoint MakeClipperPoint( Point3D pt )
|
static ClipperLib::IntPoint MakeClipperPoint( Point3D pt )
|
||||||
{
|
{
|
||||||
long64 x, y;
|
ClipperLib::long64 x, y;
|
||||||
|
|
||||||
x = (long64)( pt.x() * FIXEDPT );
|
x = (ClipperLib::long64)( pt.x() * FIXEDPT );
|
||||||
y = (long64)( pt.y() * FIXEDPT );
|
y = (ClipperLib::long64)( pt.y() * FIXEDPT );
|
||||||
|
|
||||||
return IntPoint( x, y );
|
return ClipperLib::IntPoint( x, y );
|
||||||
}
|
}
|
||||||
|
|
||||||
Point3D MakeTGPoint( IntPoint pt )
|
static Point3D MakeTGPoint( ClipperLib::IntPoint pt )
|
||||||
{
|
{
|
||||||
Point3D tg_pt;
|
Point3D tg_pt;
|
||||||
double x, y;
|
double x, y;
|
||||||
|
@ -515,9 +517,9 @@ double MakeClipperDelta( double mDelta )
|
||||||
return( cDelta );
|
return( cDelta );
|
||||||
}
|
}
|
||||||
|
|
||||||
void make_clipper_poly( const TGPolygon& in, Polygons *out )
|
void make_clipper_poly( const TGPolygon& in, ClipperLib::Polygons *out )
|
||||||
{
|
{
|
||||||
Polygon contour;
|
ClipperLib::Polygon contour;
|
||||||
Point3D p;
|
Point3D p;
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
|
@ -548,20 +550,20 @@ void make_clipper_poly( const TGPolygon& in, Polygons *out )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void make_tg_poly_from_clipper_ex( const ExPolygons& in, TGPolygon *out )
|
void make_tg_poly_from_clipper_ex( const ClipperLib::ExPolygons& in, TGPolygon *out )
|
||||||
{
|
{
|
||||||
int res_contour = 0;
|
int res_contour = 0;
|
||||||
out->erase();
|
out->erase();
|
||||||
|
|
||||||
for (unsigned int i=0; i<in.size(); i++)
|
for (unsigned int i=0; i<in.size(); i++)
|
||||||
{
|
{
|
||||||
const struct ExPolygon* pg = &in[i];
|
const struct ClipperLib::ExPolygon* pg = &in[i];
|
||||||
IntPoint ip;
|
ClipperLib::IntPoint ip;
|
||||||
|
|
||||||
// Get the boundary contour
|
// Get the boundary contour
|
||||||
for (unsigned int j = 0; j < pg->outer.size(); j++)
|
for (unsigned int j = 0; j < pg->outer.size(); j++)
|
||||||
{
|
{
|
||||||
ip = IntPoint( pg->outer[j].X, pg->outer[j].Y );
|
ip = ClipperLib::IntPoint( pg->outer[j].X, pg->outer[j].Y );
|
||||||
out->add_node(res_contour, MakeTGPoint(ip));
|
out->add_node(res_contour, MakeTGPoint(ip));
|
||||||
}
|
}
|
||||||
out->set_hole_flag(res_contour, 0);
|
out->set_hole_flag(res_contour, 0);
|
||||||
|
@ -572,7 +574,7 @@ void make_tg_poly_from_clipper_ex( const ExPolygons& in, TGPolygon *out )
|
||||||
{
|
{
|
||||||
for (unsigned int k = 0; k < pg->holes[j].size(); k++)
|
for (unsigned int k = 0; k < pg->holes[j].size(); k++)
|
||||||
{
|
{
|
||||||
ip = IntPoint( pg->holes[j].at(k).X, pg->holes[j].at(k).Y );
|
ip = ClipperLib::IntPoint( pg->holes[j].at(k).X, pg->holes[j].at(k).Y );
|
||||||
out->add_node(res_contour, MakeTGPoint(ip));
|
out->add_node(res_contour, MakeTGPoint(ip));
|
||||||
}
|
}
|
||||||
out->set_hole_flag(res_contour, 1);
|
out->set_hole_flag(res_contour, 1);
|
||||||
|
@ -581,18 +583,18 @@ void make_tg_poly_from_clipper_ex( const ExPolygons& in, TGPolygon *out )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void make_tg_poly_from_clipper( const Polygons& in, TGPolygon *out )
|
void make_tg_poly_from_clipper( const ClipperLib::Polygons& in, TGPolygon *out )
|
||||||
{
|
{
|
||||||
out->erase();
|
out->erase();
|
||||||
|
|
||||||
// for each polygon, we need to check the orientation, to set the hole flag...
|
// for each polygon, we need to check the orientation, to set the hole flag...
|
||||||
for (unsigned int i=0; i<in.size(); i++)
|
for (unsigned int i=0; i<in.size(); i++)
|
||||||
{
|
{
|
||||||
IntPoint ip;
|
ClipperLib::IntPoint ip;
|
||||||
|
|
||||||
for (unsigned int j = 0; j < in[i].size(); j++)
|
for (unsigned int j = 0; j < in[i].size(); j++)
|
||||||
{
|
{
|
||||||
ip = IntPoint( in[i][j].X, in[i][j].Y );
|
ip = ClipperLib::IntPoint( in[i][j].X, in[i][j].Y );
|
||||||
//SG_LOG(SG_GENERAL, SG_INFO, "Building TG Poly : Add point (" << ip.X << "," << ip.Y << ") to contour " << i );
|
//SG_LOG(SG_GENERAL, SG_INFO, "Building TG Poly : Add point (" << ip.X << "," << ip.Y << ") to contour " << i );
|
||||||
out->add_node( i, MakeTGPoint(ip) );
|
out->add_node( i, MakeTGPoint(ip) );
|
||||||
}
|
}
|
||||||
|
@ -607,14 +609,14 @@ void make_tg_poly_from_clipper( const Polygons& in, TGPolygon *out )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Polygons clipper_simplify( ExPolygons &in )
|
ClipperLib::Polygons clipper_simplify( ClipperLib::ExPolygons &in )
|
||||||
{
|
{
|
||||||
Polygons out;
|
ClipperLib::Polygons out;
|
||||||
Polygon contour;
|
ClipperLib::Polygon contour;
|
||||||
|
|
||||||
for (unsigned int i=0; i<in.size(); i++)
|
for (unsigned int i=0; i<in.size(); i++)
|
||||||
{
|
{
|
||||||
const struct ExPolygon* pg = &in[i];
|
const struct ClipperLib::ExPolygon* pg = &in[i];
|
||||||
|
|
||||||
// first the boundary
|
// first the boundary
|
||||||
contour = pg->outer;
|
contour = pg->outer;
|
||||||
|
@ -644,36 +646,36 @@ TGPolygon polygon_clip_clipper( clip_op poly_op, const TGPolygon& subject, const
|
||||||
{
|
{
|
||||||
TGPolygon result;
|
TGPolygon result;
|
||||||
|
|
||||||
Polygons clipper_subject;
|
ClipperLib::Polygons clipper_subject;
|
||||||
make_clipper_poly( subject, &clipper_subject );
|
make_clipper_poly( subject, &clipper_subject );
|
||||||
|
|
||||||
Polygons clipper_clip;
|
ClipperLib::Polygons clipper_clip;
|
||||||
make_clipper_poly( clip, &clipper_clip );
|
make_clipper_poly( clip, &clipper_clip );
|
||||||
|
|
||||||
ExPolygons clipper_result;
|
ClipperLib::ExPolygons clipper_result;
|
||||||
|
|
||||||
ClipType op;
|
ClipperLib::ClipType op;
|
||||||
if ( poly_op == POLY_DIFF ) {
|
if ( poly_op == POLY_DIFF ) {
|
||||||
op = ctDifference;
|
op = ClipperLib::ctDifference;
|
||||||
} else if ( poly_op == POLY_INT ) {
|
} else if ( poly_op == POLY_INT ) {
|
||||||
op = ctIntersection;
|
op = ClipperLib::ctIntersection;
|
||||||
} else if ( poly_op == POLY_XOR ) {
|
} else if ( poly_op == POLY_XOR ) {
|
||||||
op = ctXor;
|
op = ClipperLib::ctXor;
|
||||||
} else if ( poly_op == POLY_UNION ) {
|
} else if ( poly_op == POLY_UNION ) {
|
||||||
op = ctUnion;
|
op = ClipperLib::ctUnion;
|
||||||
} else {
|
} else {
|
||||||
throw sg_exception("Unknown polygon op, exiting.");
|
throw sg_exception("Unknown polygon op, exiting.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Clipper c;
|
ClipperLib::Clipper c;
|
||||||
c.Clear();
|
c.Clear();
|
||||||
c.AddPolygons(clipper_subject, ptSubject);
|
c.AddPolygons(clipper_subject, ClipperLib::ptSubject);
|
||||||
c.AddPolygons(clipper_clip, ptClip);
|
c.AddPolygons(clipper_clip, ClipperLib::ptClip);
|
||||||
|
|
||||||
c.Execute(op, clipper_result, pftEvenOdd, pftEvenOdd);
|
c.Execute(op, clipper_result, ClipperLib::pftEvenOdd, ClipperLib::pftEvenOdd);
|
||||||
|
|
||||||
// verify each result is simple
|
// verify each result is simple
|
||||||
Polygons simple_result = clipper_simplify( clipper_result );
|
ClipperLib::Polygons simple_result = clipper_simplify( clipper_result );
|
||||||
|
|
||||||
make_tg_poly_from_clipper( simple_result, &result );
|
make_tg_poly_from_clipper( simple_result, &result );
|
||||||
|
|
||||||
|
@ -860,7 +862,7 @@ TGPolygon tgPolygonStripHoles( const TGPolygon &poly ) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrintClipperPoly( Polygons polys )
|
void PrintClipperPoly( ClipperLib::Polygons polys )
|
||||||
{
|
{
|
||||||
int nContours = polys.size();
|
int nContours = polys.size();
|
||||||
|
|
||||||
|
@ -880,7 +882,7 @@ TGPolygon tgPolygonExpand(const TGPolygon &poly, double delta)
|
||||||
{
|
{
|
||||||
TGPolygon result;
|
TGPolygon result;
|
||||||
|
|
||||||
Polygons clipper_src, clipper_dst;
|
ClipperLib::Polygons clipper_src, clipper_dst;
|
||||||
|
|
||||||
make_clipper_poly( poly, &clipper_src );
|
make_clipper_poly( poly, &clipper_src );
|
||||||
|
|
||||||
|
@ -901,7 +903,7 @@ TGPolygon tgPolygonExpand(const TGPolygon &poly, double delta)
|
||||||
TGPolygon tgPolygonSimplify(const TGPolygon &poly)
|
TGPolygon tgPolygonSimplify(const TGPolygon &poly)
|
||||||
{
|
{
|
||||||
TGPolygon result;
|
TGPolygon result;
|
||||||
Polygons clipper_poly;
|
ClipperLib::Polygons clipper_poly;
|
||||||
|
|
||||||
make_clipper_poly( poly, &clipper_poly );
|
make_clipper_poly( poly, &clipper_poly );
|
||||||
|
|
||||||
|
|
|
@ -57,8 +57,6 @@ extern "C" {
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "clipper.hpp"
|
#include "clipper.hpp"
|
||||||
using namespace ClipperLib;
|
|
||||||
|
|
||||||
#define FG_MAX_VERTICES 1500000
|
#define FG_MAX_VERTICES 1500000
|
||||||
|
|
||||||
typedef TGPolygon ClipPolyType;
|
typedef TGPolygon ClipPolyType;
|
||||||
|
|
Loading…
Reference in a new issue