use shape.proximity(s) to test for overlapping faces in CSG import
This commit is contained in:
parent
565a875365
commit
01b491b16e
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user