void Su2Writer::writeElements() { QTextStream f(m_File); f << "%\n"; f << "% Inner element connectivity\n"; f << "%\n"; int N = 0; for (vtkIdType id_cell = 0; id_cell < m_Grid->GetNumberOfCells(); ++id_cell) { if (isVolume(id_cell, m_Grid)) { ++N; } } f << "NELEM= " << N << "\n"; int i = 0; for (vtkIdType id_cell = 0; id_cell < m_Grid->GetNumberOfCells(); ++id_cell) { if (isVolume(id_cell, m_Grid)) { f << m_Grid->GetCellType(id_cell); vtkIdType N_pts, *pts; m_Grid->GetCellPoints(id_cell, N_pts, pts); for (int j = 0; j < N_pts; ++j) { f << " " << pts[j]; } f << " " << i << "\n"; ++i; } } }
void EliminateSmallBranches::fillFromLargestVolume() { l2g_t cells = m_Part.getCells(); cout << "filling from largest volume" << endl; double vol_max = 0; vtkIdType id_largest_cell = -1; foreach(vtkIdType id_cell, cells) { if (isVolume(id_cell, m_Grid)) { if (m_Grid->GetCellType(id_cell) != VTK_TETRA) { EG_BUG; } double vol = GeometryTools::cellVA(m_Grid, id_cell, true); if (vol > vol_max && !m_DeleteCell[id_cell]) { id_largest_cell = id_cell; vol_max = vol; } } } if (id_largest_cell == -1) { EG_BUG; } m_MainVolumeCell.fill(false, m_Grid->GetNumberOfCells()); m_FillCells.clear(); m_FillCells.append(id_largest_cell); while (m_FillCells.size() > 0) { QList<vtkIdType> fill_cells = m_FillCells; m_FillCells.clear(); foreach (vtkIdType id_cell, fill_cells) { fill(id_cell); } }
void CreateHexCore::deleteOutside(vtkUnstructuredGrid *grid) { MeshPartition part(grid, true); QVector<bool> is_inside(grid->GetNumberOfCells(), false); vtkIdType id_start = -1; double dmin = 1e99; for (vtkIdType id_cell = 0; id_cell < grid->GetNumberOfCells(); ++id_cell) { if (isVolume(id_cell, grid)) { vec3_t x = cellCentre(grid, id_cell); double d = (x - m_Xi).abs(); if (d < dmin) { dmin = d; id_start = id_cell; } } } if (id_start == -1) { EG_BUG; } is_inside[id_start] = true; bool added = true; while (added) { added = false; for (vtkIdType id_cell = 0; id_cell < grid->GetNumberOfCells(); ++id_cell) { if (is_inside[id_cell]) { for (int j = 0; j < part.c2cGSize(id_cell); ++j) { vtkIdType id_neigh = part.c2cGG(id_cell, j); if (id_neigh >= 0) { if (!is_inside[id_neigh]) { is_inside[id_neigh] = true; added = true; } } } } } } int N = 0; for (vtkIdType id_cell = 0; id_cell < grid->GetNumberOfCells(); ++id_cell) { if (isSurface(id_cell, grid)) { is_inside[id_cell] = true; } if (is_inside[id_cell]) { ++N; } } QVector<vtkIdType> cls(N); N = 0; for (vtkIdType id_cell = 0; id_cell < grid->GetNumberOfCells(); ++id_cell) { if (is_inside[id_cell]) { cls[N] = id_cell; ++N; } } EG_VTKSP(vtkUnstructuredGrid, return_grid); makeCopy(grid, return_grid, cls); makeCopy(return_grid, grid); }
void SimpleFoamWriter::addFace(face_t F) { if (isVolume(F.neighbour,m_Grid)) { if (F.neighbour > F.owner) { F.bc = 0; m_LFaces.append(F); } } else { F.bc = m_BC->GetValue(F.neighbour); F.neighbour = -1; m_LFaces.append(F); } }
void EliminateSmallBranches::unmarkNode(vtkIdType id_node, int layer) { if (layer <= m_NumLayers+2) { for (int i = 0; i < m_Part.n2cGSize(id_node); ++i) { vtkIdType id_cell = m_Part.n2cGG(id_node, i); if (isVolume(id_cell, m_Grid)) { m_DeleteCell[id_cell] = false; } } for (int i = 0; i < m_Part.n2nGSize(id_node); ++i) { unmarkNode(m_Part.n2nGG(id_node, i), layer+1); } } }
void GuiDeleteBadAspectTris::operate() { double threshold = m_Ui.doubleSpinBox->value(); QList<vtkIdType> new_cells; for (vtkIdType id_cell = 0; id_cell < m_Grid->GetNumberOfCells(); ++id_cell) { if (isVolume(id_cell,m_Grid)) EG_ERR_RETURN("The grid contains volume cells"); vtkIdType type_cell = m_Grid->GetCellType(id_cell); if (type_cell == VTK_TRIANGLE) { vtkIdType *pts, N_pts; m_Grid->GetCellPoints(id_cell, N_pts, pts); vec3_t x[3]; for (int i = 0; i < 3; ++i) { m_Grid->GetPoint(pts[i], x[i].data()); }; double l1 = (x[1]-x[0]).abs(); double l2 = (x[2]-x[1]).abs(); double l3 = (x[0]-x[2]).abs(); double l_min = min(l1,min(l2,l3)); double l_max = max(l1,max(l2,l3)); double ratio = l_max/l_min; if (ratio <= threshold) { new_cells.append(id_cell); }; } else { new_cells.append(id_cell); }; }; EG_VTKSP(vtkUnstructuredGrid, new_grid); allocateGrid(new_grid, new_cells.size(), m_Grid->GetNumberOfPoints()); for (vtkIdType id_node = 0; id_node < m_Grid->GetNumberOfPoints(); ++id_node) { vec3_t x; m_Grid->GetPoints()->GetPoint(id_node, x.data()); new_grid->GetPoints()->SetPoint(id_node, x.data()); copyNodeData(m_Grid, id_node, new_grid, id_node); }; foreach (vtkIdType id_cell, new_cells) { vtkIdType *pts, N_pts; m_Grid->GetCellPoints(id_cell, N_pts, pts); vtkIdType type_cell = m_Grid->GetCellType(id_cell); vtkIdType id_new_cell = new_grid->InsertNextCell(type_cell, N_pts, pts); copyCellData(m_Grid, id_cell, new_grid, id_new_cell); };
/* getDiscType * method checks which kind of cd/dvd is to burn * returns integer which is defined in header (AI.h) */ int ProjectTypeSelector::getDiscType() { if(objFileAccess == NULL) throw new ProjectTypeSelectorException(new BString("FileAccess object isn't seted ProjectTypeSelector::getDiscType()")); objFileAccess->generateFileInfos(); TypeList = objFileAccess->getTypes(); fSizeOfFiles = objFileAccess->getFileSize(); FileList = objFileAccess->getFiles(); if(FileList->CountItems() == 0) { return EMPTYLIST; } if(FileList->CountItems() == 1 && isVolume()) { //CD or DVD if(fSizeOfFiles > CDSIZE) { return DVDCOPY; } else { return CDCOPY; } } else if(FileList->CountItems() == 1 && isCue()) { return CUE; } else if(FileList->CountItems() == 1 && isImage()) { //CD or DVD if(fSizeOfFiles > CDSIZE) { return DVDIMAGE; } else { return CDIMAGE; } } else if(FileList->CountItems() == 1 && isProject()) { return PORJECT; } if(isAudioDisc() && intPlayTime > AUDIOCDPLAYTIME) { return AUDIODVD; } else if(isAudioDisc()) { return AUDIOCD; } //CD or DVD if(fSizeOfFiles > CDSIZE) { return DATADVD; } else { //Video CD or data CD if(isVideoDisc()) { return VCD; } else { return DATACD; } } return ERROR; }
void RestrictToAvailableVolumeCells::operate() { QList<vtkIdType> vol_cells, surf_cells; for (vtkIdType id_cell = 0; id_cell < m_Grid->GetNumberOfCells(); ++id_cell) { if (isVolume(id_cell, m_Grid)) { vol_cells.append(id_cell); } } foreach (vtkIdType id_cell, vol_cells) { for (int i = 0; i < m_Part.c2cGSize(id_cell); ++i) { vtkIdType id_neigh = m_Part.c2cGG(id_cell, i); if (id_neigh >= 0) { if (isSurface(id_neigh, m_Grid)) { surf_cells.append(id_neigh); } } } } MeshPartition vol_part(m_Grid); vol_part.setCells(vol_cells + surf_cells); EG_VTKSP(vtkUnstructuredGrid, new_grid1); vol_part.extractToVtkGrid(new_grid1); MeshPartition new_part1(new_grid1, true); QList<QVector<vtkIdType> > new_faces; for (vtkIdType id_cell = 0; id_cell < new_grid1->GetNumberOfCells(); ++id_cell) { if (isVolume(id_cell, new_grid1)) { for (int i = 0; i < new_part1.c2cGSize(id_cell); ++i) { vtkIdType id_neigh = new_part1.c2cGG(id_cell, i); if (id_neigh == -1) { QVector<vtkIdType> pts; getFaceOfCell(new_grid1, id_cell, i, pts); new_faces.append(pts); } } } } EG_VTKSP(vtkUnstructuredGrid, new_grid2); allocateGrid(new_grid2, new_grid1->GetNumberOfCells() + new_faces.size(), new_grid1->GetNumberOfPoints()); EG_VTKDCC(vtkIntArray, cell_code1, new_grid1, "cell_code"); EG_VTKDCC(vtkIntArray, cell_code2, new_grid2, "cell_code"); for (vtkIdType id_node = 0; id_node < new_grid1->GetNumberOfPoints(); ++id_node) { vec3_t x; new_grid1->GetPoint(id_node, x.data()); new_grid2->GetPoints()->SetPoint(id_node, x.data()); copyNodeData(new_grid1, id_node, new_grid2, id_node); } int bc_new = 0; for (vtkIdType id_cell = 0; id_cell < new_grid1->GetNumberOfCells(); ++id_cell) { copyCell(new_grid1, id_cell, new_grid2); copyCellData(new_grid1, id_cell, new_grid2, id_cell); if (isSurface(id_cell, new_grid1)) { bc_new = max(bc_new, cell_code1->GetValue(id_cell) + 1); } else { cell_code2->SetValue(id_cell, 0); } } foreach (QVector<vtkIdType> face, new_faces) { vtkIdType type = VTK_POLYGON; if (face.size() == 3) { type = VTK_TRIANGLE; } else if (face.size() == 4) { type = VTK_QUAD; } vtkIdType id_cell = new_grid2->InsertNextCell(type, face.size(), face.data()); cell_code2->SetValue(id_cell, bc_new); }