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; }
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; };
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); };