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