0026859: Export of GDT from XCAF to STEP
[occt.git] / src / XCAFDimTolObjects / XCAFDimTolObjects_DimensionObject.cxx
1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 #include <XCAFDimTolObjects_DimensionObject.hxx>
15
16 #include <Precision.hxx>
17 #include <TColgp_HArray1OfPnt.hxx>
18
19
20 //=======================================================================
21 //function : XCAFDimTolObjects_DimensionObject
22 //purpose  : 
23 //=======================================================================
24
25 XCAFDimTolObjects_DimensionObject::XCAFDimTolObjects_DimensionObject()
26 {
27 }
28
29 //=======================================================================
30 //function : 
31 //purpose  : 
32 //=======================================================================
33
34 XCAFDimTolObjects_DimensionObject::XCAFDimTolObjects_DimensionObject(const Handle(XCAFDimTolObjects_DimensionObject)& theObj)
35 {
36   myType = theObj->myType;
37   myVal = theObj->myVal;
38   myQualifier = theObj->myQualifier;
39   myIsHole = theObj->myIsHole;
40   myFormVariance = theObj->myFormVariance;
41   myGrade = theObj->myGrade;
42   myL = theObj->myL;
43   myR = theObj->myR;
44   myModifiers = theObj->myModifiers;
45   myPath = theObj->myPath;
46   myDir = theObj->myDir;
47   myPnts = theObj->myPnts;
48 }
49
50 //=======================================================================
51 //function : SetQualifier
52 //purpose  : 
53 //=======================================================================
54 void XCAFDimTolObjects_DimensionObject::SetQualifier (const XCAFDimTolObjects_DimensionQualifier theQualifier)
55 {
56   myQualifier = theQualifier;
57 }
58
59 //=======================================================================
60 //function : GetQualifier
61 //purpose  : 
62 //=======================================================================
63 XCAFDimTolObjects_DimensionQualifier XCAFDimTolObjects_DimensionObject::GetQualifier()  const
64 {
65   return myQualifier;
66 }
67
68 //=======================================================================
69 //function : HasQualifier
70 //purpose  : 
71 //=======================================================================
72 Standard_Boolean XCAFDimTolObjects_DimensionObject::HasQualifier()  const
73 {
74   return (myQualifier != XCAFDimTolObjects_DimensionQualifier_None);
75 }
76
77 //=======================================================================
78 //function : SetType
79 //purpose  : 
80 //=======================================================================
81 void XCAFDimTolObjects_DimensionObject::SetType (const XCAFDimTolObjects_DimensionType theType)
82 {
83   myType = theType;
84 }
85
86 //=======================================================================
87 //function : GetType
88 //purpose  : 
89 //=======================================================================
90 XCAFDimTolObjects_DimensionType XCAFDimTolObjects_DimensionObject::GetType()  const
91 {
92   return myType;
93 }
94   
95 //=======================================================================
96 //function : GetValue
97 //purpose  : 
98 //=======================================================================
99 Standard_Real XCAFDimTolObjects_DimensionObject::GetValue ()  const
100 {
101   if (myVal.IsNull())
102     return 0;
103
104   // Simple value or value with Plus_Minus_Tolerance
105   if (myVal->Length() == 1 || myVal->Length() == 3) {
106     return myVal->Value(1);
107   }
108   // Range
109   if (myVal->Length() == 2) {
110     return (myVal->Value(1) + myVal->Value(2)) / 2;
111   }
112   return 0;
113 }
114
115 //=======================================================================
116 //function : GetValues
117 //purpose  : 
118 //=======================================================================
119 Handle(TColStd_HArray1OfReal) XCAFDimTolObjects_DimensionObject::GetValues ()  const
120 {
121   return myVal;
122 }
123
124 //=======================================================================
125 //function : SetValue
126 //purpose  : 
127 //=======================================================================
128 void XCAFDimTolObjects_DimensionObject::SetValue (const Standard_Real theValue)
129 {
130   myVal = new TColStd_HArray1OfReal(1, 1);
131   myVal->SetValue(1,theValue);
132 }
133
134 //=======================================================================
135 //function : SetValues
136 //purpose  : 
137 //=======================================================================
138 void XCAFDimTolObjects_DimensionObject::SetValues (const Handle(TColStd_HArray1OfReal)& theValue)
139 {
140   myVal = theValue;
141 }
142   
143 //=======================================================================
144 //function : IsDimWithRange
145 //purpose  : 
146 //=======================================================================
147 Standard_Boolean XCAFDimTolObjects_DimensionObject::IsDimWithRange()  const
148 {
149   if (!myVal.IsNull() && myVal->Length() == 2)
150     return Standard_True;
151   return Standard_False;
152 }
153   
154 //=======================================================================
155 //function : SetUpperBound
156 //purpose  : 
157 //=======================================================================
158 void XCAFDimTolObjects_DimensionObject::SetUpperBound (const Standard_Real theUpperBound)
159 {
160   if(!myVal.IsNull() && myVal->Length() > 1)
161     myVal->SetValue(2, theUpperBound);
162   else
163   {
164     myVal = new TColStd_HArray1OfReal(1, 2);
165     myVal->SetValue(1, theUpperBound);
166     myVal->SetValue(2, theUpperBound);
167   }
168 }
169   
170 //=======================================================================
171 //function : SetLowerBound
172 //purpose  : 
173 //=======================================================================
174 void XCAFDimTolObjects_DimensionObject::SetLowerBound (const Standard_Real theLowerBound)
175 {
176   if(!myVal.IsNull() && myVal->Length() > 1)
177     myVal->SetValue(1, theLowerBound);
178   else
179   {
180     myVal = new TColStd_HArray1OfReal(1, 2);
181     myVal->SetValue(2, theLowerBound);
182     myVal->SetValue(1, theLowerBound);
183   }
184 }
185   
186 //=======================================================================
187 //function : GetUpperBound
188 //purpose  : 
189 //=======================================================================
190 Standard_Real XCAFDimTolObjects_DimensionObject::GetUpperBound ()  const
191 {
192   if(!myVal.IsNull() && myVal->Length() == 2)
193   {
194     return myVal->Value(2);
195   }
196   return 0;
197 }
198   
199 //=======================================================================
200 //function : GetLowerBound
201 //purpose  : 
202 //=======================================================================
203 Standard_Real XCAFDimTolObjects_DimensionObject::GetLowerBound ()  const
204 {
205   if(!myVal.IsNull() && myVal->Length() == 2)
206   {
207     return myVal->Value(1);
208   }
209   return 0;
210 }
211   
212 //=======================================================================
213 //function : IsDimWithPlusMinusTolerance
214 //purpose  : 
215 //=======================================================================
216 Standard_Boolean XCAFDimTolObjects_DimensionObject::IsDimWithPlusMinusTolerance()  const
217 {
218   return (!myVal.IsNull() && myVal->Length() == 3);
219 }
220   
221 //=======================================================================
222 //function : SetUpperTolValue
223 //purpose  : 
224 //=======================================================================
225 Standard_Boolean XCAFDimTolObjects_DimensionObject::SetUpperTolValue (const Standard_Real theUperTolValue)
226 {
227   if(!myVal.IsNull() && myVal->Length() == 3)
228   {
229     myVal->SetValue(3, theUperTolValue);
230     return Standard_True;
231   }
232   else if(!myVal.IsNull() && myVal->Length() == 1)
233   {
234     Standard_Real v = myVal->Value(1);
235     myVal = new TColStd_HArray1OfReal(1, 3);
236     myVal->SetValue(1, v);
237     myVal->SetValue(2, theUperTolValue);
238     myVal->SetValue(3, theUperTolValue);
239     return Standard_True;
240   }
241   return Standard_False;
242 }
243   
244 //=======================================================================
245 //function : SetLowerTolValue
246 //purpose  : 
247 //=======================================================================
248 Standard_Boolean XCAFDimTolObjects_DimensionObject::SetLowerTolValue (const Standard_Real theLowerTolValue)
249 {
250   if(!myVal.IsNull() && myVal->Length() == 3)
251   {
252     myVal->SetValue(2, theLowerTolValue);
253     return Standard_True;
254   }
255   else if(!myVal.IsNull() && myVal->Length() == 1)
256   {
257     Standard_Real v = myVal->Value(1);
258     myVal = new TColStd_HArray1OfReal(1, 3);
259     myVal->SetValue(1, v);
260     myVal->SetValue(2, theLowerTolValue);
261     myVal->SetValue(3, theLowerTolValue);
262     return Standard_True;
263   }
264   return Standard_False;
265 }
266   
267 //=======================================================================
268 //function : GetUpperTolValue
269 //purpose  : 
270 //=======================================================================
271 Standard_Real XCAFDimTolObjects_DimensionObject::GetUpperTolValue ()  const
272 {
273   if(!myVal.IsNull() && myVal->Length() == 3)
274   {
275     return myVal->Value(3);
276   }
277   return 0;
278 }
279   
280 //=======================================================================
281 //function : GetLowerTolValue
282 //purpose  : 
283 //=======================================================================
284 Standard_Real XCAFDimTolObjects_DimensionObject::GetLowerTolValue ()  const
285 {
286   if(!myVal.IsNull() && myVal->Length() == 3)
287   {
288     return myVal->Value(2);
289   }
290   return 0;
291 }
292   
293 //=======================================================================
294 //function : IsDimWithClassOfTolerance
295 //purpose  : 
296 //=======================================================================
297 Standard_Boolean XCAFDimTolObjects_DimensionObject::IsDimWithClassOfTolerance()  const
298 {
299   return (myFormVariance != XCAFDimTolObjects_DimensionFormVariance_None);
300 }
301   
302 //=======================================================================
303 //function : SetClassOfTolerance
304 //purpose  : 
305 //=======================================================================
306 void XCAFDimTolObjects_DimensionObject::SetClassOfTolerance (const Standard_Boolean theHole,
307   const XCAFDimTolObjects_DimensionFormVariance theFormVariance,
308   const XCAFDimTolObjects_DimensionGrade theGrade)
309 {
310   myIsHole = theHole;
311   myFormVariance = theFormVariance;
312   myGrade = theGrade;
313 }
314   
315 //=======================================================================
316 //function : GetClassOfTolerance
317 //purpose  : 
318 //=======================================================================
319 Standard_Boolean XCAFDimTolObjects_DimensionObject::GetClassOfTolerance (Standard_Boolean& theHole,
320   XCAFDimTolObjects_DimensionFormVariance& theFormVariance,
321   XCAFDimTolObjects_DimensionGrade& theGrade)  const
322 {
323   theFormVariance = myFormVariance;
324   if(myFormVariance != XCAFDimTolObjects_DimensionFormVariance_None)
325   {
326     theHole = myIsHole;
327     theGrade = myGrade;
328     return Standard_True;
329   }
330   return Standard_False;
331 }
332   
333 //=======================================================================
334 //function : SetNbOfDecimalPlaces
335 //purpose  : 
336 //=======================================================================
337 void XCAFDimTolObjects_DimensionObject::SetNbOfDecimalPlaces (const Standard_Integer theL, const Standard_Integer theR)
338 {
339   myL = theL;
340   myR = theR;
341 }
342   
343 //=======================================================================
344 //function : GetNbOfDecimalPlaces
345 //purpose  : 
346 //=======================================================================
347 void XCAFDimTolObjects_DimensionObject::GetNbOfDecimalPlaces (Standard_Integer& theL, Standard_Integer& theR)  const
348 {
349   theL = myL;
350   theR = myR;
351 }
352   
353 //=======================================================================
354 //function : GetModifiers
355 //purpose  : 
356 //=======================================================================
357 XCAFDimTolObjects_DimensionModifiersSequence XCAFDimTolObjects_DimensionObject::GetModifiers ()  const
358 {
359   return myModifiers;
360 }
361   
362 //=======================================================================
363 //function : SetModifiers
364 //purpose  : 
365 //=======================================================================
366 void XCAFDimTolObjects_DimensionObject::SetModifiers (const XCAFDimTolObjects_DimensionModifiersSequence& theModifiers)
367 {
368   myModifiers = theModifiers;
369 }
370   
371 //=======================================================================
372 //function : AddModifier
373 //purpose  : 
374 //=======================================================================
375 void XCAFDimTolObjects_DimensionObject::AddModifier (const XCAFDimTolObjects_DimensionModif theModifier)
376 {
377   myModifiers.Append(theModifier);
378 }
379   
380 //=======================================================================
381 //function : GetPath
382 //purpose  : 
383 //=======================================================================
384 TopoDS_Edge XCAFDimTolObjects_DimensionObject::GetPath ()  const
385 {
386     return myPath;
387 }
388   
389 //=======================================================================
390 //function : SetPath
391 //purpose  : 
392 //=======================================================================
393 void XCAFDimTolObjects_DimensionObject::SetPath (const TopoDS_Edge& thePath)
394 {
395   if(!thePath.IsNull())
396   {
397     myPath = thePath;
398   }
399 }
400   
401 //=======================================================================
402 //function : GetDirection
403 //purpose  : 
404 //=======================================================================
405 Standard_Boolean XCAFDimTolObjects_DimensionObject::GetDirection (gp_Dir& theDir)  const
406 {
407   theDir = myDir;
408   return Standard_True;
409 }
410   
411 //=======================================================================
412 //function : SetDirection
413 //purpose  : 
414 //=======================================================================
415 Standard_Boolean XCAFDimTolObjects_DimensionObject::SetDirection (const gp_Dir& theDir)
416 {
417   myDir = theDir;
418   return Standard_True;
419 }
420
421 //=======================================================================
422 //function : GetPoints
423 //purpose  : 
424 //=======================================================================
425 Handle(TColgp_HArray1OfPnt) XCAFDimTolObjects_DimensionObject::GetPoints ()  const
426 {
427   return myPnts;
428 }
429   
430 //=======================================================================
431 //function : SetPoints
432 //purpose  : 
433 //=======================================================================
434 void XCAFDimTolObjects_DimensionObject::SetPoints (const Handle(TColgp_HArray1OfPnt)& thePnts)
435 {
436   myPnts = thePnts;
437 }