Commit 618caf6d authored by lode_leroy's avatar lode_leroy

fix speedup shortcuts

git-svn-id: https://pycam.svn.sourceforge.net/svnroot/pycam/trunk@53 bbaffbd6-741e-11dd-a85d-61de82d9cad9
parent 6d649676
......@@ -7,6 +7,7 @@ from math import sqrt
class BaseCutter:
id = 0
vertical = Point(0,0,-1)
def __init__(self, location, radius):
self.location = location
......@@ -48,7 +49,7 @@ class BaseCutter:
if sqr(c.x-self.location.x)+sqr(c.y-self.location.y)>self.radiussq+self.radius*triangle.radius()+triangle.radiussq():
return None
(cl,d)= self.intersect(Point(0,0,-1), triangle)
(cl,d)= self.intersect(BaseCutter.vertical, triangle)
return cl
def push(self, dx, dy, triangle):
......
......@@ -120,7 +120,7 @@ class CylindricalCutter(BaseCutter):
if d_t < d:
d = d_t
cl = cl_t
if cl:
if cl and direction.x==0 and direction.y==0:
return (cl,d)
(cl_e1,d_e1) = self.intersect_circle_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_circle_edge(direction, triangle.e2)
......@@ -134,7 +134,7 @@ class CylindricalCutter(BaseCutter):
if d_e3 < d:
d = d_e3
cl = cl_e3
if cl:
if cl and direction.x==0 and direction.y==0:
return (cl,d)
(cl_p1,d_p1) = self.intersect_circle_vertex(direction, triangle.p1)
(cl_p2,d_p2) = self.intersect_circle_vertex(direction, triangle.p2)
......@@ -148,12 +148,12 @@ class CylindricalCutter(BaseCutter):
if d_p3 < d:
d = d_p3
cl = cl_p3
if cl:
if cl and direction.x==0 and direction.y==0:
return (cl,d)
if direction.x != 0 or direction.y != 0:
(cl_e1,d_e1) = self.intersect_cylinder_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_cylinder_edge(direction, triangle.e2)
(cl_e3,d_e3) = self.intersect_cylinder_edge(direction, triangle.e3)
(cl_p1,d_p1) = self.intersect_cylinder_vertex(direction, triangle.p1)
(cl_p2,d_p2) = self.intersect_cylinder_vertex(direction, triangle.p2)
(cl_p3,d_p3) = self.intersect_cylinder_vertex(direction, triangle.p3)
if d_p1 < d:
d = d_p1
cl = cl_p1
......@@ -163,11 +163,9 @@ class CylindricalCutter(BaseCutter):
if d_p3 < d:
d = d_p3
cl = cl_p3
if cl:
return (cl,d)
(cl_p1,d_p1) = self.intersect_cylinder_vertex(direction, triangle.p1)
(cl_p2,d_p2) = self.intersect_cylinder_vertex(direction, triangle.p2)
(cl_p3,d_p3) = self.intersect_cylinder_vertex(direction, triangle.p3)
(cl_e1,d_e1) = self.intersect_cylinder_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_cylinder_edge(direction, triangle.e2)
(cl_e3,d_e3) = self.intersect_cylinder_edge(direction, triangle.e3)
if d_e1 < d:
d = d_e1
cl = cl_e1
......
......@@ -122,7 +122,7 @@ class SphericalCutter(BaseCutter):
if d_t < d:
d = d_t
cl = cl_t
if cl:
if cl and direction.x==0 and direction.y==0:
return (cl,d)
(cl_e1,d_e1) = self.intersect_sphere_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_sphere_edge(direction, triangle.e2)
......@@ -136,7 +136,7 @@ class SphericalCutter(BaseCutter):
if d_e3 < d:
d = d_e3
cl = cl_e3
if cl:
if cl and direction.x==0 and direction.y==0:
return (cl,d)
(cl_p1,d_p1) = self.intersect_sphere_vertex(direction, triangle.p1)
(cl_p2,d_p2) = self.intersect_sphere_vertex(direction, triangle.p2)
......@@ -150,12 +150,12 @@ class SphericalCutter(BaseCutter):
if d_p3 < d:
d = d_p3
cl = cl_p3
if cl:
if cl and direction.x==0 and direction.y==0:
return (cl,d)
if direction.x != 0 or direction.y != 0:
(cl_e1,d_e1) = self.intersect_cylinder_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_cylinder_edge(direction, triangle.e2)
(cl_e3,d_e3) = self.intersect_cylinder_edge(direction, triangle.e3)
(cl_p1,d_p1) = self.intersect_cylinder_vertex(direction, triangle.p1)
(cl_p2,d_p2) = self.intersect_cylinder_vertex(direction, triangle.p2)
(cl_p3,d_p3) = self.intersect_cylinder_vertex(direction, triangle.p3)
if d_p1 < d:
d = d_p1
cl = cl_p1
......@@ -165,11 +165,9 @@ class SphericalCutter(BaseCutter):
if d_p3 < d:
d = d_p3
cl = cl_p3
if cl:
return (cl,d)
(cl_p1,d_p1) = self.intersect_cylinder_vertex(direction, triangle.p1)
(cl_p2,d_p2) = self.intersect_cylinder_vertex(direction, triangle.p2)
(cl_p3,d_p3) = self.intersect_cylinder_vertex(direction, triangle.p3)
(cl_e1,d_e1) = self.intersect_cylinder_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_cylinder_edge(direction, triangle.e2)
(cl_e3,d_e3) = self.intersect_cylinder_edge(direction, triangle.e3)
if d_e1 < d:
d = d_e1
cl = cl_e1
......
......@@ -186,8 +186,6 @@ class ToroidalCutter(BaseCutter):
if d_t < d:
d = d_t
cl = cl_t
if cl:
return (cl,d)
(cl_e1,d_e1) = self.intersect_torus_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_torus_edge(direction, triangle.e2)
(cl_e3,d_e3) = self.intersect_torus_edge(direction, triangle.e3)
......@@ -200,8 +198,6 @@ class ToroidalCutter(BaseCutter):
if d_e3 < d:
d = d_e3
cl = cl_e3
if cl:
return (cl,d)
(cl_p1,d_p1) = self.intersect_torus_vertex(direction, triangle.p1)
(cl_p2,d_p2) = self.intersect_torus_vertex(direction, triangle.p2)
(cl_p3,d_p3) = self.intersect_torus_vertex(direction, triangle.p3)
......@@ -214,18 +210,13 @@ class ToroidalCutter(BaseCutter):
if d_p3 < d:
d = d_p3
cl = cl_p3
if cl:
return (cl,d)
(cl_t,d_t) = self.intersect_circle_triangle(direction, triangle)
(cl_p1,d_p1) = self.intersect_circle_vertex(direction, triangle.p1)
(cl_p2,d_p2) = self.intersect_circle_vertex(direction, triangle.p2)
(cl_p3,d_p3) = self.intersect_circle_vertex(direction, triangle.p3)
(cl_e1,d_e1) = self.intersect_circle_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_circle_edge(direction, triangle.e2)
(cl_e3,d_e3) = self.intersect_circle_edge(direction, triangle.e3)
if d_t < d:
d = d_t
cl = cl_t
(cl_p1,d_p1) = self.intersect_circle_vertex(direction, triangle.p1)
(cl_p2,d_p2) = self.intersect_circle_vertex(direction, triangle.p2)
(cl_p3,d_p3) = self.intersect_circle_vertex(direction, triangle.p3)
if d_p1 < d:
d = d_p1
cl = cl_p1
......@@ -235,6 +226,9 @@ class ToroidalCutter(BaseCutter):
if d_p3 < d:
d = d_p3
cl = cl_p3
(cl_e1,d_e1) = self.intersect_circle_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_circle_edge(direction, triangle.e2)
(cl_e3,d_e3) = self.intersect_circle_edge(direction, triangle.e3)
if d_e1 < d:
d = d_e1
cl = cl_e1
......@@ -248,9 +242,6 @@ class ToroidalCutter(BaseCutter):
(cl_p1,d_p1) = self.intersect_cylinder_vertex(direction, triangle.p1)
(cl_p2,d_p2) = self.intersect_cylinder_vertex(direction, triangle.p2)
(cl_p3,d_p3) = self.intersect_cylinder_vertex(direction, triangle.p3)
(cl_e1,d_e1) = self.intersect_cylinder_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_cylinder_edge(direction, triangle.e2)
(cl_e3,d_e3) = self.intersect_cylinder_edge(direction, triangle.e3)
if d_p1 < d:
d = d_p1
cl = cl_p1
......@@ -260,6 +251,9 @@ class ToroidalCutter(BaseCutter):
if d_p3 < d:
d = d_p3
cl = cl_p3
(cl_e1,d_e1) = self.intersect_cylinder_edge(direction, triangle.e1)
(cl_e2,d_e2) = self.intersect_cylinder_edge(direction, triangle.e2)
(cl_e3,d_e3) = self.intersect_cylinder_edge(direction, triangle.e3)
if d_e1 < d:
d = d_e1
cl = cl_e1
......
......@@ -43,7 +43,7 @@ def UniqueEdge(p1, p2):
return e
def ImportModel(filename):
def ImportModel(filename, use_kdtree=True):
global vertices, edges, kdtree
vertices = 0
edges = 0
......@@ -60,7 +60,8 @@ def ImportModel(filename):
endloop = re.compile("\s*endloop\s+")
vertex = re.compile("\s*vertex\s+(?P<x>[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?)\s+(?P<y>[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?)\s+(?P<z>[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?)\s+")
kdtree = PointKdtree([],3,1,epsilon)
if use_kdtree:
kdtree = PointKdtree([],3,1,epsilon)
model = Model()
t = None
......@@ -127,8 +128,9 @@ def ImportModel(filename):
if m:
continue
model.p_kdtree = kdtree
model.t_kdtree = TriangleKdtree(model.triangles())
if use_kdtree:
model.p_kdtree = kdtree
model.t_kdtree = TriangleKdtree(model.triangles())
print "Imported STL model: ", vertices, "vertices,", edges, "edges,", len(model.triangles()),"triangles"
vertices = 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment