0024186: Eliminate remaining compiler warnings in MSVC++ 2010 64 bit with warning...
[occt.git] / src / VrmlData / VrmlData_IndexedLineSet.hxx
1 // Created on: 2007-08-01
2 // Created by: Alexander GRIGORIEV
3 // Copyright (c) 2007-2012 OPEN CASCADE SAS
4 //
5 // The content of this file is subject to the Open CASCADE Technology Public
6 // License Version 6.5 (the "License"). You may not use the content of this file
7 // except in compliance with the License. Please obtain a copy of the License
8 // at http://www.opencascade.org and read it completely before using this file.
9 //
10 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
11 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
12 //
13 // The Original Code and all software distributed under the License is
14 // distributed on an "AS IS" basis, without warranty of any kind, and the
15 // Initial Developer hereby disclaims all such warranties, including without
16 // limitation, any warranties of merchantability, fitness for a particular
17 // purpose or non-infringement. Please see the License for the specific terms
18 // and conditions governing the rights and limitations under the License.
19
20
21
22 #ifndef VrmlData_IndexedLineSet_HeaderFile
23 #define VrmlData_IndexedLineSet_HeaderFile
24
25 #include <VrmlData_Geometry.hxx>
26 #include <VrmlData_Coordinate.hxx>
27 #include <VrmlData_Color.hxx>
28 //#include <Quantity_Color.hxx>
29
30 /**
31  * Data type to store a set of polygons.
32  */
33
34 class VrmlData_IndexedLineSet : public VrmlData_Geometry
35 {
36  public:
37   // ---------- PUBLIC METHODS ----------
38
39
40   /**
41    * Empty constructor.
42    */
43   inline VrmlData_IndexedLineSet ()
44     : myArrPolygons     (0L),
45       myArrColorInd     (0L),
46       myNbPolygons      (0),
47       myNbColors        (0),
48       myColorPerVertex  (Standard_True)
49   {}
50
51   /**
52    * Constructor.
53    */
54   inline VrmlData_IndexedLineSet (const VrmlData_Scene&  theScene,
55                                   const char             * theName,
56                                   const Standard_Boolean isColorPerVertex
57                                                         = Standard_True)
58     : VrmlData_Geometry (theScene, theName),
59       myArrPolygons     (0L),
60       myArrColorInd     (0L),
61       myNbPolygons      (0),
62       myNbColors        (0),
63       myColorPerVertex  (isColorPerVertex)      
64   {}
65
66   /**
67    * Query the Coordinates.
68    */
69   inline const Handle(VrmlData_Coordinate)&
70                 Coordinates     () const        { return myCoords; }
71
72   /**
73    * Set the nodes
74    */
75   inline void   SetCoordinates  (const Handle(VrmlData_Coordinate)& theCoord)
76   { myCoords = theCoord; }
77
78   /**
79    * Query the Colors.
80    */
81   inline const Handle(VrmlData_Color)&
82                 Colors          () const        { return myColors; }
83
84   /**
85    * Set the Color node
86    */
87   inline void   SetColors       (const Handle(VrmlData_Color)& theColors)
88   { myColors = theColors; }
89
90   // ========================================================================
91   // =========================== POLYLINES  =================================
92   /**
93    * Query the array of polygons
94    */
95   inline size_t Polygons        (const Standard_Integer**& arrPolygons) const
96   { arrPolygons = myArrPolygons; return myNbPolygons; }
97
98   /**
99    * Query one polygon.
100    * @param iPolygon
101    *   rank of the polygon [0 .. N-1]
102    * @param outIndice
103    *   <tt>[out]</tt> array of vertex indice
104    * @return
105    *   number of vertice in the polygon - the dimension of outIndice array
106    */
107   inline Standard_Integer
108                 Polygon         (const Standard_Integer         iPolygon,
109                                  const Standard_Integer *&      outIndice)
110   { return * (outIndice = myArrPolygons[iPolygon])++; }
111
112   /**
113    * Set the polygons
114    */
115   inline void   SetPolygons     (const Standard_Size       nPolygons,
116                                  const Standard_Integer ** thePolygons)
117   { myNbPolygons = nPolygons; myArrPolygons = thePolygons; }
118
119   // ========================================================================
120   // ================================ COLORS ================================
121   /**
122    * Query the array of color indice
123    * @param arrColorInd
124    *   <tt>[out]</tt> array of colorIndex as it is described in VRML2.0 spec
125    * @return
126    *   Number of integers in the array arrColorInd.
127    */
128   inline size_t ArrayColorInd   (const Standard_Integer**& arrColorInd) const
129   { arrColorInd = myArrColorInd; return myNbColors; }
130
131   /**
132    * Query a color for one node in the given element. The color is
133    * interpreted according to fields myColors, myArrColorInd,
134    * myColorPerVertex, as defined in VRML 2.0.
135    * @param iFace
136    *   rank of the polygon [0 .. N-1]
137    * @param iVertex
138    *   rank of the vertex in the polygon [0 .. M-1]. This parameter is ignored
139    *   if (myColorPerVertex == False)
140    * @return
141    *   Color value (RGB); if the color is indefinite then returns (0., 0., 0.)
142    */
143   Standard_EXPORT Quantity_Color
144                 GetColor        (const Standard_Integer         iFace,
145                                  const Standard_Integer         iVertex);
146
147   /**
148    * Set the colors array of indice
149    */
150   inline void   SetColorInd     (const Standard_Size       nIndice,
151                                  const Standard_Integer ** theIndice)
152   { myNbColors = nIndice; myArrColorInd = theIndice; }
153
154   /**
155    * Set the boolean value "colorPerVertex"
156    */
157   inline void   SetColorPerVertex (const Standard_Boolean isColorPerVertex)
158   { myColorPerVertex = isColorPerVertex; }
159
160   /**
161    * Query the shape. This method checks the flag myIsModified; if True it
162    * should rebuild the shape presentation.
163    */
164   Standard_EXPORT virtual const Handle(TopoDS_TShape)&
165                 TShape          ();
166
167   /**
168    * Create a copy of this node.
169    * If the parameter is null, a new copied node is created. Otherwise new node
170    * is not created, but rather the given one is modified.
171    */
172   Standard_EXPORT virtual Handle(VrmlData_Node)
173                 Clone           (const Handle(VrmlData_Node)& theOther)const;
174
175   /**
176    * Read the Node from input stream.
177    */
178   Standard_EXPORT virtual VrmlData_ErrorStatus
179                 Read            (VrmlData_InBuffer& theBuffer);
180
181   /**
182    * Write the Node to output stream.
183    */
184   Standard_EXPORT virtual VrmlData_ErrorStatus
185                 Write           (const char * thePrefix) const;
186
187   /**
188    * Returns True if the node is default, so that it should not be written.
189    */
190   Standard_EXPORT virtual Standard_Boolean
191                 IsDefault       () const;
192
193
194  private:
195   // ---------- PRIVATE FIELDS ----------
196   Handle(VrmlData_Coordinate)           myCoords;
197   Handle(VrmlData_Color)                myColors;
198   const Standard_Integer                ** myArrPolygons;
199   const Standard_Integer                ** myArrColorInd;
200   Standard_Size                         myNbPolygons;
201   Standard_Size                         myNbColors;
202   Standard_Boolean                      myColorPerVertex;
203
204  public:
205 // Declaration of CASCADE RTTI
206 DEFINE_STANDARD_RTTI (VrmlData_IndexedLineSet)
207 };
208
209 // Definition of HANDLE object using Standard_DefineHandle.hxx
210 DEFINE_STANDARD_HANDLE (VrmlData_IndexedLineSet, VrmlData_Geometry)
211
212
213 #endif