0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / VrmlData / VrmlData_ShapeConvert.hxx
1 // Created on: 2007-08-04
2 // Created by: Alexander GRIGORIEV
3 // Copyright (c) 2007-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 VrmlData_ShapeConvert_HeaderFile
17 #define VrmlData_ShapeConvert_HeaderFile
18
19 #include <VrmlData_Geometry.hxx>
20 #include <VrmlData_Appearance.hxx>
21 #include <VrmlData_Group.hxx>
22 #include <NCollection_List.hxx>
23 #include <NCollection_DataMap.hxx>
24 #include <TopoDS_Shape.hxx>
25
26 class VrmlData_Scene;
27 class VrmlData_Coordinate;
28 class TopoDS_Face;
29 class Poly_Polygon3D;
30 class Poly_Triangulation;
31 class XCAFPrs_Style;
32 class TDocStd_Document;
33 class TDF_Label;
34
35
36 /**
37  * Algorithm converting one shape or a set of shapes to VrmlData_Scene.
38  */
39
40 class VrmlData_ShapeConvert 
41 {
42  public:
43
44   typedef struct {
45     TCollection_AsciiString Name;
46     TopoDS_Shape            Shape;
47     Handle(VrmlData_Node)   Node;
48   } ShapeData;
49
50   // ---------- PUBLIC METHODS ----------
51
52
53   /**
54    * Constructor.
55    * @param theScene
56    *   Scene receiving all Vrml data.
57    * @param theScale
58    *   Scale factor, considering that VRML standard specifies coordinates in
59    *   meters. So if your data are in mm, you should provide theScale=0.001
60    */
61   inline VrmlData_ShapeConvert (VrmlData_Scene&     theScene,
62                                 const Standard_Real theScale = 1.)
63     : myScene (theScene),
64       myScale (theScale),
65       myDeflection(0.0),
66       myDeflAngle(0.0)
67   {}
68
69   /**
70    * Add one shape to the internal list, may be called several times with
71    * different shapes.
72    */
73   Standard_EXPORT void AddShape (const TopoDS_Shape& theShape,
74                                  const char *        theName = 0L);
75
76   /**
77    * Convert all accumulated shapes and store them in myScene.
78    * The internal data structures are cleared in the end of convertion.
79    * @param theExtractFaces
80    *   If True,  converter extracst faces from the shapes. 
81    * @param theExtractEdges
82    *   If True,  converter extracts edges from the shapes.
83    * @param theDeflection 
84    *   Deflection for tessellation of geometrical lines/surfaces. Existing mesh
85    *   is used if its deflection is smaller than the one given by this
86    *   parameter.
87    * @param theDeflAngle 
88    *   Angular deflection for tessellation of geometrical lines. 
89    */
90   Standard_EXPORT void Convert (const Standard_Boolean theExtractFaces,
91                                 const Standard_Boolean theExtractEdges,
92                                 const Standard_Real    theDeflection = 0.01,
93                                 const Standard_Real    theDeflAngle = 20.*M_PI/180.);
94                                 //this value of theDeflAngle is used by default 
95                                 //for tesselation while shading (Drawer->HLRAngle())
96
97   /**
98    * Add all shapes start from given document with colors and names to the internal structure
99    */
100   Standard_EXPORT void ConvertDocument(const Handle(TDocStd_Document)& theDoc);
101
102  protected:
103   // ---------- PROTECTED METHODS ----------
104
105   Handle(VrmlData_Geometry) triToIndexedFaceSet
106                                 (const Handle(Poly_Triangulation)&,
107                                  const TopoDS_Face&,
108                                  const Handle(VrmlData_Coordinate)&);
109
110   Handle(VrmlData_Geometry) polToIndexedLineSet
111                                 (const Handle(Poly_Polygon3D)&);
112
113   Handle(VrmlData_Appearance) defaultMaterialFace () const;
114
115   Handle(VrmlData_Appearance) defaultMaterialEdge () const;
116
117   Handle(VrmlData_Geometry) makeTShapeNode(const TopoDS_Shape& theShape,
118                                            const TopAbs_ShapeEnum theShapeType,
119                                            TopLoc_Location& theLoc);
120
121   void addAssembly (const Handle(VrmlData_Group)& theParent,
122                     const TDF_Label& theLabel,
123                     const Handle(TDocStd_Document)& theDoc,
124                     const Standard_Boolean theNeedCreateGroup);
125
126   void addInstance (const Handle(VrmlData_Group)& theParent,
127                     const TDF_Label& theLabel,
128                     const Handle(TDocStd_Document)& theDoc);
129
130   void addShape (const Handle(VrmlData_Group)& theParent,
131                  const TDF_Label& theLabel,
132                  const Handle(TDocStd_Document)& theDoc);
133
134   Handle(VrmlData_Appearance) makeMaterialFromStyle (const XCAFPrs_Style& theStyle,
135                                                      const TDF_Label& theAttribLab) const;
136
137  private:
138   // ---------- PRIVATE FIELDS ----------
139
140   VrmlData_Scene&                       myScene;
141   Standard_Real                         myScale;
142   NCollection_List <ShapeData>          myShapes;
143
144   Standard_Real myDeflection;
145   Standard_Real myDeflAngle;
146   NCollection_DataMap <TopoDS_Shape, Handle(VrmlData_Geometry)> myRelMap;
147
148   // ---------- PRIVATE METHODS ----------
149   void operator= (const VrmlData_ShapeConvert&);
150 };
151
152 #endif