0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / StepToTopoDS / StepToTopoDS_TranslateVertex.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: eliminate BRepAPI::Precision()
18
19 #include <BRep_Builder.hxx>
20 #include <Geom_CartesianPoint.hxx>
21 #include <Precision.hxx>
22 #include <StdFail_NotDone.hxx>
23 #include <StepGeom_CartesianPoint.hxx>
24 #include <StepGeom_Point.hxx>
25 #include <StepShape_Vertex.hxx>
26 #include <StepShape_VertexPoint.hxx>
27 #include <StepToGeom.hxx>
28 #include <StepToTopoDS_NMTool.hxx>
29 #include <StepToTopoDS_Tool.hxx>
30 #include <StepToTopoDS_TranslateVertex.hxx>
31 #include <TCollection_HAsciiString.hxx>
32 #include <TopoDS.hxx>
33 #include <TopoDS_Shape.hxx>
34 #include <TopoDS_Vertex.hxx>
35
36 //#include <BRepAPI.hxx>
37 // For I-DEAS-like processing (ssv; 15.11.2010)
38 // ============================================================================
39 // Method  : StepToTopoDS_TranslateVertex::StepToTopoDS_TranslateVertex
40 // Purpose : Empty Constructor
41 // ============================================================================
42 StepToTopoDS_TranslateVertex::StepToTopoDS_TranslateVertex()
43 : myError(StepToTopoDS_TranslateVertexOther)
44 {
45   done = Standard_False;
46 }
47
48 // ============================================================================
49 // Method  : StepToTopoDS_TranslateVertex::StepToTopoDS_TranslateVertex
50 // Purpose : Constructor with a Vertex and a Tool
51 // ============================================================================
52
53 StepToTopoDS_TranslateVertex::StepToTopoDS_TranslateVertex(const Handle(StepShape_Vertex)& V, 
54                                                            StepToTopoDS_Tool& T,
55                                                            StepToTopoDS_NMTool& NMTool)
56 {
57   Init(V, T, NMTool);
58 }
59
60 // ============================================================================
61 // Method  : Init
62 // Purpose : Init with a Vertex and a Tool
63 // ============================================================================
64
65 void StepToTopoDS_TranslateVertex::Init(const Handle(StepShape_Vertex)& aVertex, 
66                                                                 StepToTopoDS_Tool& aTool,
67                                         StepToTopoDS_NMTool& NMTool)
68 {
69   if (aVertex.IsNull()) {
70     myError = StepToTopoDS_TranslateVertexOther;
71     done = Standard_False;
72     return;
73   }
74   if (!aTool.IsBound(aVertex)) {
75
76     // [BEGIN] Proceed with non-manifold topology (ssv; 14.11.2010)
77     if ( NMTool.IsActive() && NMTool.IsBound(aVertex) ) {
78       myResult = NMTool.Find(aVertex);
79       myError  = StepToTopoDS_TranslateVertexDone;
80       done     = Standard_True;
81       return;
82     }
83     // [END] Proceed with non-manifold topology (ssv; 14.11.2010)
84
85     // [BEGIN] Proceed with I-DEAS-like STP (ssv; 15.11.2010)
86     const Handle(TCollection_HAsciiString) aVName = aVertex->Name();
87     if ( NMTool.IsActive() && NMTool.IsIDEASCase() &&
88         !aVName.IsNull() && !aVName->IsEmpty() && NMTool.IsBound(aVName->String()) ) {
89       myResult = NMTool.Find(aVName->String());
90       myError = StepToTopoDS_TranslateVertexDone;
91       done = Standard_True;
92       return;
93     }
94     // [END] Proceed with I-DEAS-like STP (ssv; 15.11.2010)
95
96 //:S4136    Standard_Real preci = BRepAPI::Precision();
97     const Handle(StepShape_VertexPoint) VP = Handle(StepShape_VertexPoint)::DownCast(aVertex);
98     const Handle(StepGeom_Point) P = VP->VertexGeometry();
99     const Handle(StepGeom_CartesianPoint) P1 = Handle(StepGeom_CartesianPoint)::DownCast(P);
100     Handle(Geom_CartesianPoint) P2 = StepToGeom::MakeCartesianPoint (P1);
101     BRep_Builder B;
102     TopoDS_Vertex V;
103     B.MakeVertex(V, P2->Pnt(), Precision::Confusion()); //:S4136: preci
104     aTool.Bind(aVertex,V);
105
106     // Register Vertex in NM tool (ssv; 14.11.2010)
107     if ( NMTool.IsActive() ) {
108       NMTool.Bind(aVertex, V);
109       if ( NMTool.IsIDEASCase() && !aVName.IsNull() && !aVName->IsEmpty() )
110         NMTool.Bind(aVName->String(), V);
111     }
112
113     myResult = V;
114   }
115   else {
116     myResult = TopoDS::Vertex(aTool.Find(aVertex));
117   }
118   myError  = StepToTopoDS_TranslateVertexDone;
119   done     = Standard_True;
120 }
121
122 // ============================================================================
123 // Method  : Value
124 // Purpose : Return the mapped Shape
125 // ============================================================================
126
127 const TopoDS_Shape& StepToTopoDS_TranslateVertex::Value() const 
128 {
129   StdFail_NotDone_Raise_if (!done, "StepToTopoDS_TranslateVertex::Value() - no result");
130   return myResult;
131 }
132
133 // ============================================================================
134 // Method  : Error
135 // Purpose : Return the TranslateVertex Error Code
136 // ============================================================================
137
138 StepToTopoDS_TranslateVertexError StepToTopoDS_TranslateVertex::Error() const
139 {
140   return myError;
141 }