[4.5, 0.0, 0.0], [5.0, 0.5, 0.0], [4.5, 1.0, 0.0], [4.0, 0.5, 0.0]]) quadPoints.SetData(ntov(quadPointsCoords)) quadScalars = vtk.vtkFloatArray() quadScalars.SetNumberOfTuples(8) quadScalars.InsertValue(0, 0.0) quadScalars.InsertValue(1, 0.0) quadScalars.InsertValue(2, 1.0) quadScalars.InsertValue(3, 1.0) quadScalars.InsertValue(4, 1.0) quadScalars.InsertValue(5, 0.0) quadScalars.InsertValue(6, 0.0) quadScalars.InsertValue(7, 0.0) aQuad = vtk.vtkQuadraticQuad() for i in range(aQuad.GetNumberOfPoints()): aQuad.GetPointIds().SetId(i, i) aQuadGrid = vtk.vtkUnstructuredGrid() aQuadGrid.Allocate(1, 1) aQuadGrid.InsertNextCell(aQuad.GetCellType(), aQuad.GetPointIds()) aQuadGrid.SetPoints(quadPoints) aQuadGrid.GetPointData().SetScalars(quadScalars) # BiQuadratic quadrilateral BquadPoints = vtk.vtkPoints() BquadPoints.SetNumberOfPoints(9) BquadPointsCoords = np.array([ [4.0, 2.0, 0.0], [5.0, 2.0, 0.0], [5.0, 3.0, 0.0],
def mapElements(self, points, points2, nidMap, model, j): for eid, element in sorted(model.elements.iteritems()): if isinstance(element, CTRIA3): #print "ctria3" elem = vtkTriangle() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTRIA6): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticTriangle() elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) else: elem = vtkTriangle() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CQUAD4): nodeIDs = element.nodeIDs() elem = vtkQuad() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CQUAD8): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticQuad() elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) else: elem = vtkQuad() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTETRA4): elem = vtkTetra() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTETRA10): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticTetra() elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) else: elem = vtkTetra() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CPENTA6): elem = vtkWedge() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CPENTA15): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticWedge() elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) elem.GetPointIds().SetId(10, nidMap[nodeIDs[10]]) elem.GetPointIds().SetId(11, nidMap[nodeIDs[11]]) elem.GetPointIds().SetId(12, nidMap[nodeIDs[12]]) elem.GetPointIds().SetId(13, nidMap[nodeIDs[13]]) elem.GetPointIds().SetId(14, nidMap[nodeIDs[14]]) else: elem = vtkWedge() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CHEXA8): nodeIDs = element.nodeIDs() elem = vtkHexahedron() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CHEXA20): nodeIDs = element.nodeIDs() #print "nodeIDs = ",nodeIDs if None not in nodeIDs: elem = vtkQuadraticHexahedron() elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) elem.GetPointIds().SetId(10, nidMap[nodeIDs[10]]) elem.GetPointIds().SetId(11, nidMap[nodeIDs[11]]) elem.GetPointIds().SetId(12, nidMap[nodeIDs[12]]) elem.GetPointIds().SetId(13, nidMap[nodeIDs[13]]) elem.GetPointIds().SetId(14, nidMap[nodeIDs[14]]) elem.GetPointIds().SetId(15, nidMap[nodeIDs[15]]) elem.GetPointIds().SetId(16, nidMap[nodeIDs[16]]) elem.GetPointIds().SetId(17, nidMap[nodeIDs[17]]) elem.GetPointIds().SetId(18, nidMap[nodeIDs[18]]) elem.GetPointIds().SetId(19, nidMap[nodeIDs[19]]) else: elem = vtkHexahedron() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, LineElement) or isinstance( element, SpringElement): elem = vtk.vtkLine() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) ### elif isinstance(element, CONM2): # not perfectly located nid = element.Nid() c = element.Centroid() elem = vtk.vtkVertex() #elem = vtk.vtkSphere() #elem.SetRadius(1.0) #print str(element) points2.InsertPoint(j, *c) elem.GetPointIds().SetId(0, j) #elem.SetCenter(points.GetPoint(nidMap[nid])) self.grid2.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) j += 1 else: print "skipping %s" % (element.type) ### self.grid.SetPoints(points) self.grid2.SetPoints(points2) self.grid.Update() self.grid2.Update()
def readfile(meshpath): """ Generate half-cylindrical mesh for core test simulation. Parameters ---------- meshpath : string : path to mesh file Return ------ mesh : vtkUnstructuredGrid object. """ arquivo = open(meshpath, 'r').readlines() data = [] #Filtra as linhas em branco que só fodem a vida for idx, linha in enumerate(arquivo): if re.match(r'^\s*$', linha): pass else: data.append(linha.strip()) del arquivo for idx, linha in enumerate(data): if 'coor' in linha.split(): npts = int(linha.split()[1]) #Numero de coordenadas (nos/pontos) nodesidx = idx + 1 #Posicao em data que comecam os nos(pontos) if 'elem' in linha.split(): nelem = int(linha.split()[1]) #Numero de elementos etype = int(data[idx + 1].split()[1]) #Nome do elemento no MJC2VTK elemsidx = idx + 1 #Posicao em data que comeca a conectividade if 'nvec' in linha.split(): residx = idx + 1 #Posicao em data que comeca os resultados #Short cut se o tipo de elemetno nao puder ser lido if etype not in MJC2VTK: raise Exception(u"Tipo de elemento não implementado") #Alocando memória para a malha points = vtk.vtkPoints() points.SetNumberOfPoints(npts) cells = vtk.vtkCellArray() def read_nodes(): """ Read nodes from data list and provide data structure """ dtype = {'names': 'id x y z', 'type': (int, float, float, float)} nds = loadarray(dtype, [dtype['names']] + data[nodesidx:nodesidx + npts]) return nds def read_elements(): """ Read elements from data list and provide data structure """ nstring = 'id type conect' + (MJC2VTK[etype][1] - 1) * ' {}' dtype = { 'names': nstring.format(*range(MJC2VTK[etype][1] - 1)), 'type': (int, int, str(MJC2VTK[etype][1]) + 'int') } els = loadarray(dtype, [dtype['names']] + data[elemsidx:elemsidx + nelem]) return els #Read mesh structure nodes = read_nodes() elements = read_elements() #Free some memory by continuing from results only data = data[residx - 1:] #'no no no elem elem elem elem --> res res res ...' # Loop nos nos e preenche as coordenadas for i in xrange(npts): points.SetPoint(nodes[i][0] - 1, nodes[i][1], nodes[i][2], nodes[i][3]) #Loop nos elementos e depois loop na conectividade for i in xrange(nelem): #Verifica se e um quadrangular quadratico if MJC2VTK[etype][0] == 23: cellobj = vtk.vtkQuadraticQuad() #Verifica se e um triangulo if MJC2VTK[etype][0] == 5: cellobj = vtk.vtkTriangle() #Verifica se e um quadrilatero if MJC2VTK[etype][0] == 9: cellobj = vtk.vtkQuad() #Verifica se e quadratico if MJC2VTK[etype][2] is 2: nnodestmp = MJC2VTK[etype][1] ordemconect = tuple( range(0, nnodestmp, 2) + range(1, nnodestmp, 2)) #Caso o elemento seja linear: else: # !! CHECAR ordem da conectividade ordemconect = tuple(range(MJC2VTK[etype][1])) # (0, 1, 2) for idx, j in enumerate(ordemconect): # (0[0], 1[1], 2[2]) cellobj.GetPointIds().SetId(idx, elements.conect[i][j] - 1) cells.InsertNextCell(cellobj) grid = vtk.vtkUnstructuredGrid() grid.SetPoints(points) grid.SetCells(MJC2VTK[etype][0], cells) read_scalar_results(grid, data) return grid
def write_to_vtu(bvp, filename, time_steps=None, remove_old=False): # requires vtk support: import vtk if remove_old: import os os.system('rm ' + filename + '*.vtk') # # write #fid = open(filename+'.vtk','w') # # mesh info to vtk objects: #XY = reslt['mesh']['nodal_coord'] #bvp.nodes #EL = reslt['mesh']['connectivity'] #DIM = reslt['mesh']['dimension'] # if no time stamp, or list of time stamps, do the last time_format = bvp.time_format if time_steps is None: try: time_steps = bvp.time_steps except: print("No time step information in BVP dictionary \n\t>> EXITING") return # # # add points: points = vtk.vtkPoints() for pi, px in bvp.nodes.items(): points.InsertPoint(pi, tuple(px)) # number of points: nnodes = list(bvp.nodes.keys()).__len__() # # add cells: cellArray = vtk.vtkCellArray() cellTypes = [] new_el_nrs = {} el_i = 0 for old_el in bvp.elements.keys(): new_el_nrs[old_el] = el_i el_i += 1 if bvp._el_type[old_el] in ['cpe4', 'cpe4r', 'cps4', 'cps4r']: cell = vtk.vtkQuad() cellTypes += [vtk.VTK_QUAD] for i in range(4): cell.GetPointIds().SetId(i, bvp.elements[old_el][i]) elif bvp._el_type[old_el] in ['cpe8', 'cpe8r', 'cps8', 'cps48']: cell = vtk.vtkQuadraticQuad() cellTypes += [vtk.VTK_QUADRATIC_QUAD] for i in range(8): cell.GetPointIds().SetId(i, bvp.elements[old_el][i]) cellArray.InsertNextCell(cell) #for x,y in XY: #points.InsertNextPoint(x,y,0) #if DIM == 2: ## create VTK point array: #points = vtk.vtkPoints() #for x,y in XY: #points.InsertNextPoint(x,y,0) ## create VTK cell array: #cellArray = vtk.vtkCellArray() #cellTypes = [] #for elnr,ndlst in enumerate(EL): ## only 2d so number of nodes dictate element type: ## 2 = line segment # VTK_LINE (cell type = 3) #if ndlst.size == 2: #cell = vtk.vtkLine() #cellTypes += [vtk.VTK_LINE] ## 3 = triangle # VTK_TRIANGLE (cell type = 5) #if ndlst.size == 3: #cell = vtk.vtkTriangle() #cellTypes += [vtk.VTK_TRIANGLE] ## 4 = quad # VTK_QUAD (cell type = 9) #if ndlst.size == 4: #cell = vtk.vtkQuad() #cellTypes += [vtk.VTK_QUAD] ## 6 = quadratic triangle # VTK_QUADRATIC_TRIANGLE (cell type = 22) #if ndlst.size == 6: #cell = vtk.vtkQuadraticTriangle() #cellTypes += [vtk.VTK_QUADRATIC_TRIANGLE] ## 8 = quadratic quad # VTK_QUADRATIC_QUAD (cell type = 23) #if ndlst.size == 8: #cell = vtk.vtkQuadraticQuad() #cellTypes += [vtk.VTK_QUADRATIC_QUAD] ## 9 = bi-quadratic quad # VTK_BIQUADRATIC_QUAD (cell type = 28) #if ndlst.size == 9: #cell = vtk.vtkBiQuadraticQuad() #cellTypes += [vtk.VTK_QUADRATIC_QUAD] #for i,v in enumerate(ndlst): #cell.GetPointIds().SetId(i,v) ## #cellArray.InsertNextCell(cell) # #grid0 = vtk.vtkUnstructuredGrid() #grid0.SetPoints(points) #grid0.SetCells(cellTypes,cellArray) grid = vtk.vtkUnstructuredGrid() grid.SetPoints(points) grid.SetCells(cellTypes, cellArray) #vtuWriter = vtk.vtkXMLPUnstructuredGridWriter() #vtuWriter = vtk.vtkXMLUnstructuredGridWriter() #vtuWriter.SetInputDataObject(grid) #vtuWriter.SetFileName(filename+'.vtu') #vtuWriter.SetNumberOfTimeSteps(time_steps.__len__()) #vtuWriter.SetDataModeToAscii() #vtuWriter.SetCompressorTypeToNone() #vtuWriter.Start() nr_of_files = time_steps.__len__() file_suffix = '' if nr_of_files > 1: # first find the time scale factor: time_sf = 1 inctsf = any(np.array(time_steps) * 10**time_sf % 1) while inctsf: times2 = np.array(time_steps) * 10**time_sf // 1 if np.unique(times2).size == nr_of_files: inctsf = False else: time_sf += 1 inctsf = any(np.array(time_steps) * 10**time_sf % 1) file_suffix0 = '%' + '0%i' % (time_sf + 1) + 'i' for tt in time_steps: timef = time_format % tt #grid = grid0.NewInstance() # element values: if timef in bvp.ISVs.keys(): print('**** Writing output for time stamp <<%s>>' % timef) # add time to vtk file: TA = vtk.vtkDoubleArray() TA.SetName('TIME') TA.SetNumberOfComponents(1) TA.InsertNextTuple1(tt) FD = vtk.vtkFieldData() FD.AddArray(TA) grid.SetFieldData(FD) grid.Modified() El_vals = bvp.ISVs[timef] # element averaging of each possible element ISV: #isvnames = ['temp_el','temp_rate','strain','stress'] isvnames = [ 'strain', 'stress', 'cauchy', 'temp_rate', 'plastic strain', 'equivalent plastic' ] isv4comp = ['strain', 'stress', 'cauchy', 'plastic strain'] for isn in isvnames: do_isn = False Iavg = vtk.vtkFloatArray() Iavg.SetName('EA_' + isn) # also nodal Averaged: #nd_avg_name = 'NA_'+isn nd_avg_name = isn ND_I = bvp.NodeVals[timef][nd_avg_name] = {} ND_W = bvp.NodeVals[timef]['NA_weights'] = {} #number of components: ncomp = 1 #if (isn == 'strain')|(isn=='stress'): if isn in isv4comp: ncomp = 4 Imises = vtk.vtkFloatArray() Imises.SetName('EA_' + isn + '_vM') # loop over elements for el_id in El_vals.keys(): ind = new_el_nrs[el_id] gp_vals = El_vals[el_id] # el_avg = [0] * 4 if isn in gp_vals[1].keys(): # if any of the elements have a particular ISV = output that ISV (others are 0) do_isn = True isvR = {} for gp in gp_vals.keys(): isvR[gp] = gp_vals[gp][isn] # element connectivity and coordinates: el_connect = bvp.elements[el_id] #X = [bvp.nodes[nd_Id][0] for nd_Id in el_connect] #Y = [bvp.nodes[nd_Id][1] for nd_Id in el_connect] #XY = np.c_[X, Y]; if list(gp_vals.keys()).__len__( ) == 4: # 2x2 gauss (weighting = 1 per integration point) el_avg = np.average( [gp_vals[i][isn] for i in range(1, 5)], 0).flatten() # NDvals = FE_shapefn.Extrapolate_2x2( isvR, el_connect.__len__()) for nd_nr in range(el_connect.__len__()): nd_Id = el_connect[nd_nr] try: ND_I[nd_Id] += NDvals[nd_nr] ND_W[nd_Id] += 1 except: ND_I[nd_Id] = NDvals[nd_nr] ND_W[nd_Id] = 1 # Add the ISV to the float array if ncomp == 4: Iavg.SetNumberOfComponents(4) # 11, 22, 33, 12 Iavg.InsertTuple4(ind, el_avg[0], el_avg[1], el_avg[2], el_avg[3]) mises_val = np.sqrt( ((el_avg[0] - el_avg[1])**2 + (el_avg[1] - el_avg[2])**2 + (el_avg[2] - el_avg[0])**2 + 6 * el_avg[3]**2) / 2) Imises.InsertTuple1(ind, mises_val) else: Iavg.InsertTuple1(ind, el_avg[0]) if do_isn: grid.GetCellData().SetActiveScalars('EA_' + isn) grid.GetCellData().SetScalars(Iavg) if ncomp == 4: grid.GetCellData().SetActiveScalars('EA_' + isn + '_vM') grid.GetCellData().SetScalars(Imises) # rescale the nodal averaged ISVs: for nd_Id in ND_I.keys(): ND_I[nd_Id] /= ND_W[nd_Id] else: del ( ND_I ) # the specific internal state variable is unavailable # # if timef in bvp.NodeVals.keys(): Nd_vals = bvp.NodeVals[timef] if 'temperature' in Nd_vals.keys(): # temeparature is a scalar value: scalars = vtk.vtkFloatArray() scalars.SetName('Temperature') for ind in bvp.nodes.keys(): val = 0. if ind in Nd_vals['temperature'].keys(): val = Nd_vals['temperature'][ind] #for ind,val in Nd_vals['temp_nd'].items(): scalars.InsertTuple1(ind, val) grid.GetPointData().SetActiveScalars('Temperature') grid.GetPointData().SetScalars(scalars) if 'displacement' in Nd_vals.keys(): vector = vtk.vtkFloatArray() vector.SetNumberOfComponents(3) vector.SetName('Displacement') for ind in bvp.nodes.keys(): val = [0., 0., 0.] # displacement field if ind in Nd_vals['displacement'].keys(): val = Nd_vals['displacement'][ind] + [0.] #for ind,val in Nd_vals['temp_nd'].items(): vector.InsertTuple3(ind, val[0], val[1], val[2]) grid.GetPointData().SetActiveVectors('Displacement') grid.GetPointData().SetVectors(vector) if 'strain' in Nd_vals.keys(): scalars = vtk.vtkFloatArray() scalars.SetNumberOfComponents(6) scalars.SetName('Strain') for ind in bvp.nodes.keys(): val = [0.] * 4 if ind in Nd_vals['strain'].keys(): val = list(np.array( Nd_vals['strain'][ind]).flatten()) + [0.] * 4 #for ind,val in Nd_vals['temp_nd'].items(): scalars.InsertTuple6(ind, val[0], val[1], val[2], val[3], 0., 0.) #scalars.InsertTuple4(ind,val[0],val[1],val[2],val[3]) grid.GetPointData().SetActiveScalars('Strain') grid.GetPointData().SetScalars(scalars) if 'plastic strain' in Nd_vals.keys(): #print("DOING PLASTIC") #print(Nd_vals.keys()) #print(Nd_vals['plastic strain']) scalars = vtk.vtkFloatArray() scalars.SetNumberOfComponents(6) scalars.SetName('Plastic Strain') for ind in bvp.nodes.keys(): val = [0.] * 4 if ind in Nd_vals['plastic strain'].keys(): val = list( np.array(Nd_vals['plastic strain'] [ind]).flatten()) + [0.] * 4 #for ind,val in Nd_vals['temp_nd'].items(): scalars.InsertTuple6(ind, val[0], val[1], val[2], val[3], 0., 0.) #scalars.InsertTuple4(ind,val[0],val[1],val[2],val[3]) grid.GetPointData().SetActiveScalars('Plastic Strain') grid.GetPointData().SetScalars(scalars) if 'equivalent plastic' in Nd_vals.keys(): grid.GetPointData().SetActiveScalars('PEEQ') scalars = vtk.vtkFloatArray() scalars.SetName('PEEQ') for ind in bvp.nodes.keys(): val = 0. if ind in Nd_vals['equivalent plastic'].keys(): val = Nd_vals['equivalent plastic'][ind] #for ind,val in Nd_vals['temp_nd'].items(): scalars.InsertTuple1(ind, val) grid.GetPointData().SetScalars(scalars) if 'stress' in Nd_vals.keys(): scalars = vtk.vtkFloatArray() scalars.SetNumberOfComponents(6) scalars.SetName('Stress') ssVM = vtk.vtkFloatArray() ssVM.SetName('von Mises Stress') for ind in bvp.nodes.keys(): val = [0.] * 4 if ind in Nd_vals['stress'].keys(): val = list(np.array(Nd_vals['stress'][ind]).flatten()) scalars.InsertTuple6(ind, val[0], val[1], val[2], val[3], 0., 0.) mises_val = np.sqrt( ((val[0] - val[1])**2 + (val[1] - val[2])**2 + (val[2] - val[0])**2 + 6 * val[3]**2) / 2) ssVM.InsertTuple1(ind, mises_val) grid.GetPointData().SetActiveScalars('Stress') grid.GetPointData().SetScalars(scalars) grid.GetPointData().SetActiveScalars('von Mises Stress') grid.GetPointData().SetScalars(ssVM) grid.Modified() if nr_of_files > 1: file_suffix = file_suffix0 % (int(round(tt * 10**time_sf))) vtkWriter = vtk.vtkUnstructuredGridWriter() vtkWriter.SetInputData(grid) vtkWriter.SetFileTypeToASCII() #vtkWriter.SetFileName(filename+'_'+timef+'.vtk') vtkWriter.SetFileName(filename + file_suffix + '.vtk') vtkWriter.Write() #vtuWriter.WriteNextTime(tt) #vtuWriter.Stop() # return return #vtuWriter,grid
quadPoints.InsertPoint(3, 0.0, 1.0, 0.0) quadPoints.InsertPoint(4, 0.5, 0.0, 0.0) quadPoints.InsertPoint(5, 1.0, 0.5, 0.0) quadPoints.InsertPoint(6, 0.5, 1.0, 0.0) quadPoints.InsertPoint(7, 0.0, 0.5, 0.0) quadScalars = vtk.vtkFloatArray() quadScalars.SetNumberOfTuples(8) quadScalars.InsertValue(0, 0.0) quadScalars.InsertValue(1, 0.0) quadScalars.InsertValue(2, 1.0) quadScalars.InsertValue(3, 1.0) quadScalars.InsertValue(4, 1.0) quadScalars.InsertValue(5, 0.0) quadScalars.InsertValue(6, 0.0) quadScalars.InsertValue(7, 0.0) aQuad = vtk.vtkQuadraticQuad() aQuad.GetPointIds().SetId(0, 0) aQuad.GetPointIds().SetId(1, 1) aQuad.GetPointIds().SetId(2, 2) aQuad.GetPointIds().SetId(3, 3) aQuad.GetPointIds().SetId(4, 4) aQuad.GetPointIds().SetId(5, 5) aQuad.GetPointIds().SetId(6, 6) aQuad.GetPointIds().SetId(7, 7) aQuadGrid = vtk.vtkUnstructuredGrid() aQuadGrid.Allocate(1, 1) aQuadGrid.InsertNextCell(aQuad.GetCellType(), aQuad.GetPointIds()) aQuadGrid.SetPoints(quadPoints) aQuadGrid.GetPointData().SetScalars(quadScalars) aQuadMapper = vtk.vtkDataSetMapper() aQuadMapper.SetInputData(aQuadGrid)
def mapElements(self, points, points2, nidMap, model, j): self.eidMap = {} i = 0 for (eid, element) in sorted(model.elements.iteritems()): self.eidMap[eid] = i #print element.type if isinstance(element, CTRIA3) or isinstance(element, CTRIAR): #print "ctria3" elem = vtkTriangle() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTRIA6): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticTriangle() elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) else: elem = vtkTriangle() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTRIAX6): # midside nodes are required, nodes out of order nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticTriangle() elem.GetPointIds().SetId(3, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) else: elem = vtkTriangle() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[4]]) #a = [0,2,4] #msg = "CTRIAX6 %i %i %i" %(nidMap[nodeIDs[a[0]]], # nidMap[nodeIDs[a[1]]], # nidMap[nodeIDs[a[2]]] ) #raise RuntimeError(msg) #sys.stdout.flush() #elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) #elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) #elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif (isinstance(element, CQUAD4) or isinstance(element, CSHEAR) or isinstance(element, CQUADR)): nodeIDs = element.nodeIDs() elem = vtkQuad() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CQUAD8): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticQuad() elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) else: elem = vtkQuad() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTETRA4): elem = vtkTetra() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTETRA10): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticTetra() elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) else: elem = vtkTetra() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CPENTA6): elem = vtkWedge() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CPENTA15): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticWedge() elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) elem.GetPointIds().SetId(10, nidMap[nodeIDs[10]]) elem.GetPointIds().SetId(11, nidMap[nodeIDs[11]]) elem.GetPointIds().SetId(12, nidMap[nodeIDs[12]]) elem.GetPointIds().SetId(13, nidMap[nodeIDs[13]]) elem.GetPointIds().SetId(14, nidMap[nodeIDs[14]]) else: elem = vtkWedge() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CHEXA8): nodeIDs = element.nodeIDs() elem = vtkHexahedron() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CHEXA20): nodeIDs = element.nodeIDs() #print "nodeIDs = ",nodeIDs if None not in nodeIDs: elem = vtkQuadraticHexahedron() elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) elem.GetPointIds().SetId(10, nidMap[nodeIDs[10]]) elem.GetPointIds().SetId(11, nidMap[nodeIDs[11]]) elem.GetPointIds().SetId(12, nidMap[nodeIDs[12]]) elem.GetPointIds().SetId(13, nidMap[nodeIDs[13]]) elem.GetPointIds().SetId(14, nidMap[nodeIDs[14]]) elem.GetPointIds().SetId(15, nidMap[nodeIDs[15]]) elem.GetPointIds().SetId(16, nidMap[nodeIDs[16]]) elem.GetPointIds().SetId(17, nidMap[nodeIDs[17]]) elem.GetPointIds().SetId(18, nidMap[nodeIDs[18]]) elem.GetPointIds().SetId(19, nidMap[nodeIDs[19]]) else: elem = vtkHexahedron() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif (isinstance(element, LineElement) or isinstance(element, SpringElement)): elem = vtk.vtkLine() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) ### elif isinstance(element, CONM2): # not perfectly located del self.eidMap[eid] i -= 1 nid = element.Nid() c = element.Centroid() elem = vtk.vtkVertex() #elem = vtk.vtkSphere() #elem.SetRadius(1.0) #print str(element) points2.InsertPoint(j, *c) elem.GetPointIds().SetId(0, j) #elem.SetCenter(points.GetPoint(nidMap[nid])) self.grid2.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) j += 1 else: del self.eidMap[eid] i -= 1 print("skipping %s" % (element.type)) i += 1 ### self.grid.SetPoints(points) self.grid2.SetPoints(points2) #self.grid.GetPointData().SetScalars(self.gridResult) #print dir(self.grid) #.SetNumberOfComponents(0) #self.grid.GetCellData().SetNumberOfTuples(1); #self.grid.GetCellData().SetScalars(self.gridResult) self.grid.Modified() self.grid2.Modified() self.grid.Update() self.grid2.Update() print("updated grid")
def mapElements(self, points, points2, nidMap, model, j): for eid, element in sorted(model.elements.iteritems()): if isinstance(element, CTRIA3): #print "ctria3" elem = vtkTriangle() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTRIA6): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticTriangle() elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) else: elem = vtkTriangle() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CQUAD4): nodeIDs = element.nodeIDs() elem = vtkQuad() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CQUAD8): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticQuad() elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) else: elem = vtkQuad() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTETRA4): elem = vtkTetra() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTETRA10): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticTetra() elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) else: elem = vtkTetra() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CPENTA6): elem = vtkWedge() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CPENTA15): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticWedge() elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) elem.GetPointIds().SetId(10, nidMap[nodeIDs[10]]) elem.GetPointIds().SetId(11, nidMap[nodeIDs[11]]) elem.GetPointIds().SetId(12, nidMap[nodeIDs[12]]) elem.GetPointIds().SetId(13, nidMap[nodeIDs[13]]) elem.GetPointIds().SetId(14, nidMap[nodeIDs[14]]) else: elem = vtkWedge() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CHEXA8): nodeIDs = element.nodeIDs() elem = vtkHexahedron() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CHEXA20): nodeIDs = element.nodeIDs() #print "nodeIDs = ",nodeIDs if None not in nodeIDs: elem = vtkQuadraticHexahedron() elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) elem.GetPointIds().SetId(10, nidMap[nodeIDs[10]]) elem.GetPointIds().SetId(11, nidMap[nodeIDs[11]]) elem.GetPointIds().SetId(12, nidMap[nodeIDs[12]]) elem.GetPointIds().SetId(13, nidMap[nodeIDs[13]]) elem.GetPointIds().SetId(14, nidMap[nodeIDs[14]]) elem.GetPointIds().SetId(15, nidMap[nodeIDs[15]]) elem.GetPointIds().SetId(16, nidMap[nodeIDs[16]]) elem.GetPointIds().SetId(17, nidMap[nodeIDs[17]]) elem.GetPointIds().SetId(18, nidMap[nodeIDs[18]]) elem.GetPointIds().SetId(19, nidMap[nodeIDs[19]]) else: elem = vtkHexahedron() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, LineElement) or isinstance(element, SpringElement): elem = vtk.vtkLine() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) self.grid.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) ### elif isinstance(element, CONM2): # not perfectly located nid = element.Nid() c = element.Centroid() elem = vtk.vtkVertex() #elem = vtk.vtkSphere() #elem.SetRadius(1.0) #print str(element) points2.InsertPoint(j, *c) elem.GetPointIds().SetId(0, j) #elem.SetCenter(points.GetPoint(nidMap[nid])) self.grid2.InsertNextCell( elem.GetCellType(), elem.GetPointIds()) j += 1 else: print "skipping %s" % (element.type) ### self.grid.SetPoints(points) self.grid2.SetPoints(points2) self.grid.Update() self.grid2.Update()
def mapElements(self, points, points2, nidMap, model, j): #self.eidMap = {} i = 0 for (eid, element) in sorted(model.elements.iteritems()): self.eidMap[eid] = i #print element.type if isinstance(element, CTRIA3) or isinstance(element, CTRIAR): elem = vtkTriangle() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTRIA6): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticTriangle() elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) else: elem = vtkTriangle() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTRIAX6): # midside nodes are required, nodes out of order nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticTriangle() elem.GetPointIds().SetId(3, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) else: elem = vtkTriangle() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[4]]) #a = [0,2,4] #msg = "CTRIAX6 %i %i %i" %(nidMap[nodeIDs[a[0]]], # nidMap[nodeIDs[a[1]]], # nidMap[nodeIDs[a[2]]] ) #raise RuntimeError(msg) #sys.stdout.flush() #elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) #elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) #elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif (isinstance(element, CQUAD4) or isinstance(element, CSHEAR) or isinstance(element, CQUADR)): nodeIDs = element.nodeIDs() elem = vtkQuad() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CQUAD8): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticQuad() elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) else: elem = vtkQuad() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTETRA4): elem = vtkTetra() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CTETRA10): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticTetra() elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) else: elem = vtkTetra() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CPENTA6): elem = vtkWedge() nodeIDs = element.nodeIDs() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CPENTA15): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtkQuadraticWedge() elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) elem.GetPointIds().SetId(10, nidMap[nodeIDs[10]]) elem.GetPointIds().SetId(11, nidMap[nodeIDs[11]]) elem.GetPointIds().SetId(12, nidMap[nodeIDs[12]]) elem.GetPointIds().SetId(13, nidMap[nodeIDs[13]]) elem.GetPointIds().SetId(14, nidMap[nodeIDs[14]]) else: elem = vtkWedge() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CHEXA8): nodeIDs = element.nodeIDs() elem = vtkHexahedron() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CHEXA20): nodeIDs = element.nodeIDs() #print "nodeIDs = ",nodeIDs if None not in nodeIDs: elem = vtkQuadraticHexahedron() elem.GetPointIds().SetId(8, nidMap[nodeIDs[8]]) elem.GetPointIds().SetId(9, nidMap[nodeIDs[9]]) elem.GetPointIds().SetId(10, nidMap[nodeIDs[10]]) elem.GetPointIds().SetId(11, nidMap[nodeIDs[11]]) elem.GetPointIds().SetId(12, nidMap[nodeIDs[12]]) elem.GetPointIds().SetId(13, nidMap[nodeIDs[13]]) elem.GetPointIds().SetId(14, nidMap[nodeIDs[14]]) elem.GetPointIds().SetId(15, nidMap[nodeIDs[15]]) elem.GetPointIds().SetId(16, nidMap[nodeIDs[16]]) elem.GetPointIds().SetId(17, nidMap[nodeIDs[17]]) elem.GetPointIds().SetId(18, nidMap[nodeIDs[18]]) elem.GetPointIds().SetId(19, nidMap[nodeIDs[19]]) else: elem = vtkHexahedron() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif (isinstance(element, LineElement) or isinstance(element, SpringElement) or element.type in ['CBUSH', 'CBUSH1D', 'CFAST', 'CROD', 'CONROD', 'CELAS1', 'CELAS2', 'CELAS3', 'CELAS4', 'CDAMP1', 'CDAMP2', 'CDAMP3', 'CDAMP4', 'CDAMP5', 'CVISC', ]): nodeIDs = element.nodeIDs() if None not in nodeIDs: # used to be 0... elem = vtk.vtkLine() try: elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) except KeyError: print "nodeIDs =", nodeIDs print str(element) continue self.grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) elif isinstance(element, CONM2): # not perfectly located del self.eidMap[eid] i -= 1 #nid = element.Nid() c = element.Centroid() elem = vtk.vtkVertex() #elem = vtk.vtkSphere() #elem.SetRadius(1.0) #print str(element) points2.InsertPoint(j, *c) elem.GetPointIds().SetId(0, j) #elem.SetCenter(points.GetPoint(nidMap[nid])) self.grid2.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) j += 1 else: del self.eidMap[eid] self.log_info("skipping %s" % element.type) continue i += 1 self.grid.SetPoints(points) self.grid2.SetPoints(points2) #self.grid.GetPointData().SetScalars(self.gridResult) #print dir(self.grid) #.SetNumberOfComponents(0) #self.grid.GetCellData().SetNumberOfTuples(1); #self.grid.GetCellData().SetScalars(self.gridResult) self.grid.Modified() self.grid2.Modified() self.grid.Update() self.grid2.Update() self.log_info("updated grid") cases = {} nelements = len(model.elements) print "len(elements) =", nelements pids = [] # zeros(nelements, 'int32') nxs = [] nys = [] nzs = [] i = 0 for eid, element in sorted(model.elements.iteritems()): pids.append(element.Pid()) if isinstance(element, ShellElement): (nx, ny, nz) = element.Normal() else: nx = ny = nz = 0.0 nxs.append(nx) nys.append(ny) nzs.append(nz) self.iSubcaseNameMap = {1: ['Nastran', '']} # subcaseID, resultType, vectorSize, location, dataFormat if 1: cases[(0, 'Pid', 1, 'centroid', '%.0f')] = pids # if not a flat plate??? #if min(nxs) == max(nxs) and min(nxs) != 0.0: # subcaseID, resultType, vectorSize, location, dataFormat cases[(0, 'Normal_x', 1, 'centroid', '%.1f')] = nxs cases[(0, 'Normal_y', 1, 'centroid', '%.1f')] = nys cases[(0, 'Normal_z', 1, 'centroid', '%.1f')] = nzs self.log.info(cases.keys()) self.finish_io(cases)
def readfile(meshpath): """ Generate half-cylindrical mesh for core test simulation. Parameters ---------- meshpath : string : path to mesh file Return ------ mesh : vtkUnstructuredGrid object. """ arquivo = open(meshpath, 'r').readlines() data = [] #Filtra as linhas em branco que só fodem a vida for idx, linha in enumerate(arquivo): if re.match(r'^\s*$', linha): pass else: data.append(linha.strip()) del arquivo for idx, linha in enumerate(data): if 'coor' in linha.split(): npts = int(linha.split()[1]) #Numero de coordenadas (nos/pontos) nodesidx = idx + 1 #Posicao em data que comecam os nos(pontos) if 'elem' in linha.split(): nelem = int(linha.split()[1]) #Numero de elementos etype = int(data[idx+1].split()[1]) #Nome do elemento no MJC2VTK elemsidx = idx + 1 #Posicao em data que comeca a conectividade if 'nvec' in linha.split(): residx = idx+1 #Posicao em data que comeca os resultados #Short cut se o tipo de elemetno nao puder ser lido if etype not in MJC2VTK: raise Exception(u"Tipo de elemento não implementado") #Alocando memória para a malha points = vtk.vtkPoints() points.SetNumberOfPoints(npts) cells = vtk.vtkCellArray() def read_nodes(): """ Read nodes from data list and provide data structure """ dtype = {'names': 'id x y z', 'type': (int, float, float, float)} nds = loadarray(dtype, [dtype['names']]+data[nodesidx:nodesidx+npts]) return nds def read_elements(): """ Read elements from data list and provide data structure """ nstring = 'id type conect'+(MJC2VTK[etype][1]-1)*' {}' dtype = {'names': nstring.format(*range(MJC2VTK[etype][1]-1)), 'type': (int, int, str(MJC2VTK[etype][1]) + 'int')} els = loadarray(dtype, [dtype['names']]+data[elemsidx:elemsidx+nelem]) return els #Read mesh structure nodes = read_nodes() elements = read_elements() #Free some memory by continuing from results only data = data[residx-1:] #'no no no elem elem elem elem --> res res res ...' # Loop nos nos e preenche as coordenadas for i in xrange(npts): points.SetPoint(nodes[i][0]-1, nodes[i][1], nodes[i][2], nodes[i][3]) #Loop nos elementos e depois loop na conectividade for i in xrange(nelem): #Verifica se e um quadrangular quadratico if MJC2VTK[etype][0] == 23: cellobj = vtk.vtkQuadraticQuad() #Verifica se e um triangulo if MJC2VTK[etype][0] == 5: cellobj = vtk.vtkTriangle() #Verifica se e um quadrilatero if MJC2VTK[etype][0] == 9: cellobj = vtk.vtkQuad() #Verifica se e quadratico if MJC2VTK[etype][2] is 2: nnodestmp = MJC2VTK[etype][1] ordemconect = tuple(range(0, nnodestmp, 2)+range(1, nnodestmp, 2)) #Caso o elemento seja linear: else: # !! CHECAR ordem da conectividade ordemconect = tuple(range(MJC2VTK[etype][1])) # (0, 1, 2) for idx, j in enumerate(ordemconect): # (0[0], 1[1], 2[2]) cellobj.GetPointIds().SetId(idx, elements.conect[i][j]-1) cells.InsertNextCell(cellobj) grid = vtk.vtkUnstructuredGrid() grid.SetPoints(points) grid.SetCells(MJC2VTK[etype][0], cells) read_scalar_results(grid, data) return grid
def main(): titles = list() textMappers = list() textActors = list() uGrids = list() mappers = list() actors = list() renderers = list() uGrids.append(MakeUnstructuredGrid(vtk.vtkQuadraticEdge())) titles.append("VTK_QUADRATIC_EDGE (= 21)") uGrids.append(MakeUnstructuredGrid(vtk.vtkQuadraticTriangle())) titles.append("VTK_QUADRATIC_TRIANGLE (= 22)") uGrids.append(MakeUnstructuredGrid(vtk.vtkQuadraticQuad())) titles.append("VTK_QUADRATIC_QUAD (= 23)") uGrids.append(MakeQuadraticPolygon()) titles.append("VTK_QUADRATIC_POLYGON (= 36)") uGrids.append(MakeUnstructuredGrid(vtk.vtkQuadraticTetra())) titles.append("VTK_QUADRATIC_TETRA (= 24)") uGrids.append(MakeUnstructuredGrid(vtk.vtkQuadraticHexahedron())) titles.append("VTK_QUADRATIC_HEXAHEDRON (= 25)") uGrids.append(MakeUnstructuredGrid(vtk.vtkQuadraticWedge())) titles.append("VTK_QUADRATIC_WEDGE (= 26)") uGrids.append(MakeUnstructuredGrid(vtk.vtkQuadraticPyramid())) titles.append("VTK_QUADRATIC_PYRAMID (= 27)") uGrids.append(MakeUnstructuredGrid(vtk.vtkBiQuadraticQuad())) titles.append("VTK_BIQUADRATIC_QUAD (= 28)") uGrids.append(MakeUnstructuredGrid(vtk.vtkTriQuadraticHexahedron())) titles.append("VTK_TRIQUADRATIC_HEXAHEDRON (= 29)") uGrids.append(MakeUnstructuredGrid(vtk.vtkQuadraticLinearQuad())) titles.append("VTK_QUADRATIC_LINEAR_QUAD (= 30)") uGrids.append(MakeUnstructuredGrid(vtk.vtkQuadraticLinearWedge())) titles.append("VTK_QUADRATIC_LINEAR_WEDGE (= 31)") uGrids.append(MakeUnstructuredGrid(vtk.vtkBiQuadraticQuadraticWedge())) titles.append("VTK_BIQUADRATIC_QUADRATIC_WEDGE (= 32)") uGrids.append(MakeUnstructuredGrid( vtk.vtkBiQuadraticQuadraticHexahedron())) titles.append("VTK_BIQUADRATIC_QUADRATIC_HEXAHEDRON (= 33)") uGrids.append(MakeUnstructuredGrid(vtk.vtkBiQuadraticTriangle())) titles.append("VTK_BIQUADRATIC_TRIANGLE (= 34)") uGrids.append(MakeUnstructuredGrid(vtk.vtkCubicLine())) titles.append("VTK_CUBIC_LINE (= 35)") colors = vtk.vtkNamedColors() renWin = vtk.vtkRenderWindow() renWin.SetSize(600, 600) renWin.SetWindowName("Isoparametric Cell") iRen = vtk.vtkRenderWindowInteractor() iRen.SetRenderWindow(renWin) # Create one sphere for all sphere = vtk.vtkSphereSource() sphere.SetPhiResolution(21) sphere.SetThetaResolution(21) sphere.SetRadius(.08) # Create one text property for all textProperty = vtk.vtkTextProperty() textProperty.SetFontSize(10) textProperty.SetJustificationToCentered() # Create and link the mappers actors and renderers together. for i in range(0, len(uGrids)): print("Creating:", titles[i]) textMappers.append(vtk.vtkTextMapper()) textActors.append(vtk.vtkActor2D()) textMappers[i].GetTextProperty().SetFontSize(10) textMappers[i].GetTextProperty().ShadowOn() mappers.append(vtk.vtkDataSetMapper()) actors.append(vtk.vtkActor()) renderers.append(vtk.vtkRenderer()) mappers[i].SetInputData(uGrids[i]) actors[i].SetMapper(mappers[i]) actors[i].GetProperty().SetColor(colors.GetColor3d("Tomato")) actors[i].GetProperty().EdgeVisibilityOn() actors[i].GetProperty().SetLineWidth(3) actors[i].GetProperty().SetOpacity(.5) renderers[i].AddViewProp(actors[i]) textMappers[i].SetInput(titles[i]) textActors[i].SetMapper(textMappers[i]) textActors[i].SetPosition(50, 10) renderers[i].AddViewProp(textActors[i]) # Label the points labelMapper = vtk.vtkLabeledDataMapper() labelMapper.SetInputData(uGrids[i]) labelActor = vtk.vtkActor2D() labelActor.SetMapper(labelMapper) renderers[i].AddViewProp(labelActor) # Glyph the points pointMapper = vtk.vtkGlyph3DMapper() pointMapper.SetInputData(uGrids[i]) pointMapper.SetSourceConnection(sphere.GetOutputPort()) pointMapper.ScalingOff() pointMapper.ScalarVisibilityOff() pointActor = vtk.vtkActor() pointActor.SetMapper(pointMapper) pointActor.GetProperty().SetDiffuseColor(colors.GetColor3d("Banana")) pointActor.GetProperty().SetSpecular(.6) pointActor.GetProperty().SetSpecularColor(1.0, 1.0, 1.0) pointActor.GetProperty().SetSpecularPower(100) renderers[i].AddViewProp(pointActor) renWin.AddRenderer(renderers[i]) # Setup the viewports xGridDimensions = 4 yGridDimensions = 4 rendererSize = 240 renWin.SetSize(rendererSize * xGridDimensions, rendererSize * yGridDimensions) for row in range(0, yGridDimensions): for col in range(0, xGridDimensions): index = row * xGridDimensions + col # (xmin, ymin, xmax, ymax) viewport = [ float(col) / xGridDimensions, float(yGridDimensions - (row + 1)) / yGridDimensions, float(col + 1) / xGridDimensions, float(yGridDimensions - row) / yGridDimensions ] if index > (len(actors) - 1): # Add a renderer even if there is no actor. # This makes the render window background all the same color. ren = vtk.vtkRenderer() ren.SetBackground(colors.GetColor3d("SlateGray")) ren.SetViewport(viewport) renWin.AddRenderer(ren) continue renderers[index].SetViewport(viewport) renderers[index].SetBackground(colors.GetColor3d("SlateGray")) renderers[index].ResetCamera() renderers[index].GetActiveCamera().Azimuth(30) renderers[index].GetActiveCamera().Elevation(-30) renderers[index].ResetCameraClippingRange() iRen.Initialize() renWin.Render() iRen.Start()
elif (isinstance(element, CQUAD4) or isinstance(element, CSHEAR) or isinstance(element, CQUADR)): nodeIDs = element.nodeIDs() elem = vtk.vtkQuad() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) Quad4cell = grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) Color.InsertTuple1(Quad4cell, 4) elif isinstance(element, CQUAD8): nodeIDs = element.nodeIDs() if None not in nodeIDs: elem = vtk.vtkQuadraticQuad() elem.GetPointIds().SetId(4, nidMap[nodeIDs[4]]) elem.GetPointIds().SetId(5, nidMap[nodeIDs[5]]) elem.GetPointIds().SetId(6, nidMap[nodeIDs[6]]) elem.GetPointIds().SetId(7, nidMap[nodeIDs[7]]) else: elem = vtk.vtkQuad() elem.GetPointIds().SetId(0, nidMap[nodeIDs[0]]) elem.GetPointIds().SetId(1, nidMap[nodeIDs[1]]) elem.GetPointIds().SetId(2, nidMap[nodeIDs[2]]) elem.GetPointIds().SetId(3, nidMap[nodeIDs[3]]) Quad8cell = grid.InsertNextCell(elem.GetCellType(), elem.GetPointIds()) Color.InsertTuple1(Quad8cell, 4) elif isinstance(element, CTETRA4):