Ejemplo n.º 1
0
void TriangularCadInterface::updateBackgroundGridInfo()
{
  getAllCells(m_Cells, m_BGrid);
  getNodesFromCells(m_Cells, m_Nodes, m_BGrid);
  setBoundaryCodes(GuiMainWindow::pointer()->getAllBoundaryCodes());
  setAllCells();
  readVMD();
  updatePotentialSnapPoints();
  l2l_t  c2c   = getPartC2C();
  g2l_t _cells = getPartLocalCells();
  QVector<int> m_LNodes(m_Nodes.size());
  for (int i = 0; i < m_LNodes.size(); ++i) {
    m_LNodes[i] = i;
  }
  createNodeToNode(m_Cells, m_Nodes, m_LNodes, m_N2N, m_BGrid);

  // create m_Triangles
  m_Triangles.resize(m_BGrid->GetNumberOfCells());
  for (vtkIdType id_cell = 0; id_cell < m_BGrid->GetNumberOfCells(); ++id_cell) {
    m_Triangles[id_cell] = Triangle(m_BGrid, id_cell);
    for (int i = 0; i < 3; i++) {
      int i_cell = _cells[id_cell];
      if (c2c[i_cell][i] < 0) {
        m_Triangles[id_cell].setNeighbourFalse(i);
      } else {
        m_Triangles[id_cell].setNeighbourTrue(i);
      }
    }
  }

  // compute node normals
  m_NodeNormals.resize(m_BGrid->GetNumberOfPoints());
  for (vtkIdType id_node = 0; id_node < m_BGrid->GetNumberOfPoints(); ++id_node) {
    m_NodeNormals[id_node] = vec3_t(0, 0, 0);
  }

  foreach(Triangle T, m_Triangles) {
    double angle_a = GeometryTools::angle(m_BGrid, T.idC(), T.idA(), T.idB());
    double angle_b = GeometryTools::angle(m_BGrid, T.idA(), T.idB(), T.idC());
    double angle_c = GeometryTools::angle(m_BGrid, T.idB(), T.idC(), T.idA());
    if (isnan(angle_a) || isinf(angle_a)) EG_BUG;
    if (isnan(angle_b) || isinf(angle_b)) EG_BUG;
    if (isnan(angle_c) || isinf(angle_c)) EG_BUG;
    if (!checkVector(T.g3())) {
      qWarning() << "T.g3 = " << T.g3();
      EG_BUG;
    }
    m_NodeNormals[T.idA()] += angle_a * T.g3();
    m_NodeNormals[T.idB()] += angle_b * T.g3();
    m_NodeNormals[T.idC()] += angle_c * T.g3();
    if (!checkVector(m_NodeNormals[T.idA()])) EG_BUG;
    if (!checkVector(m_NodeNormals[T.idB()])) EG_BUG;
    if (!checkVector(m_NodeNormals[T.idC()])) EG_BUG;
  }
Ejemplo n.º 2
0
void FixSTL::createTriangles(const QList<QVector<vtkIdType> > &triangles, vtkUnstructuredGrid *tetra_grid)
{
  QVector<vtkIdType> cells, nodes;
  QVector<int> _nodes;
  getAllCells(cells, tetra_grid);
  getNodesFromCells(cells, nodes, tetra_grid);
  createNodeMapping(nodes, _nodes, tetra_grid);
  QVector<bool> active(nodes.size(),false);
  foreach (QVector<vtkIdType> T, triangles) {
    active[_nodes[T[0]]] = true;
    active[_nodes[T[1]]] = true;
    active[_nodes[T[2]]] = true;
  };
Ejemplo n.º 3
0
void Iterator::getCells()
{
  if (!custom_iteration) {
    if (volume_iteration) {
      getAllVolumeCells(cells, m_Grid);
    } else {
      getAllSurfaceCells(cells, m_Grid);
    };
  };
  getNodesFromCells(cells, nodes, m_Grid);
  createCellMapping(cells, _cells, m_Grid);
  createNodeMapping(nodes, _nodes, m_Grid);
  createNodeToCell(cells, nodes, _nodes, n2c, m_Grid);
  createNodeToNode(cells, nodes, _nodes, n2n, m_Grid);
  createCellToCell(cells, c2c, m_Grid);
};