# Check shape applicability for Boolean Operations

import salome
salome.salome_init_without_session()
import GEOM
from salome.geom import geomBuilder
geompy = geomBuilder.New()

from inspect import getfile
from os.path import abspath, dirname, join

data_dir = abspath(join(dirname(getfile(lambda: None)), 'data'))
shape = geompy.ImportBREP(join(data_dir, 'test_twisted_face.brep'))

tol = geompy.Tolerance(shape)

# perform all checks
check = geompy.CheckConformity(shape)
assert(not check.isValid())
assert(len(check.smallEdges()) == 4)
assert(len(check.selfIntersected2D()) == 2)
assert(len(check.interferingSubshapes()) == 6)
for p in check.interferingSubshapes():
    assert(geomBuilder.EnumToLong(p.first.GetShapeType()) == geompy.ShapeType["VERTEX"] and
           geomBuilder.EnumToLong(p.second.GetShapeType()) == geompy.ShapeType["VERTEX"])
assert(len(check.distantShapes()) == 2)
for p in check.distantShapes():
    assert(geomBuilder.EnumToLong(p.first.GetShapeType()) == geompy.ShapeType["EDGE"] and
           geomBuilder.EnumToLong(p.second.GetShapeType()) == geompy.ShapeType["FACE"])
assert(len(check.distantShapes(tolerance = 300.0)) == 1)
assert(len(check.distantShapes(tolerance = 400.0)) == 0)

newTol = check.updateTolerance()
assert(newTol < max(tol))