0033661: Data Exchange, Step Import - Tessellated GDTs are not imported
[occt.git] / tools / TInspectorAPI / TInspectorAPI_PluginParameters.cxx
1 // Created on: 2017-06-16
2 // Created by: Natalia ERMOLAEVA
3 // Copyright (c) 2017 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 #include <inspector/TInspectorAPI_PluginParameters.hxx>
17
18 IMPLEMENT_STANDARD_RTTIEXT (TInspectorAPI_PluginParameters, Standard_Transient)
19
20 // =======================================================================
21 // function : SetParameters
22 // purpose :
23 // =======================================================================
24 void TInspectorAPI_PluginParameters::SetParameters (const TCollection_AsciiString& thePluginName,
25                                                     const NCollection_List<Handle(Standard_Transient)>& theParameters,
26                                                     const Standard_Boolean&)
27 {
28   if (theParameters.Size() > 0)
29     myParameters.Bind (thePluginName, theParameters);
30   else
31     myParameters.UnBind (thePluginName);
32 }
33
34 // =======================================================================
35 // function : AddFileName
36 // purpose :
37 // =======================================================================
38 void TInspectorAPI_PluginParameters::AddFileName (const TCollection_AsciiString& thePluginName,
39                                                   const TCollection_AsciiString& theFileName)
40 {
41   if (myFileNames.IsBound (thePluginName))
42     myFileNames.ChangeFind (thePluginName).Append (theFileName);
43   else
44   {
45     NCollection_List<TCollection_AsciiString> aNames;
46     aNames.Append (theFileName);
47     myFileNames.Bind (thePluginName, aNames);
48   }
49 }
50
51 // =======================================================================
52 // function : SetFileNames
53 // purpose :
54 // =======================================================================
55 void TInspectorAPI_PluginParameters::SetFileNames (const TCollection_AsciiString& thePluginName,
56                                                    const NCollection_List<TCollection_AsciiString>& theFileNames)
57 {
58   if (theFileNames.Size() > 0)
59     myFileNames.Bind (thePluginName, theFileNames);
60   else
61     myFileNames.UnBind (thePluginName);
62 }
63
64 // =======================================================================
65 // function : SetSelectedNames
66 // purpose :
67 // =======================================================================
68 void TInspectorAPI_PluginParameters::SetSelectedNames (const TCollection_AsciiString& thePluginName,
69                                                        const NCollection_List<TCollection_AsciiString>& theItemNames)
70 {
71   mySelectedItemNames.Bind (thePluginName, theItemNames);
72 }
73
74 // =======================================================================
75 // function : SetSelected
76 // purpose :
77 // =======================================================================
78 void TInspectorAPI_PluginParameters::SetSelected (const TCollection_AsciiString& thePluginName,
79                                                   const NCollection_List<Handle(Standard_Transient)>& theObjects)
80 {
81   if (theObjects.Size() > 0)
82     mySelectedObjects.Bind (thePluginName, theObjects);
83   else
84     mySelectedObjects.UnBind (thePluginName);
85 }
86
87 // =======================================================================
88 // function : FindParameters
89 // purpose :
90 // =======================================================================
91 bool TInspectorAPI_PluginParameters::FindParameters (const TCollection_AsciiString& thePluginName)
92 {
93   return myParameters.IsBound (thePluginName);
94 }
95
96 // =======================================================================
97 // function : Parameters
98 // purpose :
99 // =======================================================================
100 const NCollection_List<Handle(Standard_Transient)>& TInspectorAPI_PluginParameters::Parameters
101                                                      (const TCollection_AsciiString& thePluginName)
102 {
103   return myParameters.Find (thePluginName);
104 }
105
106 // =======================================================================
107 // function : FindFileNames
108 // purpose :
109 // =======================================================================
110 bool TInspectorAPI_PluginParameters::FindFileNames (const TCollection_AsciiString& thePluginName)
111 {
112   return myFileNames.IsBound (thePluginName);
113 }
114
115 // =======================================================================
116 // function : FileNames
117 // purpose :
118 // =======================================================================
119 const NCollection_List<TCollection_AsciiString>& TInspectorAPI_PluginParameters::FileNames
120                                                        (const TCollection_AsciiString& thePluginName)
121 {
122   return myFileNames.Find (thePluginName);
123 }
124
125 // =======================================================================
126 // function : FindSelectedNames
127 // purpose :
128 // =======================================================================
129 bool TInspectorAPI_PluginParameters::FindSelectedNames (const TCollection_AsciiString& thePluginName)
130 {
131   return mySelectedItemNames.IsBound (thePluginName);
132 }
133
134 // =======================================================================
135 // function : GetSelectedNames
136 // purpose :
137 // =======================================================================
138 const NCollection_List<TCollection_AsciiString>& TInspectorAPI_PluginParameters::GetSelectedNames
139                                                        (const TCollection_AsciiString& thePluginName)
140 {
141   return mySelectedItemNames.Find (thePluginName);
142 }
143
144 // =======================================================================
145 // function : GetSelectedObjects
146 // purpose :
147 // =======================================================================
148 Standard_Boolean TInspectorAPI_PluginParameters::GetSelectedObjects (const TCollection_AsciiString& thePluginName,
149                                                        NCollection_List<Handle(Standard_Transient)>& theObjects)
150 {
151   return mySelectedObjects.Find (thePluginName, theObjects);
152 }
153
154 // =======================================================================
155 // function : toString
156 // purpose :
157 // =======================================================================
158 TCollection_AsciiString toString (const TopLoc_Location& theLocation)
159 {
160   TCollection_AsciiString anInfo;
161   gp_Trsf aTrsf = theLocation.Transformation();
162   for (int aRowId = 1; aRowId <= 3; aRowId++)
163   {
164     if (!anInfo.IsEmpty())
165         anInfo += " ";
166     for (int aColumnId = 1; aColumnId <= 4; aColumnId++)
167     {
168       if (aColumnId > 1)
169         anInfo += ",";
170       anInfo += TCollection_AsciiString (aTrsf.Value (aRowId, aColumnId));
171     }
172   }
173   return anInfo;
174 }
175
176 // =======================================================================
177 // function : ParametersToString
178 // purpose :
179 // =======================================================================
180 TCollection_AsciiString TInspectorAPI_PluginParameters::ParametersToString (const TopoDS_Shape& theShape)
181 {
182   const TopLoc_Location& aLocation = theShape.Location();
183   TCollection_AsciiString aLocationStr = toString (aLocation);
184
185   TopAbs_Orientation anOrientation = theShape.Orientation();
186   Standard_SStream aSStream;
187   TopAbs::Print (anOrientation, aSStream);
188   return TCollection_AsciiString (aSStream.str().c_str()) + ":" + aLocationStr;
189 }
190
191 // =======================================================================
192 // function : fromString
193 // purpose :
194 // =======================================================================
195 TopLoc_Location fromString (const TCollection_AsciiString& theValue)
196 {
197   NCollection_Mat4<Standard_Real> aValues;
198
199   TCollection_AsciiString aCurrentString = theValue;
200   Standard_Integer aPosition = aCurrentString.Search (" ");
201   if (aPosition < 0)
202     return TopLoc_Location();
203   TCollection_AsciiString aTailString = aCurrentString.Split (aPosition);
204   Standard_Integer aRow = 0;
205   while (!aCurrentString.IsEmpty())
206   {
207     TCollection_AsciiString aValueString = aCurrentString;
208     aPosition = aValueString.Search (",");
209     if (aPosition < 0 )
210       break;
211     aCurrentString = aValueString.Split (aPosition);
212     Standard_Integer aColumn = 0;
213     while (!aValueString.IsEmpty())
214     {
215       aPosition = aCurrentString.Search (" ");
216       if (aPosition > 0)
217        aValueString.Split (aValueString.Length() - 1);
218
219       aValues.SetValue (aRow, aColumn, aValueString.RealValue());
220       aColumn++;
221       if (aCurrentString.IsEmpty())
222         break;
223       aValueString = aCurrentString;
224       aPosition = aValueString.Search (",");
225       if (aPosition < 0 )
226       {
227         aValueString = aCurrentString;
228         aCurrentString = TCollection_AsciiString();
229       }
230       else
231         aCurrentString = aValueString.Split (aPosition);
232     }
233     if (aTailString.IsEmpty())
234       break;
235     aCurrentString = aTailString;
236     aPosition = aCurrentString.Search (" ");
237     if (aPosition < 0 )
238     {
239       aCurrentString = aTailString;
240       aTailString = TCollection_AsciiString();
241     }
242     else
243       aTailString = aCurrentString.Split (aPosition);
244     aRow++;
245   }
246
247   //if (aValues.Rows() != 3 || aValues.Cols() != 4)
248   //  return TopLoc_Location();
249
250   gp_Trsf aTrsf;
251   aTrsf.SetValues (aValues.GetValue (0, 0), aValues.GetValue (0, 1), aValues.GetValue (0, 2), aValues.GetValue (0, 3),
252                    aValues.GetValue (1, 0), aValues.GetValue (1, 1), aValues.GetValue (1, 2), aValues.GetValue (1, 3),
253                    aValues.GetValue (2, 0), aValues.GetValue (2, 1), aValues.GetValue (2, 2), aValues.GetValue (2, 3));
254   return TopLoc_Location (aTrsf);
255 }
256
257 // =======================================================================
258 // function : ParametersToShape
259 // purpose :
260 // =======================================================================
261 void TInspectorAPI_PluginParameters::ParametersToShape (const TCollection_AsciiString& theValue,
262                                                         TopoDS_Shape& theShape)
263 {
264   int aSeparatorPos = theValue.Search (":");
265   TCollection_AsciiString anOrientationStr = theValue;
266   TCollection_AsciiString aLocationStr = anOrientationStr.Split (aSeparatorPos);
267   // orientation
268   if (anOrientationStr.Length() < 2)
269     return;
270   anOrientationStr.Split (anOrientationStr.Length() - 1);
271
272   TopAbs_Orientation anOrientation;
273   if (!TopAbs::ShapeOrientationFromString (anOrientationStr.ToCString(), anOrientation))
274     return;
275   // location
276   TopLoc_Location aLocation = fromString (aLocationStr);
277
278   theShape.Location (aLocation);
279   theShape.Orientation (anOrientation);
280 }