Revision: 73216
http://sourceforge.net/p/brlcad/code/73216
Author: starseeker
Date: 2019-05-31 17:39:02 +0000 (Fri, 31 May 2019)
Log Message:
-----------
Start working on reorganizing the data groupings to be somewhat more face
centeric, so it's clear which data is local to the face and which is not.
Untested.
Modified Paths:
--------------
brlcad/trunk/src/libbrep/cdt.cpp
brlcad/trunk/src/libbrep/cdt.h
brlcad/trunk/src/libbrep/cdt_edge.cpp
brlcad/trunk/src/libbrep/cdt_surf.cpp
brlcad/trunk/src/libbrep/cdt_util.cpp
Modified: brlcad/trunk/src/libbrep/cdt.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt.cpp 2019-05-31 11:12:44 UTC (rev 73215)
+++ brlcad/trunk/src/libbrep/cdt.cpp 2019-05-31 17:39:02 UTC (rev 73216)
@@ -141,9 +141,9 @@
triangles_first_pass(struct ON_Brep_CDT_State *s_cdt, struct on_brep_mesh_data
*md, int face_index)
{
ON_BrepFace &face = s_cdt->brep->m_F[face_index];
- p2t::CDT *cdt = s_cdt->p2t_faces[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *pointmap =
s_cdt->tri_to_on3_maps[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *normalmap =
s_cdt->tri_to_on3_norm_maps[face_index];
+ p2t::CDT *cdt = (*s_cdt->faces)[face_index]->cdt;
+ std::map<p2t::Point *, ON_3dPoint *> *pointmap =
(*s_cdt->faces)[face_index]->p2t_to_on3_map;
+ std::map<p2t::Point *, ON_3dPoint *> *normalmap =
(*s_cdt->faces)[face_index]->p2t_to_on3_norm_map;
std::vector<p2t::Triangle*> tris = cdt->GetTriangles();
md->triangle_cnt += tris.size();
for (size_t i = 0; i < tris.size(); i++) {
@@ -236,8 +236,8 @@
// edge segment length of the face to decide if a face is degenerate
// based on area.
fastf_t dist = 0.001 * (*s_cdt->min_edge_seg_len)[face_index];
- p2t::CDT *cdt = s_cdt->p2t_faces[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *pointmap =
s_cdt->tri_to_on3_maps[face_index];
+ p2t::CDT *cdt = (*s_cdt->faces)[face_index]->cdt;
+ std::map<p2t::Point *, ON_3dPoint *> *pointmap =
(*s_cdt->faces)[face_index]->p2t_to_on3_map;
std::vector<p2t::Triangle*> tris = cdt->GetTriangles();
for (size_t i = 0; i < tris.size(); i++) {
p2t::Triangle *t = tris[i];
@@ -283,12 +283,9 @@
p2t::Point *p2_B = t->GetPoint(1);
p2t::Point *p2_C = t->GetPoint(2);
- if (!s_cdt->face_degen_pnts[face_index]) {
- s_cdt->face_degen_pnts[face_index] = new std::set<p2t::Point *>;
- }
- s_cdt->face_degen_pnts[face_index]->insert(p2_A);
- s_cdt->face_degen_pnts[face_index]->insert(p2_B);
- s_cdt->face_degen_pnts[face_index]->insert(p2_C);
+ (*s_cdt->faces)[face_index]->degen_pnts->insert(p2_A);
+ (*s_cdt->faces)[face_index]->degen_pnts->insert(p2_B);
+ (*s_cdt->faces)[face_index]->degen_pnts->insert(p2_C);
/* If we have degeneracies along an edge, the impact is not
* local to this face but will also impact the other face.
@@ -298,21 +295,18 @@
ON_3dPoint *pt_B = (*pointmap)[p2_B];
ON_3dPoint *pt_C = (*pointmap)[p2_C];
std::set<BrepTrimPoint *>::iterator bit;
- std::set<BrepTrimPoint *> &pAt = s_cdt->on_brep_edge_pnts[pt_A];
- std::set<BrepTrimPoint *> &pBt = s_cdt->on_brep_edge_pnts[pt_B];
- std::set<BrepTrimPoint *> &pCt = s_cdt->on_brep_edge_pnts[pt_C];
+ std::set<BrepTrimPoint *> &pAt = (*s_cdt->on_brep_edge_pnts)[pt_A];
+ std::set<BrepTrimPoint *> &pBt = (*s_cdt->on_brep_edge_pnts)[pt_B];
+ std::set<BrepTrimPoint *> &pCt = (*s_cdt->on_brep_edge_pnts)[pt_C];
for (bit = pAt.begin(); bit != pAt.end(); bit++) {
BrepTrimPoint *tpt = *bit;
int f2ind =
s_cdt->brep->m_T[tpt->trim_ind].Face()->m_face_index;
if (f2ind != face_index) {
//bu_log("Pulls in face %d\n", f2ind);
- if (!s_cdt->face_degen_pnts[f2ind]) {
- s_cdt->face_degen_pnts[f2ind] = new std::set<p2t::Point
*>;
- }
- std::set<p2t::Point *> tri_pnts =
(*s_cdt->on3_to_tri_maps[f2ind])[pt_A];
+ std::set<p2t::Point *> tri_pnts =
(*(*s_cdt->faces)[face_index]->on3_to_tri_map)[pt_A];
std::set<p2t::Point *>::iterator tp_it;
for (tp_it = tri_pnts.begin(); tp_it != tri_pnts.end();
tp_it++) {
- s_cdt->face_degen_pnts[f2ind]->insert(*tp_it);
+ (*s_cdt->faces)[face_index]->degen_pnts->insert(*tp_it);
}
}
}
@@ -321,13 +315,10 @@
int f2ind =
s_cdt->brep->m_T[tpt->trim_ind].Face()->m_face_index;
if (f2ind != face_index) {
//bu_log("Pulls in face %d\n", f2ind);
- if (!s_cdt->face_degen_pnts[f2ind]) {
- s_cdt->face_degen_pnts[f2ind] = new std::set<p2t::Point
*>;
- }
- std::set<p2t::Point *> tri_pnts =
(*s_cdt->on3_to_tri_maps[f2ind])[pt_B];
+ std::set<p2t::Point *> tri_pnts =
(*(*s_cdt->faces)[face_index]->on3_to_tri_map)[pt_B];
std::set<p2t::Point *>::iterator tp_it;
for (tp_it = tri_pnts.begin(); tp_it != tri_pnts.end();
tp_it++) {
- s_cdt->face_degen_pnts[f2ind]->insert(*tp_it);
+ (*s_cdt->faces)[face_index]->degen_pnts->insert(*tp_it);
}
}
}
@@ -336,13 +327,10 @@
int f2ind =
s_cdt->brep->m_T[tpt->trim_ind].Face()->m_face_index;
if (f2ind != face_index) {
//bu_log("Pulls in face %d\n", f2ind);
- if (!s_cdt->face_degen_pnts[f2ind]) {
- s_cdt->face_degen_pnts[f2ind] = new std::set<p2t::Point
*>;
- }
- std::set<p2t::Point *> tri_pnts =
(*s_cdt->on3_to_tri_maps[f2ind])[pt_C];
+ std::set<p2t::Point *> tri_pnts =
(*(*s_cdt->faces)[face_index]->on3_to_tri_map)[pt_C];
std::set<p2t::Point *>::iterator tp_it;
for (tp_it = tri_pnts.begin(); tp_it != tri_pnts.end();
tp_it++) {
- s_cdt->face_degen_pnts[f2ind]->insert(*tp_it);
+ (*s_cdt->faces)[face_index]->degen_pnts->insert(*tp_it);
}
}
}
@@ -357,9 +345,9 @@
static void
triangles_incorrect_normals(struct ON_Brep_CDT_State *s_cdt, struct
on_brep_mesh_data *md, int face_index)
{
- p2t::CDT *cdt = s_cdt->p2t_faces[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *pointmap =
s_cdt->tri_to_on3_maps[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *normalmap =
s_cdt->tri_to_on3_norm_maps[face_index];
+ p2t::CDT *cdt = (*s_cdt->faces)[face_index]->cdt;
+ std::map<p2t::Point *, ON_3dPoint *> *pointmap =
(*s_cdt->faces)[face_index]->p2t_to_on3_map;
+ std::map<p2t::Point *, ON_3dPoint *> *normalmap =
(*s_cdt->faces)[face_index]->p2t_to_on3_norm_map;
std::vector<p2t::Triangle*> tris = cdt->GetTriangles();
for (size_t i = 0; i < tris.size(); i++) {
p2t::Triangle *t = tris[i];
@@ -389,9 +377,10 @@
if (invalid_face_normal == 3) {
int tind[3] = {-1, -1, -1};
int edge_pnt_cnt = 0;
+ std::map<p2t::Point *, int> *p2t_trim_ind =
(*s_cdt->faces)[face_index]->p2t_trim_ind;
for (int j = 0; j < 3; j++) {
- if (s_cdt->p2t_edge_points->find(p[j]) !=
s_cdt->p2t_edge_points->end()) {
- tind[j] = (*s_cdt->p2t_edge_points)[p[j]];
+ if (p2t_trim_ind->find(p[j]) != p2t_trim_ind->end()) {
+ tind[j] = (*p2t_trim_ind)[p[j]];
edge_pnt_cnt++;
}
}
@@ -404,7 +393,7 @@
bu_log("Tri p3: %f %f %f\n", (*pointmap)[t->GetPoint(2)]->x,
(*pointmap)[t->GetPoint(2)]->y, (*pointmap)[t->GetPoint(2)]->z);
bu_log("Tri center: %f %f %f\n", tri_cent.x, tri_cent.y,
tri_cent.z);
bu_log("Tri norm: %f %f %f\n", tdir.x, tdir.y, tdir.z);
- bu_log("edge trim: %d\n",
(*s_cdt->p2t_edge_points)[t->GetPoint(0)]);
+ bu_log("edge trim: %d\n", (*p2t_trim_ind)[t->GetPoint(0)]);
md->triangle_cnt--;
md->tris_degen.insert(t);
@@ -486,10 +475,10 @@
BrepTrimPoint btp;
const ON_BrepVertex& v1 = face.Brep()->m_V[trim->m_vi[0]];
ON_3dPoint *p3d = (*s_cdt->vert_pnts)[v1.m_vertex_index];
-
(*s_cdt->strim_pnts)[face.m_face_index].insert(std::make_pair(trim->m_trim_index,
p3d));
+
(*s_cdt->faces)[face.m_face_index]->strim_pnts->insert(std::make_pair(trim->m_trim_index,
p3d));
ON_3dPoint *n3d = (*s_cdt->vert_avg_norms)[v1.m_vertex_index];
if (n3d) {
-
(*s_cdt->strim_norms)[face.m_face_index].insert(std::make_pair(trim->m_trim_index,
n3d));
+
(*s_cdt->faces)[face.m_face_index]->strim_norms->insert(std::make_pair(trim->m_trim_index,
n3d));
}
double delta = trim->Domain().Length() / 10.0;
ON_Interval trim_dom = trim->Domain();
@@ -559,13 +548,14 @@
{
ON_RTree rt_trims;
ON_2dPointArray on_surf_points;
+ int face_index = face.m_face_index;
const ON_Surface *s = face.SurfaceOf();
int loop_cnt = face.LoopCount();
ON_2dPointArray on_loop_points;
ON_SimpleArray<BrepTrimPoint> *brep_loop_points = new
ON_SimpleArray<BrepTrimPoint>[loop_cnt];
- std::map<p2t::Point *, ON_3dPoint *> *pointmap = new std::map<p2t::Point
*, ON_3dPoint *>();
- std::map<ON_3dPoint *, std::set<p2t::Point *>> *on3_to_tri = new
std::map<ON_3dPoint *, std::set<p2t::Point *>>();
- std::map<p2t::Point *, ON_3dPoint *> *normalmap = new std::map<p2t::Point
*, ON_3dPoint *>();
+ std::map<p2t::Point *, ON_3dPoint *> *pointmap =
(*s_cdt->faces)[face.m_face_index]->p2t_to_on3_map;
+ std::map<ON_3dPoint *, std::set<p2t::Point *>> *on3_to_tri =
(*s_cdt->faces)[face.m_face_index]->on3_to_tri_map;
+ std::map<p2t::Point *, ON_3dPoint *> *normalmap =
(*s_cdt->faces)[face_index]->p2t_to_on3_norm_map;
std::vector<p2t::Point*> polyline;
p2t::CDT* cdt = NULL;
@@ -616,7 +606,7 @@
// map point to last entry to 3d point
p2t::Point *p = new p2t::Point((brep_loop_points[li])[i].p2d.x,
(brep_loop_points[li])[i].p2d.y);
polyline.push_back(p);
- (*s_cdt->p2t_edge_points)[p] =
(brep_loop_points[li])[i].trim_ind;
+ (*((*s_cdt->faces)[face.m_face_index]->p2t_trim_ind))[p] =
(brep_loop_points[li])[i].trim_ind;
(*pointmap)[p] = (brep_loop_points[li])[i].p3d;
(*on3_to_tri)[(brep_loop_points[li])[i].p3d].insert(p);
(*normalmap)[p] = (brep_loop_points[li])[i].n3d;
@@ -645,7 +635,7 @@
}
}
// Using this in surface calculations, so assign now
- s_cdt->brep_face_loop_points[face.m_face_index] = brep_loop_points;
+ (*s_cdt->faces)[face.m_face_index]->face_loop_points = brep_loop_points;
// TODO - we may need to add 2D points on trims that the edges didn't know
// about. Since 3D points must be shared along edges and we're using
@@ -774,12 +764,7 @@
/* Stash mappings for BoT reassembly. Because there may be subsequent
* refinement in overlap clearing operations, we avoid immediately
* generating the mesh. */
- int face_index = face.m_face_index;
- s_cdt->p2t_faces[face_index] = cdt;
- s_cdt->tri_to_on3_maps[face_index] = pointmap;
- s_cdt->on3_to_tri_maps[face_index] = on3_to_tri;
- s_cdt->tri_to_on3_norm_maps[face_index] = normalmap;
-
+ (*s_cdt->faces)[face_index]->cdt = cdt;
return 0;
}
@@ -977,12 +962,14 @@
// Stash normals coming from non-singular trims at vertices for
faces. If a singular trim
// needs a normal in 3D, want to use one of these
+ int mfaceind1 = trim1->Face()->m_face_index;
ON_3dPoint *t1pnt = new ON_3dPoint(trim1_norm);
-
(*s_cdt->vert_face_norms)[v.m_vertex_index][trim1->Face()->m_face_index].insert(t1pnt);
- s_cdt->w3dnorms->push_back(t1pnt);
+
(*(*s_cdt->faces)[mfaceind1]->vert_face_norms)[v.m_vertex_index].insert(t1pnt);
+ (*s_cdt->faces)[mfaceind1]->w3dnorms->push_back(t1pnt);
+ int mfaceind2 = trim2->Face()->m_face_index;
ON_3dPoint *t2pnt = new ON_3dPoint(trim2_norm);
-
(*s_cdt->vert_face_norms)[v.m_vertex_index][trim2->Face()->m_face_index].insert(t2pnt);
- s_cdt->w3dnorms->push_back(t2pnt);
+
(*(*s_cdt->faces)[mfaceind2]->vert_face_norms)[v.m_vertex_index].insert(t1pnt);
+ (*s_cdt->faces)[mfaceind2]->w3dnorms->push_back(t2pnt);
// Add the normals to the vnrml total
vnrml += trim1_norm;
@@ -1129,7 +1116,7 @@
if (!p) {
bu_log("unmapped point??? %d\n", pind);
} else {
- struct cdt_audit_info *paudit = s_cdt->pnt_audit_info[p];
+ struct cdt_audit_info *paudit = (*s_cdt->pnt_audit_info)[p];
if (!paudit) {
bu_log("point with no audit info??? %d\n", pind);
} else {
@@ -1177,7 +1164,7 @@
if (!p) {
bu_log("unmapped point??? %d\n", pind);
} else {
- struct cdt_audit_info *paudit = s_cdt->pnt_audit_info[p];
+ struct cdt_audit_info *paudit = (*s_cdt->pnt_audit_info)[p];
if (!paudit) {
bu_log("point with no audit info??? %d\n", pind);
} else {
@@ -1222,7 +1209,7 @@
if (!p) {
bu_log("unmapped point??? %d\n", pind);
} else {
- struct cdt_audit_info *paudit = s_cdt->pnt_audit_info[p];
+ struct cdt_audit_info *paudit = (*s_cdt->pnt_audit_info)[p];
if (!paudit) {
bu_log("point with no audit info??? %d\n", pind);
} else {
@@ -1257,9 +1244,9 @@
point_t pt1 = VINIT_ZERO;
point_t pt2 = VINIT_ZERO;
- p2t::CDT *cdt = s->p2t_faces[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *pointmap =
s->tri_to_on3_maps[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *normalmap =
s->tri_to_on3_norm_maps[face_index];
+ p2t::CDT *cdt = (*s->faces)[face_index]->cdt;
+ std::map<p2t::Point *, ON_3dPoint *> *pointmap =
(*s->faces)[face_index]->p2t_to_on3_map;
+ std::map<p2t::Point *, ON_3dPoint *> *normalmap =
(*s->faces)[face_index]->p2t_to_on3_norm_map;
std::vector<p2t::Triangle*> tris = cdt->GetTriangles();
switch (mode) {
@@ -1363,7 +1350,7 @@
}
for (int i = 0; i < s->brep->m_F.Count(); i++) {
- if (s->p2t_faces[i]) {
+ if ((*s->faces)[i]) {
(void)ON_Brep_CDT_VList_Face(vhead, vlfree, i, mode, s);
}
}
@@ -1461,22 +1448,17 @@
* face's degen_pnts set.
*/
for (int face_index = 0; face_index != s_cdt->brep->m_F.Count();
face_index++) {
- std::set<p2t::Point *> *fdp = s_cdt->face_degen_pnts[face_index];
+ std::set<p2t::Point *> *fdp = (*s_cdt->faces)[face_index]->degen_pnts;
if (!fdp) {
continue;
}
- p2t::CDT *cdt = s_cdt->p2t_faces[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *pointmap =
s_cdt->tri_to_on3_maps[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *normalmap =
s_cdt->tri_to_on3_norm_maps[face_index];
+ p2t::CDT *cdt = (*s_cdt->faces)[face_index]->cdt;
+ std::map<p2t::Point *, ON_3dPoint *> *pointmap =
(*s_cdt->faces)[face_index]->p2t_to_on3_map;
+ std::map<p2t::Point *, ON_3dPoint *> *normalmap =
(*s_cdt->faces)[face_index]->p2t_to_on3_norm_map;
std::vector<p2t::Triangle *> *tri_add;
- if (!s_cdt->p2t_extra_faces[face_index]) {
- tri_add = new std::vector<p2t::Triangle *>;
- s_cdt->p2t_extra_faces[face_index] = tri_add;
- } else {
- tri_add = s_cdt->p2t_extra_faces[face_index];
- }
+ tri_add = (*s_cdt->faces)[face_index]->p2t_extra_faces;
std::vector<p2t::Triangle*> tris = cdt->GetTriangles();
for (size_t i = 0; i < tris.size(); i++) {
@@ -1716,10 +1698,7 @@
bu_log("tri_cnt_init: %zd\n", md.triangle_cnt);
for (int face_index = 0; face_index != s_cdt->brep->m_F.Count();
face_index++) {
- std::vector<p2t::Triangle *> *tri_add =
s_cdt->p2t_extra_faces[face_index];
- if (!tri_add) {
- continue;
- }
+ std::vector<p2t::Triangle *> *tri_add =
(*s_cdt->faces)[face_index]->p2t_extra_faces;
//bu_log("adding %zd faces from %d\n", tri_add->size(), face_index);
md.triangle_cnt += tri_add->size();
}
@@ -1772,8 +1751,8 @@
int face_cnt = 0;
md.triangle_cnt = 0;
for (int face_index = 0; face_index != s_cdt->brep->m_F.Count();
face_index++) {
- p2t::CDT *cdt = s_cdt->p2t_faces[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *pointmap =
s_cdt->tri_to_on3_maps[face_index];
+ p2t::CDT *cdt = (*s_cdt->faces)[face_index]->cdt;
+ std::map<p2t::Point *, ON_3dPoint *> *pointmap =
(*s_cdt->faces)[face_index]->p2t_to_on3_map;
std::vector<p2t::Triangle*> tris = cdt->GetTriangles();
md.triangle_cnt += tris.size();
int active_tris = 0;
@@ -1813,8 +1792,8 @@
//bu_log("face_cnt: %d\n", face_cnt);
for (int face_index = 0; face_index != s_cdt->brep->m_F.Count();
face_index++) {
- std::vector<p2t::Triangle *> *tri_add =
s_cdt->p2t_extra_faces[face_index];
- std::map<p2t::Point *, ON_3dPoint *> *pointmap =
s_cdt->tri_to_on3_maps[face_index];
+ std::vector<p2t::Triangle *> *tri_add =
(*s_cdt->faces)[face_index]->p2t_extra_faces;
+ std::map<p2t::Point *, ON_3dPoint *> *pointmap =
(*s_cdt->faces)[face_index]->p2t_to_on3_map;
if (!tri_add) {
continue;
}
@@ -1852,17 +1831,16 @@
}
- /* Clear out extra faces so they don't pollute another pass */
+ /* Clear out extra faces so they don't pollute another pass.
+ * TODO - need a better way to do this, incorporated with reset */
for (int i = 0; i < s_cdt->brep->m_F.Count(); i++) {
- std::vector<p2t::Triangle *> *ef = s_cdt->p2t_extra_faces[i];
- if (ef) {
- std::vector<p2t::Triangle *>::iterator trit;
- for (trit = ef->begin(); trit != ef->end(); trit++) {
- p2t::Triangle *t = *trit;
- delete t;
- }
- ef->clear();
+ std::vector<p2t::Triangle *> *ef = (*s_cdt->faces)[i]->p2t_extra_faces;
+ std::vector<p2t::Triangle *>::iterator trit;
+ for (trit = ef->begin(); trit != ef->end(); trit++) {
+ p2t::Triangle *t = *trit;
+ delete t;
}
+ ef->clear();
}
Modified: brlcad/trunk/src/libbrep/cdt.h
===================================================================
--- brlcad/trunk/src/libbrep/cdt.h 2019-05-31 11:12:44 UTC (rev 73215)
+++ brlcad/trunk/src/libbrep/cdt.h 2019-05-31 17:39:02 UTC (rev 73216)
@@ -83,6 +83,50 @@
ON_2dPoint surf_uv;
};
+struct ON_Brep_CDT_State;
+
+struct ON_Brep_CDT_Face_State {
+ struct ON_Brep_CDT_State *s_cdt;
+ int face_ind;
+
+ /* 3D data specific to this face (i.e. not shared at an edge) */
+ std::vector<ON_3dPoint *> *w3dpnts;
+ std::vector<ON_3dPoint *> *w3dnorms;
+
+ std::map<int, std::set<ON_3dPoint *>> *vert_face_norms;
+
+ /* loop points */
+ ON_SimpleArray<BrepTrimPoint> *face_loop_points;
+ std::map<p2t::Point *, BrepTrimPoint *> *p2t_to_trimpt;
+ std::map<p2t::Point *, int> *p2t_trim_ind;
+
+ /* singular trim info */
+ std::map<int,ON_3dPoint *> *strim_pnts;
+ std::map<int,ON_3dPoint *> *strim_norms;
+
+ /* non-loop surface points */
+ ON_2dPointArray *on_surf_points;
+
+ /* mappings */
+ std::map<ON_2dPoint *, ON_3dPoint *> *on2_to_on3_map;
+ std::map<ON_2dPoint *, p2t::Point *> *on2_to_p2t_map;
+ std::map<p2t::Point *, ON_3dPoint *> *p2t_to_on2_map;
+ std::map<p2t::Point *, ON_3dPoint *> *p2t_to_on3_map;
+ std::map<p2t::Point *, ON_3dPoint *> *p2t_to_on3_norm_map;
+ std::map<ON_3dPoint *, std::set<p2t::Point *>> *on3_to_tri_map;
+
+ /* Poly2Tri information */
+ p2t::CDT *cdt;
+ std::vector<p2t::Triangle *> *p2t_extra_faces;
+ std::set<p2t::Triangle *> *degen_faces;
+
+ /* Point status tracker */
+ std::set<p2t::Point *> *degen_pnts;
+ std::set<ON_2dPoint *> *deactivated_surf_pnts;
+ std::set<ON_2dPoint *> *added_surf_pnts;
+};
+
+
struct ON_Brep_CDT_State {
int status;
@@ -96,40 +140,25 @@
fastf_t dist;
/* 3D data */
- std::map<int, double> *min_edge_seg_len;
- std::map<int, double> *max_edge_seg_len;
std::vector<ON_3dPoint *> *w3dpnts;
std::vector<ON_3dPoint *> *w3dnorms;
+ /* Vertices */
std::map<int, ON_3dPoint *> *vert_pnts;
std::map<int, ON_3dPoint *> *vert_avg_norms;
- std::map<int, std::map<int, std::set<ON_3dPoint *>>> *vert_face_norms;
+ std::map<int, ON_3dPoint *> *vert_to_on;
- /* loop points */
- std::map<int, ON_SimpleArray<BrepTrimPoint> *> *face_loop_points;
+ /* Edges */
+ std::set<ON_3dPoint *> *edge_pnts;
+ std::map<int, double> *min_edge_seg_len;
+ std::map<int, double> *max_edge_seg_len;
+ std::map<ON_3dPoint *, std::set<BrepTrimPoint *>> *on_brep_edge_pnts;
- /* singular trim info */
- std::map<int, std::map<int,ON_3dPoint *>> *strim_pnts;
- std::map<int, std::map<int,ON_3dPoint *>> *strim_norms;
-
- /* Poly2Tri data */
- p2t::CDT **p2t_faces;
- std::map<p2t::Point *, int> *p2t_edge_points;
- std::vector<p2t::Triangle *> **p2t_extra_faces;
- std::map<ON_2dPoint *, ON_3dPoint *> **on2_to_on3_maps;
- std::map<p2t::Point *, ON_3dPoint *> **tri_to_on3_maps;
- std::map<p2t::Point *, ON_3dPoint *> **tri_to_on3_norm_maps;
- std::map<ON_3dPoint *, std::set<p2t::Point *>> **on3_to_tri_maps;
-
/* Audit data */
- std::map<ON_3dPoint *, struct cdt_audit_info *> pnt_audit_info;
+ std::map<ON_3dPoint *, struct cdt_audit_info *> *pnt_audit_info;
- /* BoT -> ON mappings */
- std::map<ON_3dPoint *, std::set<BrepTrimPoint *>> on_brep_edge_pnts;
- std::map<int, ON_3dPoint *> *vert_to_on;
- std::set<ON_3dPoint *> *edge_pnts;
- ON_SimpleArray<BrepTrimPoint> **brep_face_loop_points;
- std::set<p2t::Point *> **face_degen_pnts;
+ /* Face specific data */
+ std::map<int, struct ON_Brep_CDT_Face_State *> *faces;
};
struct brep_cdt_tol {
@@ -144,8 +173,8 @@
const ON_Surface *s;
const ON_BrepFace *f;
ON_RTree *rt_trims;
- std::map<int, std::map<int,ON_3dPoint *>> *strim_pnts;
- std::map<int, std::map<int,ON_3dPoint *>> *strim_norms;
+ std::map<int,ON_3dPoint *> *strim_pnts;
+ std::map<int,ON_3dPoint *> *strim_norms;
double u1, u2, v1, v2;
fastf_t ulen;
fastf_t u_lower_3dlen;
@@ -183,7 +212,15 @@
ON_2dPointArray &on_surf_points,
ON_RTree *rt_trims);
+
+struct ON_Brep_CDT_Face_State *
+ON_Brep_CDT_Face_Create(struct ON_Brep_CDT_State *s_cdt, int ind);
void
+ON_Brep_CDT_Face_Reset(struct ON_Brep_CDT_Face_State *fcdt);
+void
+ON_Brep_CDT_Face_Destroy(struct ON_Brep_CDT_Face_State *fcdt);
+
+void
plot_polyline(std::vector<p2t::Point *> *pnts, const char *filename);
void
plot_tri(p2t::Triangle *t, const char *filename);
Modified: brlcad/trunk/src/libbrep/cdt_edge.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt_edge.cpp 2019-05-31 11:12:44 UTC (rev
73215)
+++ brlcad/trunk/src/libbrep/cdt_edge.cpp 2019-05-31 17:39:02 UTC (rev
73216)
@@ -235,7 +235,7 @@
nbtp1->e = emid;
nbtp1->trim_ind = trim.m_trim_index;
(*trim1_param_points)[nbtp1->t] = nbtp1;
- s_cdt->on_brep_edge_pnts[npt].insert(nbtp1);
+ (*s_cdt->on_brep_edge_pnts)[npt].insert(nbtp1);
BrepTrimPoint *nbtp2 = new BrepTrimPoint;
nbtp2->p3d = npt;
@@ -247,7 +247,7 @@
nbtp2->e = emid;
nbtp2->trim_ind = trim2->m_trim_index;
(*trim2_param_points)[nbtp2->t] = nbtp2;
- s_cdt->on_brep_edge_pnts[npt].insert(nbtp2);
+ (*s_cdt->on_brep_edge_pnts)[npt].insert(nbtp2);
getEdgePoints(s_cdt, edge, nc, trim, sbtp1, nbtp1, sbtp2, nbtp2,
cdt_tol, trim1_param_points, trim2_param_points, loop_min_dist);
getEdgePoints(s_cdt, edge, nc, trim, nbtp1, ebtp1, nbtp2, ebtp2,
cdt_tol, trim1_param_points, trim2_param_points, loop_min_dist);
@@ -326,7 +326,7 @@
nbtp1->trim_ind = trim.m_trim_index;
nbtp1->e = ON_UNSET_VALUE;
(*trim1_param_points)[nbtp1->t] = nbtp1;
- s_cdt->on_brep_edge_pnts[nsptp].insert(nbtp1);
+ (*s_cdt->on_brep_edge_pnts)[nsptp].insert(nbtp1);
BrepTrimPoint *nbtp2 = new BrepTrimPoint;
nbtp2->p3d = nsptp;
@@ -335,7 +335,7 @@
nbtp2->trim_ind = trim2->m_trim_index;
nbtp2->e = ON_UNSET_VALUE;
(*trim2_param_points)[nbtp2->t] = nbtp2;
- s_cdt->on_brep_edge_pnts[nsptp].insert(nbtp2);
+ (*s_cdt->on_brep_edge_pnts)[nsptp].insert(nbtp2);
}
}
@@ -553,7 +553,7 @@
sbtp1->t = st1;
sbtp1->trim_ind = trim.m_trim_index;
(*trim1_param_points)[sbtp1->t] = sbtp1;
- s_cdt->on_brep_edge_pnts[edge_start_3d].insert(sbtp1);
+ (*s_cdt->on_brep_edge_pnts)[edge_start_3d].insert(sbtp1);
BrepTrimPoint *ebtp1 = new BrepTrimPoint;
ebtp1->p3d = edge_end_3d;
@@ -565,7 +565,7 @@
ebtp1->t = et1;
ebtp1->trim_ind = trim.m_trim_index;
(*trim1_param_points)[ebtp1->t] = ebtp1;
- s_cdt->on_brep_edge_pnts[edge_end_3d].insert(ebtp1);
+ (*s_cdt->on_brep_edge_pnts)[edge_end_3d].insert(ebtp1);
BrepTrimPoint *sbtp2 = new BrepTrimPoint;
sbtp2->p3d = edge_start_3d;
@@ -577,7 +577,7 @@
sbtp2->t = st2;
sbtp2->trim_ind = trim2->m_trim_index;
(*trim2_param_points)[sbtp2->t] = sbtp2;
- s_cdt->on_brep_edge_pnts[edge_start_3d].insert(sbtp2);
+ (*s_cdt->on_brep_edge_pnts)[edge_start_3d].insert(sbtp2);
BrepTrimPoint *ebtp2 = new BrepTrimPoint;
ebtp2->p3d = edge_end_3d;
@@ -589,7 +589,7 @@
ebtp2->t = et2;
ebtp2->trim_ind = trim2->m_trim_index;
(*trim2_param_points)[ebtp2->t] = ebtp2;
- s_cdt->on_brep_edge_pnts[edge_end_3d].insert(ebtp2);
+ (*s_cdt->on_brep_edge_pnts)[edge_end_3d].insert(ebtp2);
if (trim.IsClosed() || trim2->IsClosed()) {
@@ -648,7 +648,7 @@
mbtp1->e = edge_mid_range;
mbtp1->trim_ind = trim.m_trim_index;
(*trim1_param_points)[mbtp1->t] = mbtp1;
- s_cdt->on_brep_edge_pnts[nmp].insert(mbtp1);
+ (*s_cdt->on_brep_edge_pnts)[nmp].insert(mbtp1);
BrepTrimPoint *mbtp2 = new BrepTrimPoint;
mbtp2->p3d = nmp;
@@ -660,7 +660,7 @@
mbtp1->e = edge_mid_range;
mbtp2->trim_ind = trim2->m_trim_index;
(*trim2_param_points)[mbtp2->t] = mbtp2;
- s_cdt->on_brep_edge_pnts[nmp].insert(mbtp2);
+ (*s_cdt->on_brep_edge_pnts)[nmp].insert(mbtp2);
getEdgePoints(s_cdt, edge, nc, trim, sbtp1, mbtp1, sbtp2, mbtp2,
&cdt_tol, trim1_param_points, trim2_param_points, loop_min_dist);
getEdgePoints(s_cdt, edge, nc, trim, mbtp1, ebtp1, mbtp2, ebtp2,
&cdt_tol, trim1_param_points, trim2_param_points, loop_min_dist);
Modified: brlcad/trunk/src/libbrep/cdt_surf.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt_surf.cpp 2019-05-31 11:12:44 UTC (rev
73215)
+++ brlcad/trunk/src/libbrep/cdt_surf.cpp 2019-05-31 17:39:02 UTC (rev
73216)
@@ -79,7 +79,7 @@
}
std::map<int, ON_3dPoint *>::iterator m_it;
// Check the trims to see if uc,vc is on one of them
- for (m_it = (*sinfo->strim_pnts)[sinfo->f->m_face_index].begin(); m_it
!= (*sinfo->strim_pnts)[sinfo->f->m_face_index].end(); m_it++) {
+ for (m_it = sinfo->strim_pnts->begin(); m_it !=
sinfo->strim_pnts->end(); m_it++) {
//bu_log(" trim %d\n", (*m_it).first);
ON_Interval trim_dom =
sinfo->f->Brep()->m_T[(*m_it).first].Domain();
ON_2dPoint p2d1 =
sinfo->f->Brep()->m_T[(*m_it).first].PointAt(trim_dom.m_t[0]);
@@ -110,9 +110,9 @@
}
if (on_trim) {
- if
((*sinfo->strim_norms)[sinfo->f->m_face_index].find((*m_it).first) !=
(*sinfo->strim_norms)[sinfo->f->m_face_index].end()) {
+ if (sinfo->strim_norms->find((*m_it).first) !=
sinfo->strim_norms->end()) {
ON_3dPoint *vnorm = NULL;
- vnorm =
(*sinfo->strim_norms)[sinfo->f->m_face_index][(*m_it).first];
+ vnorm = (*sinfo->strim_norms)[(*m_it).first];
//bu_log(" normal: %f, %f, %f\n", vnorm->x, vnorm->y,
vnorm->z);
return vnorm;
} else {
@@ -149,7 +149,7 @@
double min_edge_dist = DBL_MAX;
ON_BoundingBox uvbb(ON_2dPoint(u1,v1),ON_2dPoint(u2,v2));
- ON_SimpleArray<BrepTrimPoint> *brep_loop_points =
s_cdt->brep_face_loop_points[sinfo->f->m_face_index];
+ ON_SimpleArray<BrepTrimPoint> *brep_loop_points =
(*s_cdt->faces)[sinfo->f->m_face_index]->face_loop_points;
if (!brep_loop_points) {
(*min_edge) = min_edge_dist;
return ret;
@@ -516,17 +516,12 @@
return;
}
- if (!s_cdt->on2_to_on3_maps[face.m_face_index]) {
- std::map<ON_2dPoint *, ON_3dPoint *> *on2to3 = new
std::map<ON_2dPoint *, ON_3dPoint *>();
- s_cdt->on2_to_on3_maps[face.m_face_index] = on2to3;
- }
-
struct cdt_surf_info sinfo;
sinfo.s = s;
sinfo.f = &face;
sinfo.rt_trims = rt_trims;
- sinfo.strim_pnts = s_cdt->strim_pnts;
- sinfo.strim_norms = s_cdt->strim_norms;
+ sinfo.strim_pnts = (*s_cdt->faces)[face.m_face_index]->strim_pnts;
+ sinfo.strim_norms = (*s_cdt->faces)[face.m_face_index]->strim_norms;
double t1, t2;
s->GetDomain(0, &t1, &t2);
sinfo.ulen = fabs(t2 - t1);
Modified: brlcad/trunk/src/libbrep/cdt_util.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt_util.cpp 2019-05-31 11:12:44 UTC (rev
73215)
+++ brlcad/trunk/src/libbrep/cdt_util.cpp 2019-05-31 17:39:02 UTC (rev
73216)
@@ -114,7 +114,7 @@
CDT_Add3DPnt(struct ON_Brep_CDT_State *s, ON_3dPoint *p, int fid, int vid, int
tid, int eid, fastf_t x2d, fastf_t y2d)
{
s->w3dpnts->push_back(p);
- s->pnt_audit_info[p] = cdt_ainfo(fid, vid, tid, eid, x2d, y2d);
+ (*s->pnt_audit_info)[p] = cdt_ainfo(fid, vid, tid, eid, x2d, y2d);
}
// Digest tessellation tolerances...
@@ -158,50 +158,151 @@
cdt->cos_within_ang = cos_within_ang;
}
+struct ON_Brep_CDT_Face_State *
+ON_Brep_CDT_Face_Create(struct ON_Brep_CDT_State *s_cdt, int ind)
+{
+ struct ON_Brep_CDT_Face_State *fcdt = new struct ON_Brep_CDT_Face_State;
+
+ fcdt->s_cdt = s_cdt;
+ fcdt->face_ind = ind;
+
+ fcdt->w3dpnts = new std::vector<ON_3dPoint *>;
+ fcdt->w3dnorms = new std::vector<ON_3dPoint *>;
+
+ fcdt->vert_face_norms = new std::map<int, std::set<ON_3dPoint *>>;
+ fcdt->face_loop_points = NULL;
+ fcdt->p2t_to_trimpt = new std::map<p2t::Point *, BrepTrimPoint *>;
+ fcdt->p2t_trim_ind = new std::map<p2t::Point *, int>;
+
+ fcdt->strim_pnts = new std::map<int,ON_3dPoint *>;
+ fcdt->strim_norms = new std::map<int,ON_3dPoint *>;
+
+ fcdt->on_surf_points = new ON_2dPointArray;
+
+ fcdt->on2_to_on3_map = new std::map<ON_2dPoint *, ON_3dPoint *>;
+ fcdt->on2_to_p2t_map = new std::map<ON_2dPoint *, p2t::Point *>;
+ fcdt->p2t_to_on2_map = new std::map<p2t::Point *, ON_3dPoint *>;
+ fcdt->p2t_to_on3_map = new std::map<p2t::Point *, ON_3dPoint *>;
+ fcdt->p2t_to_on3_norm_map = new std::map<p2t::Point *, ON_3dPoint *>;
+ fcdt->on3_to_tri_map = new std::map<ON_3dPoint *, std::set<p2t::Point *>>;
+
+ fcdt->cdt = NULL;
+ fcdt->p2t_extra_faces = new std::vector<p2t::Triangle *>;
+ fcdt->degen_faces = new std::set<p2t::Triangle *>;
+
+ fcdt->degen_pnts = new std::set<p2t::Point *>;
+
+ return fcdt;
+}
+
+/* Clears old triangulation data */
+void
+ON_Brep_CDT_Face_Reset(struct ON_Brep_CDT_Face_State *fcdt)
+{
+ fcdt->on2_to_p2t_map->clear();
+ fcdt->p2t_to_on2_map->clear();
+ fcdt->p2t_to_on3_map->clear();
+ fcdt->p2t_to_on3_norm_map->clear();
+ fcdt->on3_to_tri_map->clear();
+ fcdt->p2t_to_trimpt->clear();
+ fcdt->p2t_trim_ind->clear();
+
+ if (fcdt->cdt) {
+ delete fcdt->cdt;
+ fcdt->cdt = NULL;
+ }
+
+ std::vector<p2t::Triangle *>::iterator trit;
+ for (trit = fcdt->p2t_extra_faces->begin(); trit !=
fcdt->p2t_extra_faces->end(); trit++) {
+ p2t::Triangle *t = *trit;
+ delete t;
+ }
+
+ fcdt->p2t_extra_faces->clear();
+ fcdt->degen_faces->clear();
+
+}
+
+void
+ON_Brep_CDT_Face_Destroy(struct ON_Brep_CDT_Face_State *fcdt)
+{
+ for (size_t i = 0; i < fcdt->w3dpnts->size(); i++) {
+ delete (*(fcdt->w3dpnts))[i];
+ }
+ for (size_t i = 0; i < fcdt->w3dnorms->size(); i++) {
+ delete (*(fcdt->w3dnorms))[i];
+ }
+
+ std::vector<p2t::Triangle *>::iterator trit;
+ for (trit = fcdt->p2t_extra_faces->begin(); trit !=
fcdt->p2t_extra_faces->end(); trit++) {
+ p2t::Triangle *t = *trit;
+ delete t;
+ }
+
+ delete fcdt->w3dpnts;
+ delete fcdt->w3dnorms;
+ delete fcdt->vert_face_norms;
+ if (fcdt->face_loop_points) {
+ delete fcdt->face_loop_points;
+ }
+ delete fcdt->p2t_to_trimpt;
+ delete fcdt->strim_pnts;
+ delete fcdt->strim_norms;
+ delete fcdt->on_surf_points;
+ delete fcdt->on2_to_on3_map;
+ delete fcdt->on2_to_p2t_map;
+ delete fcdt->p2t_to_on2_map;
+ delete fcdt->p2t_to_on3_map;
+ delete fcdt->p2t_to_on3_norm_map;
+ delete fcdt->on3_to_tri_map;
+ delete fcdt->p2t_extra_faces;
+ delete fcdt->degen_faces;
+ delete fcdt->degen_pnts;
+
+ delete fcdt;
+}
+
+
struct ON_Brep_CDT_State *
ON_Brep_CDT_Create(void *bv)
{
+ struct ON_Brep_CDT_State *cdt = new struct ON_Brep_CDT_State;
+
+ /* Set status to "never evaluated" */
+ cdt->status = BREP_CDT_UNTESSELLATED;
+
ON_Brep *brep = (ON_Brep *)bv;
- struct ON_Brep_CDT_State *cdt = new struct ON_Brep_CDT_State;
cdt->orig_brep = brep;
cdt->brep = NULL;
- cdt->min_edge_seg_len = new std::map<int, double>;
- cdt->max_edge_seg_len = new std::map<int, double>;
+ /* Set sane default tolerances. May want to do
+ * something better (perhaps brep dimension based...) */
+ cdt->abs = BREP_CDT_DEFAULT_TOL_ABS;
+ cdt->rel = BREP_CDT_DEFAULT_TOL_REL ;
+ cdt->norm = BREP_CDT_DEFAULT_TOL_NORM ;
+ cdt->dist = BREP_CDT_DEFAULT_TOL_DIST ;
+
cdt->w3dpnts = new std::vector<ON_3dPoint *>;
+ cdt->w3dnorms = new std::vector<ON_3dPoint *>;
+
cdt->vert_pnts = new std::map<int, ON_3dPoint *>;
- cdt->w3dnorms = new std::vector<ON_3dPoint *>;
cdt->vert_avg_norms = new std::map<int, ON_3dPoint *>;
- cdt->vert_face_norms = new std::map<int, std::map<int, std::set<ON_3dPoint
*>>>;
- cdt->strim_pnts = new std::map<int,std::map<int, ON_3dPoint *> >;
- cdt->strim_norms = new std::map<int,std::map<int, ON_3dPoint *> >;
cdt->vert_to_on = new std::map<int, ON_3dPoint *>;
+
cdt->edge_pnts = new std::set<ON_3dPoint *>;
- cdt->brep_face_loop_points = (ON_SimpleArray<BrepTrimPoint>
**)bu_calloc(brep->m_F.Count(), sizeof(std::map<p2t::Point *, BrepTrimPoint *>
*), "face loop pnts");
- cdt->face_degen_pnts = (std::set<p2t::Point *>
**)bu_calloc(brep->m_F.Count(), sizeof(std::set<p2t::Point *> *), "degenerate
edge points");
+ cdt->min_edge_seg_len = new std::map<int, double>;
+ cdt->max_edge_seg_len = new std::map<int, double>;
+ cdt->on_brep_edge_pnts = new std::map<ON_3dPoint *, std::set<BrepTrimPoint
*>>;
- cdt->p2t_faces = (p2t::CDT **)bu_calloc(brep->m_F.Count(), sizeof(p2t::CDT
*), "poly2tri triangulations");
- cdt->p2t_edge_points = new std::map<p2t::Point *, int>;
- cdt->p2t_extra_faces = (std::vector<p2t::Triangle *>
**)bu_calloc(brep->m_F.Count(), sizeof(std::vector<p2t::Triangle *> *), "extra
p2t faces");
- cdt->on2_to_on3_maps = (std::map<ON_2dPoint *, ON_3dPoint *>
**)bu_calloc(brep->m_F.Count(), sizeof(std::map<ON_2dPoint *, ON_3dPoint *> *),
"ON_2dPoint to ON_3dPoint maps");
- cdt->tri_to_on3_maps = (std::map<p2t::Point *, ON_3dPoint *>
**)bu_calloc(brep->m_F.Count(), sizeof(std::map<p2t::Point *, ON_3dPoint *> *),
"poly2tri point to ON_3dPoint maps");
- cdt->on3_to_tri_maps = (std::map<ON_3dPoint *, std::set<p2t::Point *>>
**)bu_calloc(brep->m_F.Count(), sizeof(std::map<ON_3dPoint *,
std::set<p2t::Point *>> *), "poly2tri point to ON_3dPoint maps");
- cdt->tri_to_on3_norm_maps = (std::map<p2t::Point *, ON_3dPoint *>
**)bu_calloc(brep->m_F.Count(), sizeof(std::map<p2t::Point *, ON_3dPoint *> *),
"poly2tri point to ON_3dVector normal maps");
+ cdt->pnt_audit_info = new std::map<ON_3dPoint *, struct cdt_audit_info *>;
- /* Set status to "never evaluated" */
- cdt->status = BREP_CDT_UNTESSELLATED;
+ cdt->faces = new std::map<int, struct ON_Brep_CDT_Face_State *>;
- /* Set sane default tolerances. May want to do
- * something better (perhaps brep dimension based...) */
- cdt->abs = BREP_CDT_DEFAULT_TOL_ABS;
- cdt->rel = BREP_CDT_DEFAULT_TOL_REL ;
- cdt->norm = BREP_CDT_DEFAULT_TOL_NORM ;
- cdt->dist = BREP_CDT_DEFAULT_TOL_DIST ;
-
return cdt;
}
+
void
ON_Brep_CDT_Destroy(struct ON_Brep_CDT_State *s_cdt)
{
@@ -212,57 +313,30 @@
delete (*(s_cdt->w3dnorms))[i];
}
- for (int i = 0; i < s_cdt->brep->m_F.Count(); i++) {
- std::vector<p2t::Triangle *> *ef = s_cdt->p2t_extra_faces[i];
- if (ef) {
- std::vector<p2t::Triangle *>::iterator trit;
- for (trit = ef->begin(); trit != ef->end(); trit++) {
- p2t::Triangle *t = *trit;
- delete t;
- }
+ if (s_cdt->faces) {
+ std::map<int, struct ON_Brep_CDT_Face_State *>::iterator f_it;
+ for (f_it = s_cdt->faces->begin(); f_it != s_cdt->faces->end(); f_it++)
{
+ struct ON_Brep_CDT_Face_State *f = f_it->second;
+ delete f;
}
}
- for (int i = 0; i < s_cdt->brep->m_F.Count(); i++) {
- if (s_cdt->brep_face_loop_points[i] != NULL) {
- delete [] s_cdt->brep_face_loop_points[i];
- }
- if (s_cdt->face_degen_pnts[i] != NULL) {
- delete s_cdt->face_degen_pnts[i];
- }
+ if (s_cdt->brep) {
+ delete s_cdt->brep;
}
- for (int i = 0; i < s_cdt->brep->m_F.Count(); i++) {
- if (s_cdt->on2_to_on3_maps[i] != NULL) {
- delete s_cdt->on2_to_on3_maps[i];
- }
- }
- bu_free(s_cdt->on2_to_on3_maps, "degen pnts");
-
- delete s_cdt->min_edge_seg_len;
- delete s_cdt->max_edge_seg_len;
-
- delete s_cdt->p2t_edge_points;
-
- delete s_cdt->w3dpnts;
delete s_cdt->vert_pnts;
- delete s_cdt->w3dnorms;
delete s_cdt->vert_avg_norms;
- delete s_cdt->vert_face_norms;
- delete s_cdt->strim_pnts;
- delete s_cdt->strim_norms;
delete s_cdt->vert_to_on;
+
delete s_cdt->edge_pnts;
- delete s_cdt->p2t_extra_faces;
+ delete s_cdt->min_edge_seg_len;
+ delete s_cdt->max_edge_seg_len;
+ delete s_cdt->on_brep_edge_pnts;
- if (s_cdt->brep) {
- delete s_cdt->brep;
- }
+ delete s_cdt->pnt_audit_info;
+ delete s_cdt->faces;
- bu_free(s_cdt->brep_face_loop_points, "flp array");
- bu_free(s_cdt->face_degen_pnts, "degen pnts");
- // TODO - delete p2t data
-
delete s_cdt;
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits