Revision: 74226
http://sourceforge.net/p/brlcad/code/74226
Author: starseeker
Date: 2019-10-23 18:54:21 +0000 (Wed, 23 Oct 2019)
Log Message:
-----------
If we're fully edge centric, probably not going to need to categorize points in
this fashion.
Modified Paths:
--------------
brlcad/trunk/src/libbrep/cdt_ovlps.cpp
Modified: brlcad/trunk/src/libbrep/cdt_ovlps.cpp
===================================================================
--- brlcad/trunk/src/libbrep/cdt_ovlps.cpp 2019-10-23 18:51:33 UTC (rev
74225)
+++ brlcad/trunk/src/libbrep/cdt_ovlps.cpp 2019-10-23 18:54:21 UTC (rev
74226)
@@ -28,173 +28,6 @@
*
*/
-
-/* TODO list:
- *
- * 1. As a first step, build an rtree in 3D of the mesh vertex points, basing
their bbox size on the dimensions
- * of the smallest of the triangles connected to them. Look for any points
from other meshes whose boxes overlap.
- * These points are "close" and rather than producing the set of small
triangles trying to resolve them while
- * leaving the original vertices in place would entail, instead take the
average of those points and for each
- * vertex replace its point xyz values with the closest point on the
associated surface for that avg point. What
- * that should do is locally adjust each mesh to not overlap near vertices.
Then we calculate the triangle rtree
- * and proceed with overlap testing.
- *
- * Note that vertices on face edges will probably require different handling...
- *
- * 2. Given closest point calculations for intersections, associate them with
either edges or faces (if not near
- * an edge.)
- *
- * 3. Identify triangles fully contained inside another mesh, based on
walking the intersecting triangles by vertex
- * nearest neighbors for all the vertices that are categorized as intruding.
Any triangle that is connected to such
- * a vertex but doesn't itself intersect the mesh is entirely interior, and
we'll need to find closest points for
- * its vertices as well.
- *
- * 4. If the points from #3 involve triangle meshes for splitting that
weren't directly interfering, update the
- * necessary data sets so we know which triangles to split (probably a 2D
triangle/point search of some sort, since
- * unlike the tri/tri intersection tests we can't immediately localize such
points on the intruding triangle mesh
- * if they're coming from a NURBS surface based gcp...)
- *
- * 5. Do a categorization passes as outlined below so we know what
specifically we need to do with each edge/triangle.
- *
- * 6. Set up the replacement CDT problems and update the mesh. Identify
termination criteria and check for them.
- */
-
-// The challenge with splitting triangles is to not introduce badly distorted
triangles into the mesh,
-// while making sure we perform splits that work towards refining overlap
areas. In the diagrams
-// below, "*" represents the edge of the triangle under consideration, "-"
represents the edge of a
-// surrounding triangle, and + represents a new candidate point from an
intersecting triangle.
-// % represents an edge on a triangle from another face.
-//
-// ______________________ ______________________ ______________________
______________________
-// \ ** / \ ** / \ ** /
\ ** /
-// \ * * / \ * * / \ * * /
\ * * /
-// \ * * / \ * * / \ * * /
\ * * /
-// \ * + * / \ * * / \ * * /
\ * + * /
-// \ * * / \ * * / \ * + * /
\ * * /
-// \**********/ \*****+****/ \**********/
\******+***/
-// \ / \ / \ /
\ /
-// \ / \ / \ /
\ /
-// \ / \ / \ /
\ /
-// \ / \ / \ /
\ /
-// 1 \/ 2 \/ 3 \/
4 \/
-// ______________________ ______________________ ______________________
______________________
-// \ ** / \ ** / \ ** /
\ ** /
-// \ * * / \ * * / \ * * /
\ * * /
-// \ * * / \ + * / \ + * /
\ + + /
-// \ * * / \ * * / \ * + * /
\ * * /
-// \ * + * / \ * * / \ * * /
\ * * /
-// \******+***/ \*****+****/ \*****+****/
\*****+****/
-// \ / \ / \ /
\ /
-// \ / \ / \ /
\ /
-// \ / \ / \ /
\ /
-// \ / \ / \ /
\ /
-// 5 \/ 6 \/ 7 \/
8 \/
-// ______________________ ______________________ ______________________
______________________
-// \ ** / \ ** / \ ** /
\ ** /
-// \ * * / \ * * / \ * * /
\ * * /
-// \ * * / \ * * / \ * * /
\ * * /
-// \ * + * / \ * * / \ * * /
\ * + * /
-// \ * * / \ * * / \ * + * /
\ * * /
-// \**********/ \*****+****/ \**********/
\******+***/
-// % % % % % %
% %
-// % % % % % %
% %
-// % % % % % %
% %
-// % % % % % %
% %
-// 9 %% 10 %% 11 %%
12 %%
-// ______________________ ______________________ ______________________
______________________
-// \ ** / \ ** / \ ** /
\ ** /
-// \ * * / \ * * / \ * * /
\ * * /
-// \ * * / \ + * / \ + * /
\ + + /
-// \ * * / \ * * / \ * + * /
\ * * /
-// \ * + * / \ * * / \ * * /
\ * * /
-// \******+***/ \*****+****/ \*****+****/
\*****+****/
-// % % % % % %
% %
-// % % % % % %
% %
-// % % % % % %
% %
-// % % % % % %
% %
-// 13 %% 14 %% 15 %%
16 %%
-// ______________________ ______________________ ______________________
______________________
-// \ ** / \ ** / \ ** /
\ ** /
-// \ * * / \ * * / \ * * /
\ * * /
-// \ * * / \ * * / \ * * /
\ * * /
-// \ * * / \ * * / \ * * /
\ * * /
-// \ *+ * / \ *+ +* / \ *+ * /
\ *+ +* /
-// \**********/ \**********/ \*****+****/
\******+***/
-// \ / \ / \ /
\ /
-// \ / \ / \ /
\ /
-// \ / \ / \ /
\ /
-// \ / \ / \ /
\ /
-// 17 \/ 18 \/ 19 \/
20 \/
-//
-// Initial thoughts:
-//
-// 1. If all new candidate points are far from the triangle edges, (cases 1
and 9) we can simply
-// replace the current triangle with the CDT of its interior.
-//
-// 2. Any time a new point is anywhere near an edge, we risk creating a long,
slim triangle. In
-// those situations, we want to remove both the active triangle and the
triangle sharing that edge,
-// and CDT the resulting point set to make new triangles to replace both.
(cases other than 1 and 9)
-//
-// 3. If a candidate triangle has multiple edges with candidate points near
them, perform the
-// above operation for each edge - i.e. the replacement triangles from the
first CDT that share the
-// original un-replaced triangle edges should be used as the basis for CDTs
per step 2 with
-// their neighbors. This is true both for the "current" triangle and the
triangle pulled in for
-// the pair processing, if the latter is an overlapping triangle. (cases 6-8)
-//
-// 4. If we can't remove the edge in that fashion (i.e. we're on the edge of
the face) but have a
-// candidate point close to that edge, we need to split the edge (maybe near
that point if we can
-// manage it... right now we've only got a midpoint split...), reject any new
candidate points that
-// are too close to the new edges, and re- CDT the resulting set. Any
remaining overlaps will need
-// to be resolved in a subsequent pass, since the same
"not-too-close-to-the-edge" sampling
-// constraints we deal with in the initial surface sampling will also be
needed here. (cases 10-16)
-//
-// 5. A point close to an existing vertex will probably need to be rejected or
consolidate into the
-// existing vertex, depending on how the triangles work out. We don't want to
introduce very tiny
-// triangles trying to resolve "close" points - in that situation we probably
want to "collapse" the
-// close points into a single point with the properties we need.
-//
-// 5. We'll probably want some sort of filter to avoid splitting very tiny
triangles interfering with
-// much larger triangles - otherwise we may end up with a lot of unnecessary
splits of triangles
-// that would have been "cleared" anyway by the breakup of the larger
triangle...
-//
-//
-// Each triangle looks like it breaks down into regions:
-/*
- *
- * /\
- * /44\
- * /3333\
- * / 3333 \
- * / 33 \
- * / /\ \
- * / / \ \
- * / / \ \
- * / / \ \
- * / 2 / \ 2 \
- * / / \ \
- * / / \ \
- * / / 1 \ \
- * / / \ \
- * / / \ \
- * /333 / \ 333\
- * /33333______________________33333\
- * /43333 2 33334\
- * --------------------------------------
- */
-//
-// Whether points are in any of the above defined regions after the
get-closest-points pass will
-// determine how the triangle is handled:
-//
-// Points in region 1 and none of the others - split just this triangle.
-// Points in region 2 and not 3/4, remove associated edge and triangulate with
pair.
-// Points in region 3 and not 4, remove (one after the other) both associated
edges and triangulate with pairs.
-// Points in region 4 - remove candidate new point - too close to existing
vertex. "Too close" will probably
-// have to be based on the relative triangle dimensions, both of the
interloper and the intruded-upon triangles...
-// If we have a large and a small triangle interacting, should probably just
break the large one down. If we
-// hit this situation with comparably sized triangles, probably need to look
at a point averaging/merge of some sort.
-
-
-
#include "common.h"
#include <queue>
#include <numeric>
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