Ejemplo n.º 1
0
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;
    }
  }
}
Ejemplo n.º 2
0
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);
    }
  }
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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);
  }
}
Ejemplo n.º 5
0
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);
    }
  }
}
Ejemplo n.º 6
0
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);
  };
Ejemplo n.º 7
0
/*	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);
  }