Okay as you are both recommending checking Vertex the following is my effortedwilliams16 wrote: ↑Sat Jun 18, 2022 5:58 amHere's a hack, just comparing vertices.Code: Select all
def shapeGlobal(part): placement = part.Placement # in world coords if hasattr(part,'LinkedObject'): part = part.getLinkedObject() gdobjs = [obj for obj in part.OutList if 'GDML' in obj.Name] gdobj = gdobjs[0] # only one we assume return gdobj.Shape.copy().transformShape(placement.Matrix) def drawFace(vs): wire = Part.makePolygon(vs) face = Part.Face(wire) return face doc = App.ActiveDocument obj = doc.getObject("Detector") shp1 = shapeGlobal(obj) obj = doc.getObject("Detector001") shp2 = shapeGlobal(obj) v1 = [v.Point for v in shp1.Vertexes] v2 = [v.Point for v in shp2.Vertexes] vcommon = [v for v in v1 if any([w.isEqual(v, 1e-7) for w in v2])] if len(vcommon) ==4: Part.show(drawFace(vcommon))
Code: Select all
def printVertexes(i, v1, v2):
print(f'{i} v1 {v1.X} {v1.Y} {v1.Z} v2 {v2.X} {v2.Y} {v2.Z} {v1.isEqual(v2)}')
def compareVertex(i, v1, v2, tol = 1e-7):
printVertexes(i, v1, v2)
#return v1.isEqual(v2, tol)
return v1.isEqual(v2)
def checkFaces(i, face1, face2):
for v1 in face1.Vertexes:
for v2 in face2.Vertexes:
if compareVertex(i, v1, v2) == False:
return False
return True
def commonFace4(shape1, shape2, tol = 1e-7):
print('CommonFace 4')
for i, face1 in enumerate(shape1.Faces):
for face2 in shape2.Faces:
if checkFaces(i, face1, face2) == True:
print(f'Common Face {i}')
Code: Select all
18:42:02 CommonFace 4
18:42:02 0 v1 -1000.0 -1000.0 1000.0 v2 1000.0 -1000.0 1000.0 False
18:42:02 0 v1 -1000.0 -1000.0 1000.0 v2 3000.0 -1000.0 1000.0 False
18:42:02 0 v1 -1000.0 -1000.0 1000.0 v2 3000.0 -1000.0 -1000.0 False
18:42:02 0 v1 -1000.0 -1000.0 1000.0 v2 3000.0 1000.0 -1000.0 False
18:42:02 0 v1 -1000.0 -1000.0 1000.0 v2 1000.0 1000.0 -1000.0 False
18:42:02 0 v1 -1000.0 -1000.0 1000.0 v2 1000.0 1000.0 1000.0 False
18:42:02 1 v1 1000.0 -1000.0 1000.0 v2 1000.0 -1000.0 1000.0 False
18:42:02 1 v1 1000.0 -1000.0 1000.0 v2 3000.0 -1000.0 1000.0 False
18:42:02 1 v1 1000.0 -1000.0 1000.0 v2 3000.0 -1000.0 -1000.0 False
18:42:02 1 v1 1000.0 -1000.0 1000.0 v2 3000.0 1000.0 -1000.0 False
18:42:02 1 v1 1000.0 -1000.0 1000.0 v2 1000.0 1000.0 -1000.0 False
18:42:02 1 v1 1000.0 -1000.0 1000.0 v2 1000.0 1000.0 1000.0 False
18:42:02 2 v1 1000.0 -1000.0 -1000.0 v2 1000.0 -1000.0 1000.0 False
18:42:02 2 v1 1000.0 -1000.0 -1000.0 v2 3000.0 -1000.0 1000.0 False
18:42:02 2 v1 1000.0 -1000.0 -1000.0 v2 3000.0 -1000.0 -1000.0 False
18:42:02 2 v1 1000.0 -1000.0 -1000.0 v2 3000.0 1000.0 -1000.0 False
18:42:02 2 v1 1000.0 -1000.0 -1000.0 v2 1000.0 1000.0 -1000.0 False
18:42:02 2 v1 1000.0 -1000.0 -1000.0 v2 1000.0 1000.0 1000.0 False
18:42:02 3 v1 1000.0 1000.0 -1000.0 v2 1000.0 -1000.0 1000.0 False
18:42:02 3 v1 1000.0 1000.0 -1000.0 v2 3000.0 -1000.0 1000.0 False
18:42:02 3 v1 1000.0 1000.0 -1000.0 v2 3000.0 -1000.0 -1000.0 False
18:42:02 3 v1 1000.0 1000.0 -1000.0 v2 3000.0 1000.0 -1000.0 False
18:42:02 3 v1 1000.0 1000.0 -1000.0 v2 1000.0 1000.0 -1000.0 False
18:42:02 3 v1 1000.0 1000.0 -1000.0 v2 1000.0 1000.0 1000.0 False
18:42:02 4 v1 -1000.0 1000.0 -1000.0 v2 1000.0 -1000.0 1000.0 False
18:42:02 4 v1 -1000.0 1000.0 -1000.0 v2 3000.0 -1000.0 1000.0 False
18:42:02 4 v1 -1000.0 1000.0 -1000.0 v2 3000.0 -1000.0 -1000.0 False
18:42:02 4 v1 -1000.0 1000.0 -1000.0 v2 3000.0 1000.0 -1000.0 False
18:42:02 4 v1 -1000.0 1000.0 -1000.0 v2 1000.0 1000.0 -1000.0 False
18:42:02 4 v1 -1000.0 1000.0 -1000.0 v2 1000.0 1000.0 1000.0 False
18:42:02 5 v1 -1000.0 1000.0 1000.0 v2 1000.0 -1000.0 1000.0 False
18:42:02 5 v1 -1000.0 1000.0 1000.0 v2 3000.0 -1000.0 1000.0 False
18:42:02 5 v1 -1000.0 1000.0 1000.0 v2 3000.0 -1000.0 -1000.0 False
18:42:02 5 v1 -1000.0 1000.0 1000.0 v2 3000.0 1000.0 -1000.0 False
18:42:02 5 v1 -1000.0 1000.0 1000.0 v2 1000.0 1000.0 -1000.0 False
18:42:02 5 v1 -1000.0 1000.0 1000.0 v2 1000.0 1000.0 1000.0 False
18:42:02 1 v1 1000.0 -1000.0 1000.0 v2 1000.0 -1000.0 1000.0 False
Surely should have printed
18:42:02 1 v1 1000.0 -1000.0 1000.0 v2 1000.0 -1000.0 1000.0 True
I have a problem if I pass a tolerance to isEqual in compareVertex