diff --git a/camlib.py b/camlib.py index 7340501b..13ff1b60 100644 --- a/camlib.py +++ b/camlib.py @@ -46,7 +46,7 @@ import ezdxf # TODO: Commented for FlatCAM packaging with cx_freeze # from scipy.spatial import KDTree, Delaunay -from scipy.spatial import Delaunay +# from scipy.spatial import Delaunay from flatcamParsers.ParseSVG import * from flatcamParsers.ParseDXF import * @@ -7409,62 +7409,62 @@ def parse_gerber_number(strnumber, int_digits, frac_digits, zeros): return ret_val -def alpha_shape(points, alpha): - """ - Compute the alpha shape (concave hull) of a set of points. - - @param points: Iterable container of points. - @param alpha: alpha value to influence the gooeyness of the border. Smaller - numbers don't fall inward as much as larger numbers. Too large, - and you lose everything! - """ - if len(points) < 4: - # When you have a triangle, there is no sense in computing an alpha - # shape. - return MultiPoint(list(points)).convex_hull - - def add_edge(edges, edge_points, coords, i, j): - """Add a line between the i-th and j-th points, if not in the list already""" - if (i, j) in edges or (j, i) in edges: - # already added - return - edges.add( (i, j) ) - edge_points.append(coords[ [i, j] ]) - - coords = np.array([point.coords[0] for point in points]) - - tri = Delaunay(coords) - edges = set() - edge_points = [] - # loop over triangles: - # ia, ib, ic = indices of corner points of the triangle - for ia, ib, ic in tri.vertices: - pa = coords[ia] - pb = coords[ib] - pc = coords[ic] - - # Lengths of sides of triangle - a = math.sqrt((pa[0]-pb[0])**2 + (pa[1]-pb[1])**2) - b = math.sqrt((pb[0]-pc[0])**2 + (pb[1]-pc[1])**2) - c = math.sqrt((pc[0]-pa[0])**2 + (pc[1]-pa[1])**2) - - # Semiperimeter of triangle - s = (a + b + c)/2.0 - - # Area of triangle by Heron's formula - area = math.sqrt(s*(s-a)*(s-b)*(s-c)) - circum_r = a*b*c/(4.0*area) - - # Here's the radius filter. - #print circum_r - if circum_r < 1.0/alpha: - add_edge(edges, edge_points, coords, ia, ib) - add_edge(edges, edge_points, coords, ib, ic) - add_edge(edges, edge_points, coords, ic, ia) - - m = MultiLineString(edge_points) - triangles = list(polygonize(m)) - return cascaded_union(triangles), edge_points +# def alpha_shape(points, alpha): +# """ +# Compute the alpha shape (concave hull) of a set of points. +# +# @param points: Iterable container of points. +# @param alpha: alpha value to influence the gooeyness of the border. Smaller +# numbers don't fall inward as much as larger numbers. Too large, +# and you lose everything! +# """ +# if len(points) < 4: +# # When you have a triangle, there is no sense in computing an alpha +# # shape. +# return MultiPoint(list(points)).convex_hull +# +# def add_edge(edges, edge_points, coords, i, j): +# """Add a line between the i-th and j-th points, if not in the list already""" +# if (i, j) in edges or (j, i) in edges: +# # already added +# return +# edges.add( (i, j) ) +# edge_points.append(coords[ [i, j] ]) +# +# coords = np.array([point.coords[0] for point in points]) +# +# tri = Delaunay(coords) +# edges = set() +# edge_points = [] +# # loop over triangles: +# # ia, ib, ic = indices of corner points of the triangle +# for ia, ib, ic in tri.vertices: +# pa = coords[ia] +# pb = coords[ib] +# pc = coords[ic] +# +# # Lengths of sides of triangle +# a = math.sqrt((pa[0]-pb[0])**2 + (pa[1]-pb[1])**2) +# b = math.sqrt((pb[0]-pc[0])**2 + (pb[1]-pc[1])**2) +# c = math.sqrt((pc[0]-pa[0])**2 + (pc[1]-pa[1])**2) +# +# # Semiperimeter of triangle +# s = (a + b + c)/2.0 +# +# # Area of triangle by Heron's formula +# area = math.sqrt(s*(s-a)*(s-b)*(s-c)) +# circum_r = a*b*c/(4.0*area) +# +# # Here's the radius filter. +# #print circum_r +# if circum_r < 1.0/alpha: +# add_edge(edges, edge_points, coords, ia, ib) +# add_edge(edges, edge_points, coords, ib, ic) +# add_edge(edges, edge_points, coords, ic, ia) +# +# m = MultiLineString(edge_points) +# triangles = list(polygonize(m)) +# return cascaded_union(triangles), edge_points # def voronoi(P): # """