def extractIsoLine(): 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 field = VARS[0].get() value = VARS[2].get() try: value = float(value) except: value = 1. nzs = CPlot.getSelectedZones() CTK.saveTree() if nzs == []: z = Internal.getZones(CTK.t) else: z = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z.append(CTK.t[2][nob][2][noz]) isos = [] fail = False errors = [] for zone in z: try: i = P.isoLine(zone, field, value) isos.append(i) except Exception as e: fail = True errors += [0, str(e)] CTK.t = C.addBase2PyTree(CTK.t, 'CONTOURS', 1) bases = Internal.getNodesFromName1(CTK.t, 'CONTOURS') nob = C.getNobOfBase(bases[0], CTK.t) for i in isos: CTK.add(CTK.t, nob, -1, i) if (fail == False): CTK.TXT.insert('START', 'Isolines extracted.\n') else: Panels.displayErrors(errors, header='Error: Isolines') CTK.TXT.insert('START', 'Isolines fails for at least one zone.\n') CTK.TXT.insert('START', 'Warning: ', 'Warning') (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
# - isoLine (pyTree) - import Post.PyTree as P import Converter.PyTree as C import Generator.PyTree as G import Geom.PyTree as D import KCore.test as test def F(x, y): return x * x + y * y # Test sur un champ en noeuds a = G.cartTetra((0, 0, 0), (1, 1, 1), (10, 10, 1)) a = C.initVars(a, 'field', F, ['CoordinateX', 'CoordinateY']) iso = P.isoLine(a, 'field', 15.) test.testT(iso, 1) # Test sur un champ en centres b = G.cartTetra((0, 0, 0), (1, 1, 1), (10, 10, 1)) b = C.node2Center(b, ['CoordinateX', 'CoordinateY']) b = C.initVars(b, 'centers:field', F, ['centers:CoordinateX', 'centers:CoordinateY']) b = C.rmVars(b, ['centers:CoordinateX', 'centers:CoordinateY']) iso = P.isoLine(b, 'centers:field', 15.) t = C.newPyTree(['Base']) t[2][1][2] += [b, iso] #test.testA(iso, 2)
# - isoLine (pyTree) - import Post.PyTree as P import Converter.PyTree as C import Generator.PyTree as G import Geom.PyTree as D def F(x, y): return x * x + y * y a = G.cartTetra((0, 0, 0), (1, 1, 1), (10, 10, 1)) a = C.initVars(a, 'field', F, ['CoordinateX', 'CoordinateY']) isos = [] min = C.getMinValue(a, 'field') max = C.getMaxValue(a, 'field') for v in range(20): value = min + (max - min) / 18. * v try: i = P.isoLine(a, 'field', value) isos.append(i) except: pass t = C.newPyTree(['Base', 3, 'ISOS', 1]) t[2][1][2].append(a) t[2][2][2] += isos C.convertPyTree2File(t, 'out.cgns')
def drawIsoLines(): 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 field = VARS[0].get() nlevels = VARS[1].get() try: nlevels = int(nlevels) except: levels = 30 if nlevels < 2: nlevels = 2 nzs = CPlot.getSelectedZones() CTK.saveTree() fmin = CTK.varsFromWidget(VARS[3].get(), type=1) if fmin == []: fmin = C.getMinValue(CTK.t, field) else: fmin = fmin[0] fmax = CTK.varsFromWidget(VARS[4].get(), type=1) if fmax == []: fmax = C.getMaxValue(CTK.t, field) else: fmax = fmax[0] if nzs == []: z = Internal.getZones(CTK.t) else: z = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z.append(CTK.t[2][nob][2][noz]) isos = [] nlevels += 1 # pour etre coeherent avec les niveaux d'iso solides fail = False errors = [] for v in range(nlevels): value = fmin + (fmax - fmin) / (nlevels - 1) * v for zone in z: try: i = P.isoLine(zone, field, value) isos.append(i) except Exception as e: fail = True errors += [0, str(e)] CTK.t = C.addBase2PyTree(CTK.t, 'CONTOURS', 1) bases = Internal.getNodesFromName1(CTK.t, 'CONTOURS') nob = C.getNobOfBase(bases[0], CTK.t) if isos != []: isos = T.join(isos) CTK.add(CTK.t, nob, -1, isos) if (fail == False): CTK.TXT.insert('START', 'Isolines extracted.\n') else: Panels.displayErrors(errors, header='Error: Isolines') CTK.TXT.insert('START', 'Isolines fails for at least one zone.\n') CTK.TXT.insert('START', 'Warning: ', 'Warning') (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()