0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / StepToTopoDS / StepToTopoDS_TranslateShell.cxx
1 // Created on: 1995-01-03
2 // Created by: Frederic MAUPAS
3 // Copyright (c) 1995-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 //:   gka 09.04.99: S4136: improving tolerance management
18
19 #include <BRep_Builder.hxx>
20 #include <Message_ProgressIndicator.hxx>
21 #include <Message_ProgressSentry.hxx>
22 #include <StdFail_NotDone.hxx>
23 #include <StepShape_ConnectedFaceSet.hxx>
24 #include <StepShape_FaceSurface.hxx>
25 #include <StepToTopoDS_NMTool.hxx>
26 #include <StepToTopoDS_Tool.hxx>
27 #include <StepToTopoDS_TranslateFace.hxx>
28 #include <StepToTopoDS_TranslateShell.hxx>
29 #include <TopoDS.hxx>
30 #include <TopoDS_Face.hxx>
31 #include <TopoDS_Shape.hxx>
32 #include <TopoDS_Shell.hxx>
33 #include <Transfer_TransientProcess.hxx>
34
35 // ============================================================================
36 // Method  : StepToTopoDS_TranslateShell::StepToTopoDS_TranslateShell
37 // Purpose : Empty Constructor
38 // ============================================================================
39 StepToTopoDS_TranslateShell::StepToTopoDS_TranslateShell()
40 : myError(StepToTopoDS_TranslateShellOther)
41 {
42   done = Standard_False;
43 }
44
45 // ============================================================================
46 // Method  : StepToTopoDS_TranslateShell::StepToTopoDS_TranslateShell()
47 // Purpose : Constructor with a ConnectedFaceSet and a Tool
48 // ============================================================================
49
50 StepToTopoDS_TranslateShell::StepToTopoDS_TranslateShell
51 (const Handle(StepShape_ConnectedFaceSet)& CFS, StepToTopoDS_Tool& T, StepToTopoDS_NMTool& NMTool)
52 {
53   Init(CFS, T, NMTool);
54 }
55
56 // ============================================================================
57 // Method  : Init
58 // Purpose : Init with a ConnectedFaceSet and a Tool
59 // ============================================================================
60
61 void StepToTopoDS_TranslateShell::Init
62 (const Handle(StepShape_ConnectedFaceSet)& CFS, StepToTopoDS_Tool& aTool, StepToTopoDS_NMTool& NMTool)
63 {
64   //bug15697
65   if(CFS.IsNull())
66     return;
67   
68   if (!aTool.IsBound(CFS)) {
69
70     BRep_Builder B;
71     Handle(Transfer_TransientProcess) TP = aTool.TransientProcess();
72
73     Standard_Integer NbFc = CFS->NbCfsFaces();
74     TopoDS_Shell Sh;
75     B.MakeShell(Sh);
76     TopoDS_Face F;
77     TopoDS_Shape S;
78     Handle(StepShape_Face) StepFace;
79
80     StepToTopoDS_TranslateFace myTranFace;
81     myTranFace.SetPrecision(Precision()); //gka
82     myTranFace.SetMaxTol(MaxTol());
83
84     Message_ProgressSentry PS ( TP->GetProgress(), "Face", 0, NbFc, 1 );
85     for (Standard_Integer i = 1; i <= NbFc && PS.More(); i++, PS.Next()) {
86 #ifdef OCCT_DEBUG
87       std::cout << "Processing Face : " << i << std::endl;
88 #endif
89       StepFace = CFS->CfsFacesValue(i);
90       Handle(StepShape_FaceSurface) theFS =
91         Handle(StepShape_FaceSurface)::DownCast(StepFace);
92       if (!theFS.IsNull()) {
93         myTranFace.Init(theFS, aTool, NMTool);
94         if (myTranFace.IsDone()) {
95           S = myTranFace.Value();
96           F = TopoDS::Face(S);
97           B.Add(Sh, F);
98         }
99         else { // Warning only + add FaceSurface file Identifier
100           TP->AddWarning(theFS, " a Face from Shell not mapped to TopoDS");
101         }
102       }
103       else { // Warning : add identifier
104         TP->AddWarning(StepFace, " Face is not of FaceSurface Type; not mapped to TopoDS");
105       }
106     }
107     Sh.Closed (BRep_Tool::IsClosed (Sh));
108     myResult = Sh;
109     aTool.Bind(CFS, myResult);
110     myError  = StepToTopoDS_TranslateShellDone;
111     done     = Standard_True;
112   }
113   else {
114     myResult = TopoDS::Shell(aTool.Find(CFS));
115     myError  = StepToTopoDS_TranslateShellDone;
116     done     = Standard_True;
117   }
118 }
119
120 // ============================================================================
121 // Method  : Value
122 // Purpose : Return the mapped Shape
123 // ============================================================================
124
125 const TopoDS_Shape& StepToTopoDS_TranslateShell::Value() const 
126 {
127   StdFail_NotDone_Raise_if (!done, "StepToTopoDS_TranslateShell::Value() - no result");
128   return myResult;
129 }
130
131 // ============================================================================
132 // Method  : Error
133 // Purpose : Return the TranslateShell Error code
134 // ============================================================================
135
136 StepToTopoDS_TranslateShellError StepToTopoDS_TranslateShell::Error() const
137 {
138   return myError;
139 }
140