use shape.proximity(s) to test for overlapping faces in CSG import

This commit is contained in:
Sebastian Hoogen 2015-03-15 10:58:43 +01:00 committed by wmayer
parent 565a875365
commit 01b491b16e

View File

@ -51,6 +51,11 @@ class Overlappingfaces():
return all([f1.isInside(vert.Point,tol,inface) for vert in verts])
return vertsinface(bigface,smallface.Vertexes)
@staticmethod
def dofacesoverlapproximity(bigface,smallface):
l1,l2 = bigface.proximity(smallface)
return len(l1) > 0 or len(l2) > 0
@staticmethod
def dofacesoverlapboolean(bigface,smallface):
#import FreeCAD,FreeCADGui
@ -64,13 +69,20 @@ class Overlappingfaces():
#isinsidelist = []
self.isinsidedict = {}
#for bigface, smallface in itertools.combinations(sortedfaces,2):
for bigfacei, smallfacei in itertools.combinations(range(len(self.sortedfaces)),2):
for bigfacei, smallfacei in\
itertools.combinations(range(len(self.sortedfaces)),2):
try:
overlap = Overlappingfaces.dofacesoverlapboolean(\
self.sortedfaces[bigfacei],self.sortedfaces[smallfacei])
except Part.OCCError:
overlap = Overlappingfaces.dofacesoverlapallverts(\
overlap = Overlappingfaces.dofacesoverlapproximity(\
self.sortedfaces[bigfacei],self.sortedfaces[smallfacei])
except (NotImplementedError, Part.OCCError) as e:
try:
overlap = Overlappingfaces.dofacesoverlapboolean(\
self.sortedfaces[bigfacei],\
self.sortedfaces[smallfacei])
except Part.OCCError:
overlap = Overlappingfaces.dofacesoverlapallverts(\
self.sortedfaces[bigfacei],\
self.sortedfaces[smallfacei])
if overlap:
#isinsidelist.append((bigfacei,smallfacei))
smallinbig = self.isinsidedict.get(bigfacei,[])
@ -158,8 +170,10 @@ class Overlappingfaces():
if len(directchildren) == 1:
obj.Tool = addfeature(directchildren[0],subdict)
else:
obj.Tool = doc.addObject("Part::MultiFuse","facesfromedges_union")
obj.Tool.Shapes = [addfeature(child,subdict) for child in directchildren]
obj.Tool = doc.addObject("Part::MultiFuse",\
"facesfromedges_union")
obj.Tool.Shapes = [addfeature(child,subdict)\
for child in directchildren]
obj.Tool.ViewObject.hide()
obj.ViewObject.hide()
return obj