1 #include "SMDS_VtkFace.hxx"
2 #include "SMDS_MeshNode.hxx"
3 #include "SMDS_Mesh.hxx"
4 #include "SMDS_VtkCellIterator.hxx"
12 SMDS_VtkFace::SMDS_VtkFace()
16 SMDS_VtkFace::SMDS_VtkFace(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
21 SMDS_VtkFace::~SMDS_VtkFace()
25 void SMDS_VtkFace::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
27 vtkUnstructuredGrid* grid = mesh->getGrid();
29 myMeshId = mesh->getMeshId();
30 vtkIdType aType = VTK_TRIANGLE;
31 switch(nodeIds.size())
33 case 3: aType = VTK_TRIANGLE; break;
34 case 4: aType = VTK_QUAD; break;
35 case 6: aType = VTK_QUADRATIC_TRIANGLE; break;
36 case 8: aType = VTK_QUADRATIC_QUAD; break;
37 default: aType = VTK_TRIANGLE; break;
39 myVtkID = grid->InsertNextLinkedCell(aType, nodeIds.size(), &nodeIds[0]);
42 bool SMDS_VtkFace::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
47 void SMDS_VtkFace::Print(std::ostream & OS) const
49 OS << "edge <" << GetID() << "> : ";
52 int SMDS_VtkFace::NbEdges() const
60 default: MESSAGE("invalid number of nodes");
65 int SMDS_VtkFace::NbFaces() const
70 int SMDS_VtkFace::NbNodes() const
72 vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
73 int nbPoints = grid->GetCell(myVtkID)->GetNumberOfPoints();
78 * \brief Return node by its index
79 * \param ind - node index
80 * \retval const SMDS_MeshNode* - the node
83 SMDS_VtkFace::GetNode(const int ind) const
85 return SMDS_MeshElement::GetNode(ind); // --- a optimiser !
88 bool SMDS_VtkFace::IsQuadratic() const
90 if (this->NbNodes() > 5)
96 SMDSAbs_EntityType SMDS_VtkFace::GetEntityType() const
98 SMDSAbs_EntityType aType = SMDSEntity_Triangle;
102 case 6: aType = SMDSEntity_Triangle; break;
104 case 8: aType = SMDSEntity_Quadrangle; break;
109 vtkIdType SMDS_VtkFace::GetVtkType() const
113 case 3: return VTK_TRIANGLE;
114 case 6: return VTK_QUADRATIC_TRIANGLE;
115 case 4: return VTK_QUAD;
116 case 8: return VTK_QUADRATIC_QUAD;
120 SMDS_ElemIteratorPtr SMDS_VtkFace::elementsIterator(SMDSAbs_ElementType type) const
125 return SMDS_ElemIteratorPtr(new SMDS_VtkCellIterator(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
127 MESSAGE("ERROR : Iterator not implemented");
128 return SMDS_ElemIteratorPtr((SMDS_ElemIterator*) NULL);