Fixed hole detection for bottom faces.

This commit is contained in:
Markus Lampert
2017-12-04 01:39:25 -08:00
parent 4f785cdd37
commit fdea03a594
2 changed files with 15 additions and 4 deletions

View File

@@ -232,9 +232,15 @@ class ObjectOp(PathOp.ObjectOp):
f = shape.getElement(candidateFaceName)
if PathUtils.isDrillable(shape, f, tooldiameter):
PathLog.debug('face candidate: {} is drillable '.format(f))
x = f.Surface.Center.x
y = f.Surface.Center.y
diameter = f.BoundBox.XLength
if hasattr(f.Surface, 'Center'):
x = f.Surface.Center.x
y = f.Surface.Center.y
diameter = f.BoundBox.XLength
else:
center = f.Edges[0].Curve.Center
x = center.x
y = center.y
diameter = f.Edges[0].Curve.Radius * 2
holelist.append({'featureName': candidateFaceName, 'feature': f, 'x': x, 'y': y, 'd': diameter, 'enabled': True})
features.append((baseobject, candidateFaceName))
PathLog.debug("Found hole feature %s.%s" % (baseobject.Label, candidateFaceName))

View File

@@ -166,7 +166,12 @@ def isDrillable(obj, candidate, tooldiameter=None, includePartials=False):
drillable = True
elif type(face.Surface) == Part.Plane and PathGeom.pointsCoincide(face.Surface.Axis, FreeCAD.Vector(0,0,1)):
if len(face.Edges) == 1 and type(face.Edges[0].Curve) == Part.Circle:
return True
center = face.Edges[0].Curve.Center
if obj.isInside(center, 1e-6, False):
if tooldiameter is not None:
drillable = face.Edges[0].Curve.Radius >= tooldiameter/2
else:
drillable = True
else:
for edge in candidate.Edges:
if isinstance(edge.Curve, Part.Circle) and (includePartials or edge.isClosed()):