0029915: Porting to VC 2017 : Regressions in Modeling Algorithms on VC 2017
[occt.git] / src / TopoDSToStep / TopoDSToStep.cxx
1 // Created on: 1994-12-13
2 // Created by: Frederic MAUPAS
3 // Copyright (c) 1994-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
18 #include <BRep_Tool.hxx>
19 #include <BRepTools_Modifier.hxx>
20 #include <Geom_Surface.hxx>
21 #include <MoniTool_DataMapIteratorOfDataMapOfShapeTransient.hxx>
22 #include <MoniTool_DataMapOfShapeTransient.hxx>
23 #include <Standard_Transient.hxx>
24 #include <TCollection_HAsciiString.hxx>
25 #include <TColStd_MapOfTransient.hxx>
26 #include <TopExp_Explorer.hxx>
27 #include <TopLoc_Location.hxx>
28 #include <TopoDS.hxx>
29 #include <TopoDS_Face.hxx>
30 #include <TopoDS_Shape.hxx>
31 #include <TopoDSToStep.hxx>
32 #include <TopoDSToStep_Tool.hxx>
33 #include <Transfer_Binder.hxx>
34 #include <Transfer_FinderProcess.hxx>
35 #include <Transfer_SimpleBinderOfTransient.hxx>
36 #include <TransferBRep.hxx>
37 #include <TransferBRep_ShapeMapper.hxx>
38
39 //#include <TopoDSToStep_DirectModification.hxx>
40 //#include <TopoDSToStep_ConicalSurfModif.hxx>
41 Handle(TCollection_HAsciiString) 
42 TopoDSToStep::DecodeBuilderError(const TopoDSToStep_BuilderError E)
43 {
44   Handle(TCollection_HAsciiString) mess;
45   switch(E)
46     {
47     case TopoDSToStep_BuilderDone:
48       {
49         mess = new TCollection_HAsciiString("Builder Done");
50         break;
51       }
52     case TopoDSToStep_NoFaceMapped:
53       {
54         mess = new TCollection_HAsciiString("None of the Shell Faces has been mapped");
55         break;
56       }
57     case TopoDSToStep_BuilderOther:
58       {
59         mess = new TCollection_HAsciiString("Other Error in Builder");
60         break;
61       }
62     }
63   return mess;
64 }
65
66 Handle(TCollection_HAsciiString) 
67 TopoDSToStep::DecodeFaceError(const TopoDSToStep_MakeFaceError E)
68 {
69   Handle(TCollection_HAsciiString) mess;
70   switch(E)
71     {
72     case TopoDSToStep_FaceDone:
73       {
74         mess = new TCollection_HAsciiString("Face Done");
75         break;
76       }
77     case TopoDSToStep_FaceOther:
78       {
79         mess = new TCollection_HAsciiString("Other Error in Make STEP face");
80         break;
81       }
82     case TopoDSToStep_InfiniteFace:
83       {
84         mess = new TCollection_HAsciiString("The Face has no Outer Wire");
85         break;
86       }
87     case TopoDSToStep_NonManifoldFace:
88       {
89         mess = new TCollection_HAsciiString("The Face is Internal or External");
90         break;
91       }
92     case TopoDSToStep_NoWireMapped:
93       {
94         mess = new TCollection_HAsciiString("None of the Face Wires has been mapped");
95         break;
96       }
97     }
98   return mess;
99 }
100
101 Handle(TCollection_HAsciiString) 
102 TopoDSToStep::DecodeWireError(const TopoDSToStep_MakeWireError E)
103 {
104   Handle(TCollection_HAsciiString) mess;
105   switch(E)
106     {
107     case TopoDSToStep_WireDone:
108       {
109         mess = new TCollection_HAsciiString("Wire Done");
110         break;
111       }
112     case TopoDSToStep_WireOther:
113       {
114         mess = new TCollection_HAsciiString("Other Error in Make STEP wire");
115         break;
116       }
117     case TopoDSToStep_NonManifoldWire:
118       {
119         mess = new TCollection_HAsciiString("The Wire is Internal or External");
120         break;
121         }
122     }
123   return mess;
124 }
125
126 Handle(TCollection_HAsciiString) 
127 TopoDSToStep::DecodeEdgeError(const TopoDSToStep_MakeEdgeError E)
128 {
129   Handle(TCollection_HAsciiString) mess;
130   switch(E)
131     {
132     case TopoDSToStep_EdgeDone:
133       {
134         mess = new TCollection_HAsciiString("Edge Done");
135         break;
136       }
137     case TopoDSToStep_EdgeOther:
138       {
139         mess = new TCollection_HAsciiString("Other Error in Make STEP Edge");
140         break;
141       }
142     case TopoDSToStep_NonManifoldEdge:
143       {
144         mess = new TCollection_HAsciiString("The Edge is Internal or External");
145         break;
146       }
147     }
148   return mess;
149 }
150
151 Handle(TCollection_HAsciiString) 
152 TopoDSToStep::DecodeVertexError(const TopoDSToStep_MakeVertexError E)
153 {
154   Handle(TCollection_HAsciiString) mess;
155   switch(E)
156     {
157     case TopoDSToStep_VertexDone:
158       {
159         mess = new TCollection_HAsciiString("Vertex Done");
160         break;
161       }
162     case TopoDSToStep_VertexOther:
163       {
164         mess = new TCollection_HAsciiString("Other Error in Make STEP Vertex");
165         break;
166       }
167     }
168   return mess;
169 }
170
171 //=======================================================================
172 //function : AddResult
173 //purpose  : 
174 //=======================================================================
175
176 void TopoDSToStep::AddResult (const Handle(Transfer_FinderProcess)& FP,
177                               const TopoDS_Shape &Shape,
178                               const Handle(Standard_Transient) &ent)
179 {
180   Handle(Transfer_SimpleBinderOfTransient) result = new Transfer_SimpleBinderOfTransient;
181   result->SetResult (ent);
182
183   Handle(TransferBRep_ShapeMapper) mapper = TransferBRep::ShapeMapper (FP,Shape);
184   Handle(Transfer_Binder) binder = FP->Find ( mapper );
185
186   if ( binder.IsNull() ) FP->Bind ( mapper, result );
187   else binder->AddResult ( result );
188 }
189
190 //=======================================================================
191 //function : AddResult
192 //purpose  : 
193 //=======================================================================
194
195 void TopoDSToStep::AddResult (const Handle(Transfer_FinderProcess)& FP,
196                               const TopoDSToStep_Tool &Tool)
197 {
198   const MoniTool_DataMapOfShapeTransient &Map = Tool.Map();
199   MoniTool_DataMapIteratorOfDataMapOfShapeTransient it ( Map );
200   for ( ; it.More(); it.Next() ) 
201     TopoDSToStep::AddResult ( FP, it.Key(), it.Value() );
202 }