From: curt Date: Fri, 19 Mar 1999 00:27:09 +0000 (+0000) Subject: Continued work on triangulation preparation. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=7f2ab3559b4218a4e43e28094e26c62fe8b78357;p=flightgear.git Continued work on triangulation preparation. --- diff --git a/Triangulate/Makefile.am b/Triangulate/Makefile.am index 503e359b2..f28601c0d 100644 --- a/Triangulate/Makefile.am +++ b/Triangulate/Makefile.am @@ -7,4 +7,5 @@ libTriangulate_a_SOURCES = \ INCLUDES += \ -I$(top_builddir) \ -I$(top_builddir)/Lib \ + -I$(top_builddir)/Tools/Lib \ -I$(top_builddir)/Tools/Construct diff --git a/Triangulate/triangle.cxx b/Triangulate/triangle.cxx index 992549214..1d90cbfbe 100644 --- a/Triangulate/triangle.cxx +++ b/Triangulate/triangle.cxx @@ -37,6 +37,9 @@ FGTriangle::~FGTriangle( void ) { // populate this class based on the specified gpc_polys list int FGTriangle::build( const FGgpcPolyList& gpc_polys ) { + int index; + tripoly poly; + // traverse the gpc_polys and build a unified node list and a set // of Triangle PSLG that reference the node list by index // (starting at zero) @@ -47,29 +50,52 @@ int FGTriangle::build( const FGgpcPolyList& gpc_polys ) { // process polygons in priority order cout << "prepairing node list and polygons" << endl; - for ( int i = 0; i < FG_MAX_AREAS; ++i ) { + for ( int i = 0; i < FG_MAX_AREA_TYPES; ++i ) { cout << "area type = " << i << endl; current = gpc_polys.polys[i].begin(); last = gpc_polys.polys[i].end(); for ( ; current != last; ++current ) { gpc_poly = *current; + cout << "processing a polygon, contours = " + << gpc_poly->num_contours << endl; + + poly.erase(poly.begin(), poly.end()); + + if (gpc_poly->num_contours <= 0 ) { + cout << "FATAL ERROR! no contours in this polygon" << endl; + exit(-1); + } + + if (gpc_poly->num_contours > 1 ) { + cout << "FATAL ERROR! no multi-contour support" << endl; + exit(-1); + } for ( int j = 0; j < gpc_poly->num_contours; j++ ) { for ( int k = 0; k < gpc_poly->contour[j].num_vertices; k++ ) { Point3D p( gpc_poly->contour[j].vertex[k].x, gpc_poly->contour[j].vertex[k].y, 0 ); - cout << trinodes.unique_add( p ) << endl; + index = trinodes.unique_add( p ); + poly.push_back(index); + // cout << index << endl; } + polylist[i].push_back(poly); } } } + for ( int i = 0; i < FG_MAX_AREA_TYPES; ++i ) { + cout << "polylist[" << i << "] = " << polylist[i].size() << endl; + } return 0; } // $Log$ +// Revision 1.3 1999/03/19 00:27:10 curt +// Continued work on triangulation preparation. +// // Revision 1.2 1999/03/18 04:31:11 curt // Let's not pass copies of huge structures on the stack ... ye might see a // segfault ... :-) diff --git a/Triangulate/triangle.hxx b/Triangulate/triangle.hxx index 1dbb85e24..9ba18005b 100644 --- a/Triangulate/triangle.hxx +++ b/Triangulate/triangle.hxx @@ -37,6 +37,7 @@ #include #include +#include #include "trinodes.hxx" @@ -47,7 +48,7 @@ typedef vector < int > tripoly; typedef tripoly::iterator tripoly_iterator; typedef tripoly::const_iterator const_tripoly_iterator; -typedef vector < int > tripoly_list; +typedef vector < tripoly > tripoly_list; typedef tripoly_list::iterator tripoly_list_iterator; typedef tripoly_list::const_iterator const_tripoly_list_iterator; @@ -57,7 +58,7 @@ class FGTriangle { private: FGTriNodes trinodes; - tripoly_list polylist; + tripoly_list polylist[FG_MAX_AREA_TYPES]; public: @@ -74,6 +75,9 @@ public: // $Log$ +// Revision 1.3 1999/03/19 00:27:11 curt +// Continued work on triangulation preparation. +// // Revision 1.2 1999/03/18 04:31:12 curt // Let's not pass copies of huge structures on the stack ... ye might see a // segfault ... :-) diff --git a/Triangulate/trinodes.cxx b/Triangulate/trinodes.cxx index 5c2508e00..82c2b6933 100644 --- a/Triangulate/trinodes.cxx +++ b/Triangulate/trinodes.cxx @@ -53,11 +53,14 @@ int FGTriNodes::unique_add( const Point3D& p ) { point_iterator current, last; int counter = 0; + // cout << p.x() << "," << p.y() << endl; + // see if point already exists current = point_list.begin(); last = point_list.end(); for ( ; current != last; ++current ) { if ( close_enough(p, *current) ) { + cout << "found an existing match!" << endl; return counter; } @@ -72,6 +75,9 @@ int FGTriNodes::unique_add( const Point3D& p ) { // $Log$ +// Revision 1.2 1999/03/19 00:27:12 curt +// Continued work on triangulation preparation. +// // Revision 1.1 1999/03/17 23:52:00 curt // Initial revision. //