Revision: 73108
http://sourceforge.net/p/brlcad/code/73108
Author: starseeker
Date: 2019-05-21 17:44:07 +0000 (Tue, 21 May 2019)
Log Message:
-----------
propagate the state through the surface point routines... not sure if we'll end
up using this yet.
Modified Paths:
--------------
brlcad/trunk/src/libbrep/cdt.cpp
Modified: brlcad/trunk/src/libbrep/cdt.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt.cpp 2019-05-21 16:51:22 UTC (rev 73107)
+++ brlcad/trunk/src/libbrep/cdt.cpp 2019-05-21 17:44:07 UTC (rev 73108)
@@ -188,6 +188,7 @@
/* Poly2Tri data */
p2t::CDT **p2t_faces;
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;
@@ -905,7 +906,9 @@
}
static void
-getSurfacePoints(struct cdt_surf_info *sinfo,
+getSurfacePoints(
+ struct ON_Brep_CDT_State *s_cdt,
+ struct cdt_surf_info *sinfo,
fastf_t u1,
fastf_t u2,
fastf_t v1,
@@ -958,7 +961,7 @@
continue;
}
- getSurfacePoints(sinfo, u1, u1 + step, v1, v2, min_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u1 + step, v1, v2, min_dist,
within_dist, cos_within_ang, on_surf_points, left,
below);
} else if (i == isteps) {
@@ -972,7 +975,7 @@
continue;
}
- getSurfacePoints(sinfo, u2 - step, u2, v1, v2, min_dist,
+ getSurfacePoints(s_cdt, sinfo, u2 - step, u2, v1, v2, min_dist,
within_dist, cos_within_ang, on_surf_points, left,
below);
} else {
@@ -985,7 +988,7 @@
continue;
}
- getSurfacePoints(sinfo, step_u - step, step_u, v1, v2,
min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, step_u - step, step_u, v1, v2,
min_dist, within_dist,
cos_within_ang, on_surf_points, left, below);
}
left = false;
@@ -1021,7 +1024,7 @@
continue;
}
- getSurfacePoints(sinfo, u1, u2, v1, v1 + step, min_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u2, v1, v1 + step, min_dist,
within_dist, cos_within_ang, on_surf_points, left,
below);
} else if (i == isteps) {
@@ -1032,7 +1035,7 @@
continue;
}
- getSurfacePoints(sinfo, u1, u2, v2 - step, v2, min_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u2, v2 - step, v2, min_dist,
within_dist, cos_within_ang, on_surf_points, left,
below);
} else {
@@ -1043,7 +1046,7 @@
continue;
}
- getSurfacePoints(sinfo, u1, u2, step_v - step, step_v,
min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u2, step_v - step, step_v,
min_dist, within_dist,
cos_within_ang, on_surf_points, left, below);
}
@@ -1127,13 +1130,13 @@
p2d.Set(u, v2);
on_surf_points.Append(p2d);
- getSurfacePoints(sinfo, u1, u, v1, v, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u, v1, v, min_dist, within_dist,
cos_within_ang, on_surf_points, left, below);
- getSurfacePoints(sinfo, u1, u, v, v2, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u, v, v2, min_dist, within_dist,
cos_within_ang, on_surf_points, left, false);
- getSurfacePoints(sinfo, u, u2, v1, v, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u, u2, v1, v, min_dist, within_dist,
cos_within_ang, on_surf_points, false, below);
- getSurfacePoints(sinfo, u, u2, v, v2, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u, u2, v, v2, min_dist, within_dist,
cos_within_ang, on_surf_points, false, false);
return;
}
@@ -1146,9 +1149,9 @@
//top
p2d.Set(u, v2);
on_surf_points.Append(p2d);
- getSurfacePoints(sinfo, u1, u, v1, v2, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u, v1, v2, min_dist, within_dist,
cos_within_ang, on_surf_points, left, below);
- getSurfacePoints(sinfo, u, u2, v1, v2, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u, u2, v1, v2, min_dist, within_dist,
cos_within_ang, on_surf_points, false, below);
return;
}
@@ -1162,9 +1165,9 @@
p2d.Set(u2, v);
on_surf_points.Append(p2d);
- getSurfacePoints(sinfo, u1, u2, v1, v, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u2, v1, v, min_dist, within_dist,
cos_within_ang, on_surf_points, left, below);
- getSurfacePoints(sinfo, u1, u2, v, v2, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u2, v, v2, min_dist, within_dist,
cos_within_ang, on_surf_points, left, false);
return;
}
@@ -1190,13 +1193,13 @@
if (dist > within_dist + ON_ZERO_TOLERANCE) {
//bu_log("split: dist(%f) > within_dist(%f)\n", dist, within_dist);
- getSurfacePoints(sinfo, u1, u, v1, v, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u, v1, v, min_dist, within_dist,
cos_within_ang, on_surf_points, left, below);
- getSurfacePoints(sinfo, u1, u, v, v2, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u1, u, v, v2, min_dist, within_dist,
cos_within_ang, on_surf_points, left, false);
- getSurfacePoints(sinfo, u, u2, v1, v, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u, u2, v1, v, min_dist, within_dist,
cos_within_ang, on_surf_points, false, below);
- getSurfacePoints(sinfo, u, u2, v, v2, min_dist, within_dist,
+ getSurfacePoints(s_cdt, sinfo, u, u2, v, v2, min_dist, within_dist,
cos_within_ang, on_surf_points, false, false);
}
}
@@ -1335,6 +1338,11 @@
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;
@@ -1419,7 +1427,7 @@
p.Set(min.x, midy);
on_surf_points.Append(p);
- getSurfacePoints(&sinfo, min.x, midx, min.y, midy, min_dist,
within_dist,
+ getSurfacePoints(s_cdt, &sinfo, min.x, midx, min.y, midy, min_dist,
within_dist,
cos_within_ang, on_surf_points, true, true);
//bottom midx
@@ -1430,7 +1438,7 @@
p.Set(midx, midy);
on_surf_points.Append(p);
- getSurfacePoints(&sinfo, midx, max.x, min.y, midy, min_dist,
within_dist,
+ getSurfacePoints(s_cdt, &sinfo, midx, max.x, min.y, midy, min_dist,
within_dist,
cos_within_ang, on_surf_points, false, true);
//bottom right
@@ -1445,7 +1453,7 @@
p.Set(min.x, max.y);
on_surf_points.Append(p);
- getSurfacePoints(&sinfo, min.x, midx, midy, max.y, min_dist,
within_dist,
+ getSurfacePoints(s_cdt, &sinfo, min.x, midx, midy, max.y, min_dist,
within_dist,
cos_within_ang, on_surf_points, true, false);
//top midx
@@ -1452,7 +1460,7 @@
p.Set(midx, max.y);
on_surf_points.Append(p);
- getSurfacePoints(&sinfo, midx, max.x, midy, max.y, min_dist,
within_dist,
+ getSurfacePoints(s_cdt, &sinfo, midx, max.x, midy, max.y, min_dist,
within_dist,
cos_within_ang, on_surf_points, false, false);
//top left
@@ -1470,7 +1478,7 @@
p.Set(min.x, max.y);
on_surf_points.Append(p);
- getSurfacePoints(&sinfo, min.x, midx, min.y, max.y, min_dist,
+ getSurfacePoints(s_cdt, &sinfo, min.x, midx, min.y, max.y, min_dist,
within_dist, cos_within_ang, on_surf_points, true,
true);
//bottom midx
@@ -1481,7 +1489,7 @@
p.Set(midx, max.y);
on_surf_points.Append(p);
- getSurfacePoints(&sinfo, midx, max.x, min.y, max.y, min_dist,
+ getSurfacePoints(s_cdt, &sinfo, midx, max.x, min.y, max.y, min_dist,
within_dist, cos_within_ang, on_surf_points,
false, true);
//bottom right
@@ -1503,7 +1511,7 @@
p.Set(min.x, midy);
on_surf_points.Append(p);
- getSurfacePoints(&sinfo, min.x, max.x, min.y, midy, min_dist,
+ getSurfacePoints(s_cdt, &sinfo, min.x, max.x, min.y, midy, min_dist,
within_dist, cos_within_ang, on_surf_points, true,
true);
//bottom right
@@ -1514,7 +1522,7 @@
p.Set(max.x, midy);
on_surf_points.Append(p);
- getSurfacePoints(&sinfo, min.x, max.x, midy, max.y, min_dist,
+ getSurfacePoints(s_cdt, &sinfo, min.x, max.x, midy, max.y, min_dist,
within_dist, cos_within_ang, on_surf_points, true,
false);
// top left
@@ -1535,7 +1543,7 @@
p.Set(min.x, max.y);
on_surf_points.Append(p);
- getSurfacePoints(&sinfo, min.x, max.x, min.y, max.y, min_dist,
+ getSurfacePoints(s_cdt, &sinfo, min.x, max.x, min.y, max.y,
min_dist,
within_dist, cos_within_ang, on_surf_points, true,
true);
//bottom right
@@ -2490,6 +2498,7 @@
cdt->p2t_faces = (p2t::CDT **)bu_calloc(brep->m_F.Count(), sizeof(p2t::CDT
*), "poly2tri triangulations");
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");
@@ -2537,6 +2546,13 @@
}
}
+ 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->w3dpnts;
delete s_cdt->vert_pnts;
delete s_cdt->w3dnorms;
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