Path: Fix weakness in face analysis for unique OuterWire cases

This commit is contained in:
Russell Johnson
2020-04-13 14:55:24 -05:00
parent 75ad65ecf1
commit 8e58f10f7f

View File

@@ -384,7 +384,6 @@ class ObjectSurface(PathOp.ObjectOp):
self.collectiveShapes = list()
self.individualShapes = list()
self.avoidShapes = list()
self.deflection = None
self.tempGroup = None
self.CutClimb = False
self.closedGap = False
@@ -408,6 +407,7 @@ class ObjectSurface(PathOp.ObjectOp):
# Identify parent Job
JOB = PathUtils.findParentJob(obj)
self.JOB = JOB
if JOB is None:
PathLog.error(translate('PathSurface', "No JOB"))
return
@@ -482,14 +482,6 @@ class ObjectSurface(PathOp.ObjectOp):
# make circle for workplane
self.wpc = Part.makeCircle(2.0)
# Set deflection values for mesh generation
try: # try/except is for Path Jobs created before GeometryTolerance
self.deflection = JOB.GeometryTolerance.Value
except AttributeError as ee:
PathLog.warning('Error setting Mesh deflection: {}. Using PathPreferences.defaultGeometryTolerance().'.format(ee))
import PathScripts.PathPreferences as PathPreferences
self.deflection = PathPreferences.defaultGeometryTolerance()
# Save model visibilities for restoration
if FreeCAD.GuiUp:
for m in range(0, len(JOB.Model.Group)):
@@ -596,7 +588,6 @@ class ObjectSurface(PathOp.ObjectOp):
self.depthParams = None
self.midDep = None
self.wpc = None
self.deflection = None
del self.modelSTLs
del self.safeSTLs
del self.modelTypes
@@ -608,7 +599,6 @@ class ObjectSurface(PathOp.ObjectOp):
del self.depthParams
del self.midDep
del self.wpc
del self.deflection
execTime = time.time() - startTime
PathLog.info('Operation time: {} sec.'.format(execTime))
@@ -1116,10 +1106,24 @@ class ObjectSurface(PathOp.ObjectOp):
PathLog.debug(' -number of wires found is {}'.format(nf))
if nf == 1:
(area, W, raised) = WIRES[0]
return [(W, raised)]
owLen = fc.OuterWire.Length
wLen = W.Length
if abs(owLen - wLen) > 0.0000001:
OW = Part.Wire(Part.__sortEdges__(fc.OuterWire.Edges))
return [(OW, False), (W, raised)]
else:
return [(W, raised)]
else:
sortedWIRES = sorted(WIRES, key=index0, reverse=True)
return [(W, raised) for (area, W, raised) in sortedWIRES] # outer, then inner by area size
WRS = [(W, raised) for (area, W, raised) in sortedWIRES] # outer, then inner by area size
# Check if OuterWire is larger than largest in WRS list
(W, raised) = WRS[0]
owLen = fc.OuterWire.Length
wLen = W.Length
if abs(owLen - wLen) > 0.0000001:
OW = Part.Wire(Part.__sortEdges__(fc.OuterWire.Edges))
WRS.insert(0, (OW, False))
return WRS
return False