# octree
s = D.sphere((0, 0, 0), 1., 100)
snear = 0.1
t = G.octree([s], [snear], dfar=5., balancing=1, ratio=2)

# ngon converion
t = C.convertArray2NGon(t)
# ngon conformization
t = C.conformizeNGon(t)
t = G.close(t)
# ngon close cells
t = XOR.closeOctalCells(t)
#t = XOR.reorientExternalFaces(t)

# ngon converion of the sphere
s = C.convertArray2NGon(s)
# ngon converion to the nuga format
s = XOR.convertNGON2DToNGON3D(s)
#s = XOR.reorientExternalFaces(s)

# Boolean operation
x = XOR.diffSurf(t, s, tol=0., preserve_right=1,
                 agg_mode=2)  # agg_mode=2 : full mode aggregation

x = XOR.agglomerateSmallCells(x, 0., 10.)

t = C.newPyTree(['Base', 2])
t[2][1][2].append(x)
C.convertPyTree2File(t, 'diffs.cgns')
t2 = G.close(t2)
#C.convertPyTree2File(t1, 'm.plt')
#C.convertPyTree2File(t2, 's.plt')

# test 1 : volume/volume
res = XOR.getOverlappingFaces(t1, t2, RTOL=0.05, ps_min=0.95)

# create a list of polygon list (t1), one list per zone
nb_zones = len(res)
t1zones_pgids = []
for i in range(nb_zones):
    t1zones_pgids.append(res[i][0])

t = XOR.agglomerateCellsWithSpecifiedFaces(t1, t1zones_pgids)

test.testT(t, 1)

#test 2 : volume/surface

t2 = P.exteriorFaces(t2)
t2 = XOR.convertNGON2DToNGON3D(t2)

res = XOR.getOverlappingFaces(t1, t2, RTOL=0.05, ps_min=0.95)

t1zones_pgids = []
for i in range(nb_zones):
    t1zones_pgids.append(res[i][0])

t = XOR.agglomerateCellsWithSpecifiedFaces(t1, t1zones_pgids)

test.testT(t, 2)