diff --git a/hull.scad b/hull.scad index 4c32f26..814ce6c 100644 --- a/hull.scad +++ b/hull.scad @@ -208,9 +208,11 @@ function _hull3d_iterative(points, triangles, planes, remaining, _i=0) = // pick a point i = remaining[_i], // evaluate the triangle plane equations at point i +// xx=[for(i=[0:len(planes)-1],p=[planes[i]]) if(len(p)!=4) echo(i=i,len(p))0 ],//echo([each points[i], -1]), +// planeq_val = [for(p=planes) p*[each points[i], -1]], planeq_val = planes*[each points[i], -1], // find the triangles that are in conflict with the point (point not inside) - conflicts = [ for (i = [0:1:len(planes)-1]) if (planeq_val[i]>0) i ], + conflicts = [ for (i = [0:1:len(planes)-1]) if (planeq_val[i]>EPSILON) i ], // collect the halfedges of all triangles that are in conflict halfedges = [ for(c = conflicts, i = [0:2]) @@ -220,15 +222,17 @@ function _hull3d_iterative(points, triangles, planes, remaining, _i=0) = horizon = _remove_internal_edges(halfedges), // generate new triangles connecting point i to each horizon halfedge vertices tri2add = [ for (h = horizon) concat(h,i) ], +// w=[for(t=tri2add) if(collinear(points[t[0]],points[t[1]],points[t[2]])) echo(t)], // add tria2add and remove conflict triangles new_triangles = concat( tri2add, - [ for (i = [0:1:len(planes)-1]) if (planeq_val[i]<=0) triangles[i] ] + [ for (i = [0:1:len(planes)-1]) if (planeq_val[i]<=EPSILON) triangles[i] ] ), +// y=[for(t=tri2add) if([]==plane3pt_indexed(points,t[0],t[1],t[2])) echo(tri2add=t,pts=[for(ti=t) points[ti]])], // add the plane equations of new added triangles and remove the plane equations of the conflict ones new_planes = concat( [ for (t = tri2add) plane3pt_indexed(points, t[0], t[1], t[2]) ], - [ for (i = [0:1:len(planes)-1]) if (planeq_val[i]<=0) planes[i] ] + [ for (i = [0:1:len(planes)-1]) if (planeq_val[i]<=EPSILON) planes[i] ] ) ) _hull3d_iterative( points,