0025845: VIS - Surface normals to be associated with polygonal source
[occt.git] / src / IVtk / IVtk_IShapeData.hxx
1 // Created on: 2011-10-12 
2 // Created by: Roman KOZLOV
3 // Copyright (c) 2011-2014 OPEN CASCADE SAS 
4 // 
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #ifndef __IVTK_ISHAPEDATA_H__
17 #define __IVTK_ISHAPEDATA_H__
18
19 #include <gp_Pnt.hxx>
20 #include <IVtk_Interface.hxx>
21 #include <IVtk_Types.hxx>
22 #include <NCollection_Vec3.hxx>
23
24 DEFINE_STANDARD_HANDLE( IVtk_IShapeData, IVtk_Interface )
25
26 //! @class IVtk_IShapeData
27 //! @brief Interface for working with triangulated data.
28 class IVtk_IShapeData : public IVtk_Interface
29 {
30 public:
31   typedef Handle(IVtk_IShapeData) Handle;
32
33   virtual ~IVtk_IShapeData() { }
34
35   DEFINE_STANDARD_RTTIEXT(IVtk_IShapeData,IVtk_Interface)
36
37   //! Insert a coordinate
38   //! @param [in] thePnt  point position
39   //! @param [in] theNorm point normal
40   //! @return id of added point
41   virtual IVtk_PointId InsertPoint (const gp_Pnt& thePnt,
42                                     const NCollection_Vec3<float>& theNorm) = 0;
43
44   //! Insert a vertex.
45   //! @param [in] theShapeID id of the sub-shape to which the vertex belongs.
46   //! @param [in] thePointId id of the point that defines the coordinates of the vertex
47   //! @param [in] theMeshType mesh type of the sub-shape (MT_Undefined by default)
48   virtual void InsertVertex (const IVtk_IdType   theShapeID,
49                              const IVtk_PointId  thePointId,
50                              const IVtk_MeshType theMeshType = MT_Undefined) = 0;
51
52   //! Insert a line.
53   //! @param [in] theShapeID id of the subshape to which the line belongs.
54   //! @param [in] thePointId1 id of the first point
55   //! @param [in] thePointId2 id of the second point
56   //! @param [in] theMeshType mesh type of the subshape (MT_Undefined by default)
57   virtual void InsertLine (const IVtk_IdType   theShapeID,
58                            const IVtk_PointId  thePointId1,
59                            const IVtk_PointId  thePointId2,
60                            const IVtk_MeshType theMeshType = MT_Undefined) = 0;
61
62   //! Insert a poly-line.
63   //! @param [in] shapeID id of the subshape to which the polyline belongs.
64   //! @param [in] pointIds vector of point ids
65   //! @param [in] meshType mesh type of the subshape (MT_Undefined by default)
66   virtual void InsertLine (const IVtk_IdType       theShapeID,
67                            const IVtk_PointIdList* thePointIds,
68                            const IVtk_MeshType     theMeshType = MT_Undefined) = 0;
69
70   //! Insert a triangle
71   //! @param [in] theShapeID id of the subshape to which the triangle belongs.
72   //! @param [in] thePointId1 id of the first point
73   //! @param [in] thePointId2 id of the second point
74   //! @param [in] thePointId3 id of the third point
75   //! @param [in] theMeshType mesh type of the subshape (MT_Undefined by default)
76   virtual void InsertTriangle (const IVtk_IdType   theShapeID,
77                                const IVtk_PointId  thePointId1,
78                                const IVtk_PointId  thePointId2,
79                                const IVtk_PointId  thePointId3,
80                                const IVtk_MeshType theMeshType = MT_Undefined) = 0;
81
82 public:
83
84   //! Insert a coordinate
85   //! @param [in] theX X coordinate
86   //! @param [in] theY Y coordinate
87   //! @param [in] theZ Z coordinate
88   //! @return id of added point
89   virtual IVtk_PointId InsertCoordinate (double theX, double theY, double theZ)
90   {
91     return InsertCoordinate (gp_Pnt (theX, theY, theZ));
92   }
93
94   //! Insert a coordinate
95   //! @param [in] thePnt point position
96   //! @return id of added point
97   IVtk_PointId InsertCoordinate (const gp_Pnt& thePnt)
98   {
99     return InsertPoint (thePnt, NCollection_Vec3<float>(0.0f, 0.0f, 1.0f));
100   }
101
102 };
103
104 #endif // __IVTK_ISHAPEDATA_H__