def getEdges2D(zone, factor): dim = Internal.getZoneDim(zone) ni = dim[1]; nj = dim[2]; nk = dim[3] l = CPlot.getActivePointIndex() if l == []: return None i = l[2]; j = l[3]; k = l[4] e1 = T.subzone(zone, (1,1,1), (ni,1,1)) e2 = T.subzone(zone, (1,nj,1), (ni,nj,1)) e3 = T.subzone(zone, (1,1,1), (1,nj,1)) e4 = T.subzone(zone, (ni,1,1), (ni,nj,1)) u = [e1,e2,e3,e4] (i,j,k) = forceIJK(i,j,k,ni,nj,nk) r = [] if i == 1: ind = j-1 m = [e3]; u.remove(e3) if factor != 1.: r = [e4]; u.remove(e4) elif i == ni: ind = j-1 m = [e4]; u.remove(e4) if factor != 1.: r = [e3]; u.remove(e3) elif j == 1: ind = i-1 m = [e1]; u.remove(e1) if factor != 1.: r = [e2]; u.remove(e2) elif j == nj: ind = i-1 m = [e2]; u.remove(e2) if factor != 1.: r = [e1]; u.remove(e1) return m, r, u, ind
def getValue(): nz = CPlot.getSelectedZone() l = CPlot.getActivePointIndex() if l == []: return field = CPlot.getState('scalarField') if field == -1: return ind = CPlot.getActivePointIndex() nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] varNames = C.getVarNames(z)[0] if len(varNames) > field + 3: var = varNames[field + 3] val = C.getValue(z, var, ind[0]) VARS[0].set(str(val)) else: CTK.TXT.insert('START', 'Field %d not found. Use scalar mode.\n' % field) CTK.TXT.insert('START', 'Error: ', 'Error')
def refineCells(): 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 W = WIDGETS['refine'] if CTK.__BUSY__ == False: CPlot.unselectAllZones() CTK.__BUSY__ = True TTK.sunkButton(W) CPlot.setState(cursor=1) while CTK.__BUSY__: l = [] while l == []: nz = CPlot.getSelectedZone() l = CPlot.getActivePointIndex() CPlot.unselectAllZones() time.sleep(CPlot.__timeStep__) W.update() if CTK.__BUSY__ == False: break if CTK.__BUSY__: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] CTK.saveTree() z = CTK.t[2][nob][2][noz] C._initVars(z, 'centers:__tag__', 0) C.setValue(z, 'centers:__tag__', l[1], 1) try: z = P.refine(z, '__tag__') CTK.replace(CTK.t, nob, noz, z) except: pass CTK.TKTREE.updateApp() CPlot.render() CTK.__BUSY__ = False TTK.raiseButton(W) CPlot.setState(cursor=0) else: CTK.__BUSY__ = False TTK.raiseButton(W) CPlot.setState(cursor=0)
def setSourceEdge(): 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 nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error'); return selected = '' if len(nzs) > 1: CTK.TXT.insert('START', 'Only first zone is taken.\n') CTK.TXT.insert('START', 'Warning: ', 'Warning') nz = nzs[0] nob = CTK.Nb[nz]+1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] selected = CTK.t[2][nob][0]+'/'+z[0] # ajoute l'indice du point actif pt = CPlot.getActivePointIndex() selected += ';'+str(pt[2:]) VARS[3].set(selected)
def modifyPoint(event=None): if CTK.t == []: return nzs = CPlot.getSelectedZones() if nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return if len(nzs) > 1: CTK.TXT.insert('START', 'Please, select only one zone.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return point = CTK.varsFromWidget(VARS[0].get(), type=1) if len(point) != 3: CTK.TXT.insert('START', 'Point coords are incorrect.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return nz = nzs[0] nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] ind = CPlot.getActivePointIndex() if ind == []: CTK.TXT.insert('START', 'No selected point.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return ind = ind[0] CTK.saveTree() zp = Internal.copyTree(z) C.setValue(zp, 'CoordinateX', ind, point[0]) C.setValue(zp, 'CoordinateY', ind, point[1]) C.setValue(zp, 'CoordinateZ', ind, point[2]) CPlot.replace(CTK.t, nob, noz, zp) CTK.TXT.insert('START', 'Point modified.\n') CPlot.render()
def paint(): 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 # get patined var field = CPlot.getState('scalarField') if field == -1: CTK.TXT.insert('START', 'Scalar field is not set.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return CPlot.unselectAllZones() CTK.saveTree() w = WIDGETS['paint'] if not CTK.__BUSY__: CTK.__BUSY__ = True TTK.sunkButton(w) CPlot.setState(cursor=1) while CTK.__BUSY__ == True: l = [] while l == []: nz = CPlot.getSelectedZone() l = CPlot.getActivePointIndex() #time.sleep(CPlot.__timeStep__) w.update() if not CTK.__BUSY__: break if CTK.__BUSY__: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] CTK.saveTree() value = float(WIDGETS['value'].get()) #width = float(WIDGETS['width'].get()) #brushType = VARS[2].get() z = CTK.t[2][nob][2][noz] posCam = CPlot.getState('posCam') posEye = CPlot.getState('posEye') vect = (posEye[0] - posCam[0], posEye[1] - posCam[1], posEye[2] - posCam[2]) click = CPlot.getActivePoint() point = (click[0], click[1], click[2]) ind = CPlot.getActivePointIndex() #hook = C.createHook varNames = C.getVarNames(z)[0] if len(varNames) > field + 3: var = varNames[field + 3] C.setValue(z, var, ind[0], value) else: CTK.TXT.insert( 'START', 'Field %d not found. Use scalar mode.\n' % field) CTK.TXT.insert('START', 'Error: ', 'Error') CTK.replace(CTK.t, nob, noz, z) CTK.TKTREE.updateApp() CPlot.unselectAllZones() CPlot.render() CTK.__BUSY__ = False TTK.raiseButton(w) CPlot.setState(cursor=0) else: CTK.__BUSY__ = False TTK.raiseButton(w) CPlot.setState(cursor=0)
def copyDistrib(): 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 nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error'); return CTK.saveTree() # source edge v = VARS[3].get() v = v.split(';') try: pt = eval(v[1]) except: pt = None v = v[0] v = v.lstrip(); v = v.rstrip() sname = v.split('/', 1) edge = [] bases = Internal.getNodesFromName1(CTK.t, sname[0]) if bases != []: nodes = Internal.getNodesFromType1(bases[0], 'Zone_t') for z in nodes: if z[0] == sname[1]: edge.append(z) if edge == []: CTK.TXT.insert('START', 'Invalid source edge.\n') CTK.TXT.insert('START', 'Error: ', 'Error'); return source = edge[0] dimSource = Internal.getZoneDim(source) if dimSource[0] == 'Unstructured': CTK.TXT.insert('START', 'Invalid source edge.\n') CTK.TXT.insert('START', 'Error: ', 'Error'); return # Get first selected zone nz = nzs[0] nob = CTK.Nb[nz]+1 noz = CTK.Nz[nz] zone = CTK.t[2][nob][2][noz] dim = Internal.getZoneDim(zone) # subzone de source eventuellement if dimSource[4] == 2: # source est 2D ind = CPlot.getActivePointIndex() ni = dimSource[1]; nj = dimSource[2] deltai = min(ind[2]-ni,ind[2]-1) deltaj = min(ind[3]-nj,ind[3]-1) if deltai < deltaj: source = T.subzone(source, (1,pt[1],pt[2]),(ni,pt[1],pt[2])) else: source = T.subzone(source, (pt[0],1,pt[2]),(pt[0],nj,pt[2])) elif dimSource[4] == 3: # source est 3D ind = CPlot.getActivePointIndex() ni = dimSource[1]; nj = dimSource[2]; nk = dimSource[3] deltai = min(ind[2]-ni,ind[2]-1) deltaj = min(ind[3]-nj,ind[3]-1) deltak = min(ind[4]-nk,ind[4]-1) if deltai < deltaj and deltai < deltak: source = T.subzone(source, (1,pt[1],pt[2]),(ni,pt[1],pt[2])) elif deltaj < deltai and deltaj < deltak: source = T.subzone(source, (pt[0],1,pt[2]),(pt[0],nj,pt[2])) else: source = T.subzone(source, (pt[0],pt[1],1),(pt[0],pt[1],nk)) # Extrait la distribution en i source = D.getCurvilinearAbscissa(source) C._initVars(source, '{CoordinateX}={s}') C._initVars(source, 'CoordinateY', 0) C._initVars(source, 'CoordinateZ', 0) source = C.rmVars(source, 's') # Traitement if dim[0] == 'Structured': if dim[2] != 1 and dim[3] != 1: fail = apply3D(1., 1, source, ntype=3) elif dim[2] != 1 and dim[3] == 1: fail = apply2D(1., 1, source, ntype=3) else: fail = copyDistrib1D(source) else: fail = copyDistrib1D(source) # all zones if not fail: CTK.TXT.insert('START', 'Distribution copy done.\n') else: CTK.TXT.insert('START', 'Distribution copy fails for at least one zone.\n') CTK.TXT.insert('START', 'Warning: ', 'Warning') #C._fillMissingVariables(CTK.t) (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t) CTK.TKTREE.updateApp() CPlot.render()
def getEdges3D(zone, factor): dim = Internal.getZoneDim(zone) ni = dim[1]; nj = dim[2]; nk = dim[3] l = CPlot.getActivePointIndex() if l == []: return None i = l[2]; j = l[3]; k = l[4] e1 = T.subzone(zone, (1,1,1), (ni,1,1)) e2 = T.subzone(zone, (1,nj,1), (ni,nj,1)) e3 = T.subzone(zone, (1,1,1), (1,nj,1)) e4 = T.subzone(zone, (ni,1,1), (ni,nj,1)) e5 = T.subzone(zone, (1,1,nk), (ni,1,nk)) e6 = T.subzone(zone, (1,nj,nk), (ni,nj,nk)) e7 = T.subzone(zone, (1,1,nk), (1,nj,nk)) e8 = T.subzone(zone, (ni,1,nk), (ni,nj,nk)) e9 = T.subzone(zone, (1,1,1), (1,1,nk)) e10 = T.subzone(zone, (ni,1,1), (ni,1,nk)) e11 = T.subzone(zone, (1,nj,1), (1,nj,nk)) e12 = T.subzone(zone, (ni,nj,1), (ni,nj,nk)) f1 = T.subzone(zone, (1,1,1), (ni,nj,1)) f2 = T.subzone(zone, (1,1,nk), (ni,nj,nk)) f3 = T.subzone(zone, (1,1,1), (ni,1,nk)) f4 = T.subzone(zone, (1,nj,1), (ni,nj,nk)) f5 = T.subzone(zone, (1,1,1), (1,nj,nk)) f6 = T.subzone(zone, (ni,1,1), (ni,nj,nk)) ue = [e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12] # unmodified edges uf = [f1,f2,f3,f4,f5,f6] # unmodified faces #temp = C.newPyTree(['Base']) #temp[2][1][2] += ue #temp[2][1][2] += uf #C.convertPyTree2File(temp, 'edges.cgns') (i,j,k) = forceIJK(i,j,k,ni,nj,nk) r = [] # refined edges if (i == 1 and j == 1): ind = k-1 m = [e9] f = [f3,f5] if (factor != 1.): r = [e11,e12,e10]; f += [f4,f6] elif (i == ni and j == 1): ind = k-1 m = [e10] f = [f6,f3] if (factor != 1.): r = [e9,e11,e12] f += [f5,f4] elif (i == 1 and j == nj): ind = k-1 m = [e11] f = [f5,f4] if (factor != 1.): r = [e9,e10,e12]; f += [f3,f6] elif (i == ni and j == nj): ind = k-1 m = [e12] f = [f6,f4] if (factor != 1.): r = [e10,e9,e11]; f += [f3,f5] elif (i == 1 and k == 1): ind = j-1 m = [e3] f = [f1,f5] if (factor != 1.): r = [e4,e8,e7]; f += [f2,f6] elif (i == ni and k == 1): ind = j-1 m = [e4] f = [f6,f1] if (factor != 1.): r = [e3,e8,e7]; f += [f2,f5] elif (i == 1 and k == nk): ind = j-1 m = [e7] f = [f5,f2] if (factor != 1.): r = [e8,e4,e3]; f += [f6,f1] elif (i == ni and k == nk): ind = j-1 m = [e8] f = [f6,f2] if (factor != 1.): r = [e7,e3,e4]; f += [f5,f1] elif (j == 1 and k == 1): ind = i-1 m = [e1] f = [f1,f3] if (factor != 1.): r = [e2,e6,e5]; f += [f2,f4] elif (j == nj and k == 1): ind = i-1 m = [e2] f = [f4,f1] if (factor != 1.): r = [e1,e6,e5]; f += [f2,f3] elif (j == 1 and k == nk): ind = i-1 m = [e5] f = [f2,f3] if (factor != 1.): r = [e6,e2,e1]; f += [f1,f4] elif (j == nj and k == nk): ind = i-1 m = [e6] f = [f2,f4] if (factor != 1.): r = [e5,e1,e2]; f += [f3,f1] for i in m+r: ue.remove(i) for i in f: uf.remove(i) return m, r, f, ue, uf, ind
def stretch1D(h): fail = False nzs = CPlot.getSelectedZones() nz = nzs[0] nob = CTK.Nb[nz]+1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] dims = Internal.getZoneDim(z) try: if dims[0] == 'Unstructured': a = C.convertBAR2Struct(z) else: a = z except Exception as e: #print 'Error: stretch1D: %s.'%str(e) Panels.displayErrors([0,str(e)], header='Error: stretch1D') return True # Fail ind = CPlot.getActivePointIndex() if ind == []: return True # Fail ind = ind[0] l = D.getLength(a) a = D.getCurvilinearAbscissa(a) zp = D.getCurvilinearAbscissa(z) distrib = C.cpVars(a, 's', a, 'CoordinateX') C._initVars(distrib, 'CoordinateY', 0.) C._initVars(distrib, 'CoordinateZ', 0.) distrib = C.rmVars(distrib, 's') N = dims[1] val = C.getValue(zp, 's', ind) Xc = CPlot.getActivePoint() valf = val Pind = C.getValue(z, 'GridCoordinates', ind) if ind < N-1: # cherche avec indp1 Pindp1 = C.getValue(z, 'GridCoordinates', ind+1) v1 = Vector.sub(Pindp1, Pind) v2 = Vector.sub(Xc, Pind) if Vector.dot(v1,v2) >= 0: val2 = C.getValue(zp, 's', ind+1) alpha = Vector.norm(v2)/Vector.norm(v1) valf = val+alpha*(val2-val) if ind > 0 and val == valf: # cherche avec indm1 Pindm1 = C.getValue(z, 'GridCoordinates', ind-1) v1 = Vector.sub(Pindm1, Pind) v2 = Vector.sub(Xc, Pind) if Vector.dot(v1,v2) >= 0: val2 = C.getValue(zp, 's', ind-1) alpha = Vector.norm(v2)/Vector.norm(v1) valf = val+alpha*(val2-val) if h < 0: # enforce point distrib = G.enforcePoint(distrib, valf) else: # enforce h if val == 0: distrib = G.enforcePlusX(distrib, h/l, N/10, 1) elif val == 1: distrib = G.enforceMoinsX(distrib, h/l, N/10, 1) else: distrib = G.enforceX(distrib, valf, h/l, N/10, 1) try: a1 = G.map(a, distrib) CTK.replace(CTK.t, nob, noz, a1) except Exception as e: fail = True Panels.displayErrors([0,str(e)], header='Error: stretch1D') return fail
def sculpt(): 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 TOOLS = createTools() #CTK.display(TOOLS) bbox = G.bbox(CTK.t) size = max(bbox[3] - bbox[0], bbox[4] - bbox[1], bbox[5] - bbox[2]) CPlot.unselectAllZones() w = WIDGETS['sculpt'] if CTK.__BUSY__ == False: CTK.__BUSY__ = True TTK.sunkButton(w) CPlot.setState(cursor=1) while CTK.__BUSY__: l = [] while l == []: nz = CPlot.getSelectedZone() l = CPlot.getActivePointIndex() time.sleep(CPlot.__timeStep__) w.update() if (CTK.__BUSY__ == False): break if CTK.__BUSY__: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] CTK.saveTree() depth = 0.5 * WIDGETS['depth'].get() / 100. depth = size * depth width = 0.5 * WIDGETS['width'].get() / 100. width = size * width brushType = VARS[2].get() z = CTK.t[2][nob][2][noz] posCam = CPlot.getState('posCam') posEye = CPlot.getState('posEye') vect = (posEye[0] - posCam[0], posEye[1] - posCam[1], posEye[2] - posCam[2]) if brushType == 'Deform': click = CPlot.getActivePoint() point = (click[0], click[1], click[2]) z = T.deformPoint(z, point, vect, depth, width) CTK.replace(CTK.t, nob, noz, z) elif brushType == 'Sphere': click = CPlot.getActivePoint() center = (click[0], click[1], click[2]) s = D.sphere(center, depth, N=10) s = C.convertArray2Tetra(s) s = G.close(s) z = C.convertArray2Tetra(z) z = G.close(z) z = XOR.booleanMinus(z, s) CTK.replace(CTK.t, nob, noz, z) elif brushType == 'Cube': click = CPlot.getActivePoint() center = (click[0], click[1], click[2]) s = D.sphere(center, depth, N=20) s = C.convertArray2Tetra(s) s = G.close(s) z = C.convertArray2Tetra(z) z = G.close(z) z = XOR.booleanMinus(z, s) CTK.replace(CTK.t, nob, noz, z) CTK.TKTREE.updateApp() CPlot.unselectAllZones() CPlot.render() CTK.__BUSY__ = False TTK.raiseButton(w) CPlot.setState(cursor=0) else: CTK.__BUSY__ = False TTK.raiseButton(w) CPlot.setState(cursor=0)
def display1D(event=None): if CTK.t == []: return # Get slot try: slot = int(VARS[5].get()) except: slot = 0 # Get grid size try: gridSize = VARS[1].get() grids = gridSize.split(';') if (len(grids) == 1): gridSize = (int(grids[0]), 1) else: gridSize = (int(grids[0]), int(grids[1])) except: gridSize = (1, 1) CPlot.setState(gridSize=gridSize) # Get grid pos try: gridPos = VARS[2].get() grids = gridPos.split(';') if (len(grids) == 1): gridPos = (int(grids[0]), 1) else: gridPos = (int(grids[0]), int(grids[1])) except: gridPos = (0, 0) # Recupere la direction pour la coupe ou 'Elements' dir = VARS[0].get() if dir == 'None': CPlot.display1D([], slot=slot) return # clear # Recupere le pt pour la coupe ou les elements 1D if dir == 'Elements': # elements -> recupere les elements 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 nzs == []: CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return points = [] for nz in nzs: nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] selected = CTK.t[2][nob][0] + '/' + z[0] points.append(selected) elif (dir == 'I' or dir == 'J' or dir == 'K'): # indice -> recupere les indices + la zone if (CTK.__MAINTREE__ <= 0): CTK.TXT.insert('START', 'Fail on a temporary tree.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return nz = CPlot.getSelectedZone() if (nz == -1): CTK.TXT.insert('START', 'Selection is empty.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return points = [] nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] selected = CTK.t[2][nob][0] + '/' + z[0] index = CPlot.getActivePointIndex() points = (selected, index) else: # les coupes -> recupere les coord du pt point = CPlot.getActivePoint() if point == []: point = (0., 0., 0.) # Recupere les variables a afficher var1 = VARS[3].get() var1 = var1.replace('centers:', '') var2 = VARS[4].get() var2 = var2.replace('centers:', '') # Recupere les zones actives actives = [] zones = Internal.getZones(CTK.t) if CTK.__MAINTREE__ == 1: nzs = CPlot.getActiveZones() for nz in nzs: actives.append(zones[nz]) else: actives = zones if actives == []: return if (dir == 'X (Y)'): elts = P.isoSurfMC(actives, 'CoordinateY', point[1]) if elts != []: elts2 = P.isoSurfMC(elts, 'CoordinateZ', point[2]) if (elts2 != []): elts = elts2 elif (dir == 'Y (X)'): elts = P.isoSurfMC(actives, 'CoordinateX', point[0]) if elts != []: elts2 = P.isoSurfMC(elts, 'CoordinateZ', point[2]) if (elts2 != []): elts = elts2 elif (dir == 'Z (X)'): elts = P.isoSurfMC(actives, 'CoordinateX', point[0]) if (elts != []): elts2 = P.isoSurfMC(elts, 'CoordinateY', point[1]) if (elts2 != []): elts = elts2 elif (dir == 'X (Z)'): elts = P.isoSurfMC(actives, 'CoordinateZ', point[2]) if elts != []: elts2 = P.isoSurfMC(elts, 'CoordinateY', point[1]) if (elts2 != []): elts = elts2 elif (dir == 'Y (Z)'): elts = P.isoSurfMC(actives, 'CoordinateZ', point[2]) if elts != []: elts2 = P.isoSurfMC(elts, 'CoordinateX', point[0]) if (elts2 != []): elts = elts2 elif (dir == 'Z (Y)'): elts = P.isoSurfMC(actives, 'CoordinateY', point[1]) if (elts != []): elts2 = P.isoSurfMC(elts, 'CoordinateX', point[0]) if (elts2 != []): elts = elts2 elif (dir == 'I'): v = points[0] ind = points[1] v = v.lstrip() v = v.rstrip() sname = v.split('/', 1) bases = Internal.getNodesFromName1(CTK.t, sname[0]) elts = [] if bases != []: zones = Internal.getNodesFromType1(bases[0], 'Zone_t') for z in zones: if (z[0] == sname[1]): try: zp = C.center2Node(z, Internal.__FlowSolutionCenters__) zp = T.subzone(zp, (1, ind[3], ind[4]), (-1, ind[3], ind[4])) elts.append(zp) except: pass elif (dir == 'J'): v = points[0] ind = points[1] v = v.lstrip() v = v.rstrip() sname = v.split('/', 1) bases = Internal.getNodesFromName1(CTK.t, sname[0]) elts = [] if bases != []: zones = Internal.getNodesFromType1(bases[0], 'Zone_t') for z in zones: if (z[0] == sname[1]): try: zp = C.center2Node(z, Internal.__FlowSolutionCenters__) zp = T.subzone(zp, (ind[2], 1, ind[4]), (ind[2], -1, ind[4])) elts.append(zp) except: pass elif (dir == 'K'): v = points[0] ind = points[1] v = v.lstrip() v = v.rstrip() sname = v.split('/', 1) bases = Internal.getNodesFromName1(CTK.t, sname[0]) elts = [] if bases != []: zones = Internal.getNodesFromType1(bases[0], 'Zone_t') for z in zones: if (z[0] == sname[1]): try: zp = C.center2Node(z, Internal.__FlowSolutionCenters__) zp = T.subzone(zp, (ind[2], ind[3], 1), (ind[2], ind[3], -1)) elts.append(zp) except: pass elif (dir == 'Elements'): elts = [] for v in points: v = v.lstrip() v = v.rstrip() sname = v.split('/', 1) bases = Internal.getNodesFromName1(CTK.t, sname[0]) if (bases != []): zones = Internal.getNodesFromType1(bases[0], 'Zone_t') for z in zones: if (z[0] == sname[1]): elts.append(z) if elts == []: CTK.TXT.insert('START', 'Nothing to display.\n') CTK.TXT.insert('START', 'Error: ', 'Error') return try: elts = D.getCurvilinearAbscissa(elts) except: pass # Fit first axis pos = WIDGETS['rangePos'].get() / 50. - 1. zoom = WIDGETS['rangeZoom'].get() / 120. minv1 = C.getMinValue(elts, var1) maxv1 = C.getMaxValue(elts, var1) if (maxv1 - minv1 < 1.e-6): maxv1 += 5.e-7 minv1 -= 5.e-7 # active point localisation nz = CPlot.getSelectedZone() if (nz != -1): ind = CPlot.getActivePointIndex() nob = CTK.Nb[nz] + 1 noz = CTK.Nz[nz] z = CTK.t[2][nob][2][noz] f1 = C.getValue(z, var1, ind[0]) try: r1min = (f1 - minv1) * zoom + minv1 + pos * (1. - zoom) * (maxv1 - minv1) r1max = (f1 - maxv1) * zoom + maxv1 + pos * (1. - zoom) * (maxv1 - minv1) except: # var1 not found in z, le cherche dans elts xf1 = C.getValue(z, 'CoordinateX', ind[0]) yf1 = C.getValue(z, 'CoordinateY', ind[0]) zf1 = C.getValue(z, 'CoordinateZ', ind[0]) f1 = minv1 + 0.5 * (maxv1 - minv1) r1min = 0.5 * (maxv1 - minv1) * zoom + minv1 + pos * ( 1. - zoom) * (maxv1 - minv1) r1max = -0.5 * (maxv1 - minv1) * zoom + maxv1 + pos * ( 1. - zoom) * (maxv1 - minv1) else: f1 = minv1 + 0.5 * (maxv1 - minv1) r1min = 0.5 * (maxv1 - minv1) * zoom + minv1 + pos * (1. - zoom) * ( maxv1 - minv1) r1max = -0.5 * (maxv1 - minv1) * zoom + maxv1 + pos * (1. - zoom) * ( maxv1 - minv1) # Fit second axis p = P.selectCells( elts, '({%s} < %20.16g) & ({%s} > %20.16g)' % (var1, r1max, var1, r1min)) minv2 = C.getMinValue(p, var2) maxv2 = C.getMaxValue(p, var2) # display CPlot.display1D(p, slot=slot, bgBlend=0., gridPos=gridPos, var1=var1, var2=var2, r1=(r1min, r1max), r2=(minv2, maxv2)) CTK.TXT.insert('START', 'Plot displayed.\n')