Salome HOME
PR: mesh and visu hexa no copy
[modules/smesh.git] / src / SMDS / SMDS_VtkFace.cxx
1 #include "SMDS_VtkFace.hxx"
2 #include "SMDS_MeshNode.hxx"
3 #include "SMDS_Mesh.hxx"
4 #include "SMDS_VtkCellIterator.hxx"
5
6 #include "utilities.h"
7
8 #include <vector>
9
10 using namespace std;
11
12 SMDS_VtkFace::SMDS_VtkFace()
13 {
14 }
15
16 SMDS_VtkFace::SMDS_VtkFace(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
17 {
18         init(nodeIds, mesh);
19 }
20
21 SMDS_VtkFace::~SMDS_VtkFace()
22 {
23 }
24
25 void SMDS_VtkFace::init(std::vector<vtkIdType> nodeIds, SMDS_Mesh* mesh)
26 {
27         vtkUnstructuredGrid* grid = mesh->getGrid();
28         myIdInShape = -1;
29         myMeshId = mesh->getMeshId();
30         vtkIdType aType = VTK_TRIANGLE;
31         if (nodeIds.size() == 4)
32                 aType = VTK_QUAD;
33         myVtkID = grid->InsertNextLinkedCell(aType, nodeIds.size(), &nodeIds[0]);
34 }
35
36 bool SMDS_VtkFace::ChangeNodes(const SMDS_MeshNode* nodes[], const int nbNodes)
37 {
38         return true;
39 }
40
41 void SMDS_VtkFace::Print(std::ostream & OS) const
42 {
43         OS << "edge <" << GetID() << "> : ";
44 }
45
46 int SMDS_VtkFace::NbEdges() const
47 {
48         return NbNodes();
49 }
50
51 int SMDS_VtkFace::NbFaces() const
52 {
53         return 1;
54 }
55
56 int SMDS_VtkFace::NbNodes() const
57 {
58         vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid();
59         int nbPoints = grid->GetCell(myVtkID)->GetNumberOfPoints();
60         return nbPoints;
61 }
62
63 /*!
64  * \brief Return node by its index
65  * \param ind - node index
66  * \retval const SMDS_MeshNode* - the node
67  */
68 const SMDS_MeshNode*
69 SMDS_VtkFace::GetNode(const int ind) const
70 {
71         return 0;
72 }
73
74 SMDSAbs_EntityType SMDS_VtkFace::GetEntityType() const
75 {
76         int nbNodes = NbNodes();
77         if (nbNodes == 3)
78                 return SMDSEntity_Triangle;
79         else
80                 return SMDSEntity_Quadrangle;
81 }
82
83 vtkIdType SMDS_VtkFace::GetVtkType() const
84 {
85         int nbNodes = NbNodes();
86         if (nbNodes == 3)
87                 return VTK_TRIANGLE;
88         else
89                 return VTK_QUAD;
90
91 }
92
93 SMDS_ElemIteratorPtr SMDS_VtkFace::elementsIterator(SMDSAbs_ElementType type) const
94 {
95         switch (type)
96         {
97         case SMDSAbs_Node:
98                 return SMDS_ElemIteratorPtr(new SMDS_VtkCellIterator(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType()));
99         default:
100                 MESSAGE("ERROR : Iterator not implemented");
101                 return SMDS_ElemIteratorPtr((SMDS_ElemIterator*) NULL);
102         }
103 }
104