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