From f65228f0af00e63634663598ab2913cd2565c9c5 Mon Sep 17 00:00:00 2001
From: Revar Desmera <revarbat@gmail.com>
Date: Fri, 20 Mar 2020 13:54:38 -0700
Subject: [PATCH] Remove casual quantizing from vnf_add_faces()

---
 version.scad |  2 +-
 vnf.scad     | 43 +++++++++++++++++++------------------------
 2 files changed, 20 insertions(+), 25 deletions(-)

diff --git a/version.scad b/version.scad
index 7ff8aaa..58d6ed0 100644
--- a/version.scad
+++ b/version.scad
@@ -8,7 +8,7 @@
 //////////////////////////////////////////////////////////////////////
 
 
-BOSL_VERSION = [2,0,206];
+BOSL_VERSION = [2,0,207];
 
 
 // Section: BOSL Library Version Functions
diff --git a/vnf.scad b/vnf.scad
index d555e69..568ec7d 100644
--- a/vnf.scad
+++ b/vnf.scad
@@ -57,7 +57,7 @@ function vnf_quantize(vnf,q=pow(2,-12)) =
 
 // Function: vnf_get_vertex()
 // Usage:
-//   vvnf = vnf_get_vertex(vnf, p, [eps]);
+//   vvnf = vnf_get_vertex(vnf, p);
 // Description:
 //   Finds the index number of the given vertex point `p` in the given VNF structure `vnf`.  If said
 //   point does not already exist in the VNF vertex list, it is added.  Returns: `[INDEX, VNF]` where
@@ -66,19 +66,16 @@ function vnf_quantize(vnf,q=pow(2,-12)) =
 // Arguments:
 //   vnf = The VNF structue to get the point index from.
 //   p = The point, or list of points to get the index of.
-//   eps = Maximum variance when comparing points.  Default: 2^-30
 // Example:
 //   vnf1 = vnf_get_vertex(p=[3,5,8]);  // Returns: [0, [[[3,5,8]],[]]]
 //   vnf2 = vnf_get_vertex(vnf1, p=[3,2,1]);  // Returns: [1, [[[3,5,8],[3,2,1]],[]]]
 //   vnf3 = vnf_get_vertex(vnf2, p=[3,5,8]);  // Returns: [0, [[[3,5,8],[3,2,1]],[]]]
 //   vnf4 = vnf_get_vertex(vnf3, p=[[1,3,2],[3,2,1]]);  // Returns: [[1,2], [[[3,5,8],[3,2,1],[1,3,2]],[]]]
-function vnf_get_vertex(vnf=EMPTY_VNF, p, eps=pow(2,-30)) =
-	is_path(p)? _vnf_get_vertices(vnf, p, eps=eps) :
+function vnf_get_vertex(vnf=EMPTY_VNF, p) =
+	is_path(p)? _vnf_get_vertices(vnf, p) :
 	assert(is_vnf(vnf))
 	assert(is_vector(p))
 	let(
-		quantum = pow(2,floor(log2(eps))),
-		p = quant(p,quantum),
 		v = search([p], vnf[0])[0]
 	) [
 		v != []? v : len(vnf[0]),
@@ -90,11 +87,11 @@ function vnf_get_vertex(vnf=EMPTY_VNF, p, eps=pow(2,-30)) =
 
 
 // Internal use only
-function _vnf_get_vertices(vnf=EMPTY_VNF, pts, eps=pow(2,-30), _i=0, _idxs=[]) =
+function _vnf_get_vertices(vnf=EMPTY_VNF, pts, _i=0, _idxs=[]) =
 	_i>=len(pts)? [_idxs, vnf] :
 	let(
-		vvnf = vnf_get_vertex(vnf, pts[_i], eps=eps)
-	) _vnf_get_vertices(vvnf[1], pts, eps=eps, _i=_i+1, _idxs=concat(_idxs,[vvnf[0]]));
+		vvnf = vnf_get_vertex(vnf, pts[_i])
+	) _vnf_get_vertices(vvnf[1], pts, _i=_i+1, _idxs=concat(_idxs,[vvnf[0]]));
 
 
 // Function: vnf_add_face()
@@ -107,13 +104,12 @@ function _vnf_get_vertices(vnf=EMPTY_VNF, pts, eps=pow(2,-30), _i=0, _idxs=[]) =
 // Arguments:
 //   vnf = The VNF structure to add a face to.
 //   pts = The vertex points for the face.
-//   eps = Maximum variance when comparing points.  Default: `EPSILON` (1e-9)
-function vnf_add_face(vnf=EMPTY_VNF, pts, eps=pow(2,-30)) =
+function vnf_add_face(vnf=EMPTY_VNF, pts) =
 	assert(is_vnf(vnf))
 	assert(is_path(pts))
 	let(
-		vvnf = vnf_get_vertex(vnf, pts, eps=eps),
-		face = deduplicate(vvnf[0], closed=true, eps=eps),
+		vvnf = vnf_get_vertex(vnf, pts),
+		face = deduplicate(vvnf[0], closed=true),
 		vnf2 = vvnf[1]
 	) [
 		vnf_vertices(vnf2),
@@ -123,7 +119,7 @@ function vnf_add_face(vnf=EMPTY_VNF, pts, eps=pow(2,-30)) =
 
 // Function: vnf_add_faces()
 // Usage:
-//   vnf_add_faces(vnf, faces, [eps]);
+//   vnf_add_faces(vnf, faces);
 // Description:
 //   Given a VNF structure and a list of faces, where each face is given as a list of vertex points,
 //   adds the faces to the VNF structure.  Returns the modified VNF structure `[VERTICES, FACES]`.
@@ -132,10 +128,9 @@ function vnf_add_face(vnf=EMPTY_VNF, pts, eps=pow(2,-30)) =
 // Arguments:
 //   vnf = The VNF structure to add a face to.
 //   faces = The list of faces, where each face is given as a list of vertex points.
-//   eps = Maximum variance when comparing points.  Default: `EPSILON` (1e-9)
-function vnf_add_faces(vnf=EMPTY_VNF, faces, eps=pow(2,-30), _i=0) =
+function vnf_add_faces(vnf=EMPTY_VNF, faces, _i=0) =
 	(assert(is_vnf(vnf)) assert(is_list(faces)) _i>=len(faces))? vnf :
-	vnf_add_faces(vnf_add_face(vnf, faces[_i], eps=eps), faces, eps=eps, _i=_i+1);
+	vnf_add_faces(vnf_add_face(vnf, faces[_i]), faces, _i=_i+1);
 
 
 // Function: vnf_merge()
@@ -155,10 +150,10 @@ function vnf_merge(vnfs=[],_i=0,_acc=EMPTY_VNF) =
 
 // Function: vnf_compact()
 // Usage:
-//   cvnf = vnf_compact(vnf, [eps]);
+//   cvnf = vnf_compact(vnf);
 // Description:
 //   Takes a VNF and consolidates all duplicate vertices, and drops unreferenced vertices.
-function vnf_compact(vnf,eps=pow(2,-30)) =
+function vnf_compact(vnf) =
 	let(
 		verts = vnf[0],
 		faces = [
@@ -166,7 +161,7 @@ function vnf_compact(vnf,eps=pow(2,-30)) =
 				for (i=face) verts[i]
 			]
 		]
-	) vnf_add_faces(faces=faces,eps=eps);
+	) vnf_add_faces(faces=faces);
 
 
 // Function: vnf_triangulate()
@@ -427,9 +422,9 @@ module vnf_polyhedron(vnf, convexity=2) {
 //       path3d(regular_ngon(n=5, d=100),100)
 //   ], slices=0, caps=false);
 //   vnf_validate(vnf,size=2);
-function vnf_validate(vnf, show_warns=true, check_isects=false, eps=pow(2,-30)) =
+function vnf_validate(vnf, show_warns=true, check_isects=false) =
 	let(
-		vnf = vnf_compact(vnf,eps=eps),
+		vnf = vnf_compact(vnf),
 		edges = sort([
 			for (face=vnf[1], edge=pair_wrap(face))
 			edge[0]<edge[1]? edge : [edge[1],edge[0]]
@@ -450,7 +445,7 @@ function vnf_validate(vnf, show_warns=true, check_isects=false, eps=pow(2,-30))
 			for (face = vnf[1]) let(
 				verts = [for (k=face) vnf[0][k]],
 				area = abs(polygon_area(verts))
-			) if (area < eps) [
+			) if (area < EPSILON) [
 				"WARNING",
 				"NULL_FACE",
 				str("Face has zero area: ",fmt_float(area,15)),
@@ -461,7 +456,7 @@ function vnf_validate(vnf, show_warns=true, check_isects=false, eps=pow(2,-30))
 		nonplanars = unique([
 			for (face = vnf[1]) let(
 				verts = [for (k=face) vnf[0][k]]
-			) if (!points_are_coplanar(verts,eps=eps)) [
+			) if (!points_are_coplanar(verts)) [
 				"ERROR",
 				"NONPLANAR",
 				"Face vertices are not coplanar",