From 7236439c5a98db89b8b8e2732466649d15b16b41 Mon Sep 17 00:00:00 2001 From: clifford Date: Wed, 22 Jul 2009 10:11:18 +0000 Subject: Clifford Wolf: Skip degenerated facets in polyset (they may be produces during dxf tesselation) git-svn-id: http://svn.clifford.at/openscad/trunk@67 b57f626f-c46c-0410-a088-ec61d464b74c diff --git a/polyset.cc b/polyset.cc index bd2a085..3a697e5 100644 --- a/polyset.cc +++ b/polyset.cc @@ -225,7 +225,17 @@ public: for (int i = 0; i < ps->polygons.size(); i++) { const PolySet::Polygon *poly = &ps->polygons[i]; - B.begin_facet(); + QHash fc; + bool facet_is_degenerated = false; + for (int j = 0; j < poly->size(); j++) { + const PolySet::Point *p = &poly->at(j); + int v = vertices_idx.data(p->x, p->y, p->z); + if (fc[v]++ > 0) + facet_is_degenerated = true; + } + + if (!facet_is_degenerated) + B.begin_facet(); #ifdef GEN_SURFACE_DEBUG printf("F:"); #endif @@ -234,12 +244,16 @@ public: #ifdef GEN_SURFACE_DEBUG printf(" %d", vertices_idx.data(p->x, p->y, p->z)); #endif - B.add_vertex_to_facet(vertices_idx.data(p->x, p->y, p->z)); + if (!facet_is_degenerated) + B.add_vertex_to_facet(vertices_idx.data(p->x, p->y, p->z)); } #ifdef GEN_SURFACE_DEBUG + if (facet_is_degenerated) + printf(" (degenerated)\n"); printf("\n"); #endif - B.end_facet(); + if (!facet_is_degenerated) + B.end_facet(); } #ifdef GEN_SURFACE_DEBUG -- cgit v0.10.1