def union(): if CTK.t == []: return if CTK.__MAINTREE__ <= 0: CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return nzs = CPlot.getSelectedZones() if len(nzs) < 2: CTK.TXT.insert('START', 'Please, select two or more surfaces.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return tol = CTK.varsFromWidget(VARS[0].get(), type=1) if len(tol) != 1: CTK.TXT.insert('START', 'Tolerance is incorrect.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return tol = tol[0] CTK.saveTree() zlist = [] deletedZoneNames = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] deletedZoneNames.append(CTK.t[2][nob][0] + Internal.SEP1 + CTK.t[2][nob][2][noz][0]) z = CTK.t[2][nob][2][noz] zlist.append(z) try: j = XOR.booleanUnion(zlist[0], zlist[1], tol=tol) except Exception as e: Panels.displayErrors([0, str(e)], header='Error: union') CTK.TXT.insert('START', 'Union failed\n') return for nz in range(len(zlist) - 2): try: j = XOR.booleanUnion(j, zlist[nz + 2], tol=tol) except Exception as e: Panels.displayErrors([0, str(e)], header='Error: union') CTK.TXT.insert('START', 'Union failed.\n') return CTK.t = CPlot.deleteSelection(CTK.t, CTK.Nb, CTK.Nz, nzs) CPlot.delete(deletedZoneNames) CTK.add(CTK.t, CTK.Nb[0] + 1, -1, j) CTK.TXT.insert('START', 'Union performed.\n') #C._fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
# - boolean union (PyTree) - import Intersector.PyTree as XOR import Converter.PyTree as C import KCore.test as test M1 = C.convertFile2PyTree('boolNG_M1.tp') M1 = C.convertArray2NGon(M1) M2 = C.convertFile2PyTree('boolNG_M2.tp') M2 = C.convertArray2NGon(M2) tol = -0.5e-3 x = XOR.booleanUnion(M1, M2, tol, preserve_right=1, solid_right=1) test.testT(x, 1) x = XOR.booleanUnion(M1, M2, tol, preserve_right=0, solid_right=1) test.testT(x, 2) #~ x = XOR.booleanUnion(M1, M2, tol, preserve_right=1, solid_right=0) #~ test.testT(x,3) #~ #~ x = XOR.booleanUnion(M1, M2, tol, preserve_right=0, solid_right=0) #~ test.testT(x,4)
import Intersector.PyTree as XOR import KCore.test as test mesh = G.cart((0, 0, 0), (1, 1, 1), (20, 20, 20)) source = G.cart((8, 8, 8), (0.2, 0.2, 0.2), (20, 20, 20)) #C.convertPyTree2File(mesh, 'm.cgns') #C.convertPyTree2File(source, 's.cgns') t = C.newPyTree(['Base', mesh]) t = T.splitNParts(t, 2, multigrid=0, dirs=[1, 2, 3]) zones = I.getZones(t) p1 = zones[0] p1 = C.convertArray2Tetra(p1, split='withBarycenters') p1 = C.convertArray2NGon(p1) p2 = C.convertArray2NGon(zones[1]) mesh = XOR.booleanUnion(p1, p2) #conformize the join #C.convertPyTree2File(mesh, 'u.cgns') m1 = XOR.adaptCells(mesh, source, sensor_type=0) m1 = XOR.closeOctalCells(m1) #C.convertPyTree2File(m1, 'out.cgns') test.testT(m1, 1) m2 = XOR.adaptCells(mesh, source, sensor_type=2) m2 = XOR.closeOctalCells(m2) #C.convertPyTree2File(m2, 'out1.cgns') test.testT(m2, 2)
# - booleanUnion (pyTree) - import Intersector.PyTree as XOR import Generator.PyTree as G import Converter.PyTree as C import Geom.PyTree as D s1 = D.sphere((0, 0, 0), 1, N=20) s2 = D.sphere((0., 1., 0.), 1, N=30) s1 = C.convertArray2Tetra(s1) s1 = G.close(s1) s2 = C.convertArray2Tetra(s2) s2 = G.close(s2) x = XOR.booleanUnion(s1, s2, tol=0.) C.convertPyTree2File(x, 'out.cgns')
# - boolean union (pyTree) - # BAR import Intersector.PyTree as XOR import Generator.PyTree as G import Converter.PyTree as C import Geom.PyTree as D import KCore.test as test c1 = D.circle( (0,0,0), 1, N=100 ) c2 = D.circle( (0.2,0,0), 1, N=50 ) c1 = C.convertArray2Tetra(c1); c1 = G.close(c1) c2 = C.convertArray2Tetra(c2); c2 = G.close(c2) x = XOR.booleanUnion(c1, c2, tol=0.) test.testT(x)