1 // Created on: 1999-09-09
2 // Created by: Andrey BETENEV
3 // Copyright (c) 1999-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #include <STEPConstruct_GDTProperty.hxx>
18 #include <StepRepr_DescriptiveRepresentationItem.hxx>
20 //=======================================================================
21 //function : STEPConstruct_GDTProperty
23 //=======================================================================
25 STEPConstruct_GDTProperty::STEPConstruct_GDTProperty ()
29 //=======================================================================
30 //function : getDimModifiers
32 //=======================================================================
33 void STEPConstruct_GDTProperty::GetDimModifiers(const Handle(StepRepr_CompoundRepresentationItem)& theCRI,
34 XCAFDimTolObjects_DimensionModifiersSequence& theModifiers)
36 for (Standard_Integer l = 1; l <= theCRI->ItemElement()->Length(); l++)
38 Handle(StepRepr_DescriptiveRepresentationItem) aDRI =
39 Handle(StepRepr_DescriptiveRepresentationItem)::DownCast(theCRI->ItemElement()->Value(l));
40 if(aDRI.IsNull()) continue;
41 XCAFDimTolObjects_DimensionModif aModifier = XCAFDimTolObjects_DimensionModif_ControlledRadius;
42 const TCollection_AsciiString aModifStr = aDRI->Description()->String();
43 Standard_Boolean aFound = Standard_False;
44 if(aModifStr.IsEqual("controlled radius"))
46 aFound = Standard_True;
47 aModifier = XCAFDimTolObjects_DimensionModif_ControlledRadius;
49 else if(aModifStr.IsEqual("square"))
51 aFound = Standard_True;
52 aModifier = XCAFDimTolObjects_DimensionModif_Square;
54 else if(aModifStr.IsEqual("statistical"))
56 aFound = Standard_True;
57 aModifier = XCAFDimTolObjects_DimensionModif_StatisticalTolerance;
59 else if(aModifStr.IsEqual("continuous feature"))
61 aFound = Standard_True;
62 aModifier = XCAFDimTolObjects_DimensionModif_ContinuousFeature;
64 else if(aModifStr.IsEqual("two point size"))
66 aFound = Standard_True;
67 aModifier = XCAFDimTolObjects_DimensionModif_TwoPointSize;
69 else if(aModifStr.IsEqual("local size defined by a sphere"))
71 aFound = Standard_True;
72 aModifier = XCAFDimTolObjects_DimensionModif_LocalSizeDefinedBySphere;
74 else if(aModifStr.IsEqual("least squares association criteria"))
76 aFound = Standard_True;
77 aModifier = XCAFDimTolObjects_DimensionModif_LeastSquaresAssociationCriterion;
79 else if(aModifStr.IsEqual("maximum inscribed association criteria"))
81 aFound = Standard_True;
82 aModifier = XCAFDimTolObjects_DimensionModif_MaximumInscribedAssociation;
84 else if(aModifStr.IsEqual("minimum circumscribed association criteria"))
86 aFound = Standard_True;
87 aModifier = XCAFDimTolObjects_DimensionModif_MinimumCircumscribedAssociation;
89 else if(aModifStr.IsEqual("circumference diameter calculated size"))
91 aFound = Standard_True;
92 aModifier = XCAFDimTolObjects_DimensionModif_CircumferenceDiameter;
94 else if(aModifStr.IsEqual("area diameter calculated size"))
96 aFound = Standard_True;
97 aModifier = XCAFDimTolObjects_DimensionModif_AreaDiameter;
99 else if(aModifStr.IsEqual("volume diameter calculated size"))
101 aFound = Standard_True;
102 aModifier = XCAFDimTolObjects_DimensionModif_VolumeDiameter;
104 else if(aModifStr.IsEqual("maximum rank order size"))
106 aFound = Standard_True;
107 aModifier = XCAFDimTolObjects_DimensionModif_MaximumSize;
109 else if(aModifStr.IsEqual("minimum rank order size"))
111 aFound = Standard_True;
112 aModifier = XCAFDimTolObjects_DimensionModif_MinimumSize;
114 else if(aModifStr.IsEqual("average rank order size"))
116 aFound = Standard_True;
117 aModifier = XCAFDimTolObjects_DimensionModif_AverageSize;
119 else if(aModifStr.IsEqual("median rank order size"))
121 aFound = Standard_True;
122 aModifier = XCAFDimTolObjects_DimensionModif_MedianSize;
124 else if(aModifStr.IsEqual("mid range rank order size"))
126 aFound = Standard_True;
127 aModifier = XCAFDimTolObjects_DimensionModif_MidRangeSize;
129 else if(aModifStr.IsEqual("range rank order size"))
131 aFound = Standard_True;
132 aModifier = XCAFDimTolObjects_DimensionModif_RangeOfSizes;
134 else if(aModifStr.IsEqual("any part of the feature"))
136 aFound = Standard_True;
137 aModifier = XCAFDimTolObjects_DimensionModif_AnyRestrictedPortionOfFeature;
139 else if(aModifStr.IsEqual("any cross section"))
141 aFound = Standard_True;
142 aModifier = XCAFDimTolObjects_DimensionModif_AnyCrossSection;
144 else if(aModifStr.IsEqual("specific fixed cross section"))
146 aFound = Standard_True;
147 aModifier = XCAFDimTolObjects_DimensionModif_SpecificFixedCrossSection;
149 else if(aModifStr.IsEqual("common tolerance"))
151 aFound = Standard_True;
152 aModifier = XCAFDimTolObjects_DimensionModif_CommonTolerance;
154 else if(aModifStr.IsEqual("free state condition"))
156 aFound = Standard_True;
157 aModifier = XCAFDimTolObjects_DimensionModif_FreeStateCondition;
160 theModifiers.Append(aModifier);
164 //=======================================================================
165 //function : getClassOfTolerance
167 //=======================================================================
168 void STEPConstruct_GDTProperty::GetDimClassOfTolerance(const Handle(StepShape_LimitsAndFits)& theLAF,
169 Standard_Boolean theHolle,
170 XCAFDimTolObjects_DimensionFormVariance theFV,
171 XCAFDimTolObjects_DimensionGrade theG)
173 Handle(TCollection_HAsciiString) aFormV = theLAF->FormVariance();
174 Handle(TCollection_HAsciiString) aGrade = theLAF->Grade();
175 theFV = XCAFDimTolObjects_DimensionFormVariance_None;
176 Standard_Boolean aFound;
177 theHolle = Standard_False;
178 //it is not verified information
179 for(Standard_Integer c = 0; c <= 1; c++)
181 aFound = Standard_False;
182 Standard_Boolean aCaseSens = Standard_False;
184 aCaseSens = Standard_True;
185 Handle(TCollection_HAsciiString) aStr = new TCollection_HAsciiString("a");
186 if(aFormV->IsSameString(aStr, aCaseSens))
188 aFound = Standard_True;
189 theFV = XCAFDimTolObjects_DimensionFormVariance_A;
192 aStr = new TCollection_HAsciiString("b");
193 if(aFormV->IsSameString(aStr, aCaseSens))
195 aFound = Standard_True;
196 theFV = XCAFDimTolObjects_DimensionFormVariance_B;
199 aStr = new TCollection_HAsciiString("c");
200 if(aFormV->IsSameString(aStr, aCaseSens))
202 aFound = Standard_True;
203 theFV = XCAFDimTolObjects_DimensionFormVariance_C;
206 aStr = new TCollection_HAsciiString("cd");
207 if(aFormV->IsSameString(aStr, aCaseSens))
209 aFound = Standard_True;
210 theFV = XCAFDimTolObjects_DimensionFormVariance_CD;
213 aStr = new TCollection_HAsciiString("d");
214 if(aFormV->IsSameString(aStr, aCaseSens))
216 aFound = Standard_True;
217 theFV = XCAFDimTolObjects_DimensionFormVariance_D;
220 aStr = new TCollection_HAsciiString("e");
221 if(aFormV->IsSameString(aStr, aCaseSens))
223 aFound = Standard_True;
224 theFV = XCAFDimTolObjects_DimensionFormVariance_E;
227 aStr = new TCollection_HAsciiString("ef");
228 if(aFormV->IsSameString(aStr, aCaseSens))
230 aFound = Standard_True;
231 theFV = XCAFDimTolObjects_DimensionFormVariance_EF;
234 aStr = new TCollection_HAsciiString("f");
235 if(aFormV->IsSameString(aStr, aCaseSens))
237 aFound = Standard_True;
238 theFV = XCAFDimTolObjects_DimensionFormVariance_F;
241 aStr = new TCollection_HAsciiString("fg");
242 if(aFormV->IsSameString(aStr, aCaseSens))
244 aFound = Standard_True;
245 theFV = XCAFDimTolObjects_DimensionFormVariance_FG;
248 aStr = new TCollection_HAsciiString("g");
249 if(aFormV->IsSameString(aStr, aCaseSens))
251 aFound = Standard_True;
252 theFV = XCAFDimTolObjects_DimensionFormVariance_G;
255 aStr = new TCollection_HAsciiString("h");
256 if(aFormV->IsSameString(aStr, aCaseSens))
258 aFound = Standard_True;
259 theFV = XCAFDimTolObjects_DimensionFormVariance_H;
262 aStr = new TCollection_HAsciiString("js");
263 if(aFormV->IsSameString(aStr, aCaseSens))
265 aFound = Standard_True;
266 theFV = XCAFDimTolObjects_DimensionFormVariance_JS;
269 aStr = new TCollection_HAsciiString("k");
270 if(aFormV->IsSameString(aStr, aCaseSens))
272 aFound = Standard_True;
273 theFV = XCAFDimTolObjects_DimensionFormVariance_K;
276 aStr = new TCollection_HAsciiString("m");
277 if(aFormV->IsSameString(aStr, aCaseSens))
279 aFound = Standard_True;
280 theFV = XCAFDimTolObjects_DimensionFormVariance_M;
283 aStr = new TCollection_HAsciiString("n");
284 if(aFormV->IsSameString(aStr, aCaseSens))
286 aFound = Standard_True;
287 theFV = XCAFDimTolObjects_DimensionFormVariance_N;
290 aStr = new TCollection_HAsciiString("p");
291 if(aFormV->IsSameString(aStr, aCaseSens))
293 aFound = Standard_True;
294 theFV = XCAFDimTolObjects_DimensionFormVariance_P;
297 aStr = new TCollection_HAsciiString("r");
298 if(aFormV->IsSameString(aStr, aCaseSens))
300 aFound = Standard_True;
301 theFV = XCAFDimTolObjects_DimensionFormVariance_R;
304 aStr = new TCollection_HAsciiString("s");
305 if(aFormV->IsSameString(aStr, aCaseSens))
307 aFound = Standard_True;
308 theFV = XCAFDimTolObjects_DimensionFormVariance_S;
311 aStr = new TCollection_HAsciiString("t");
312 if(aFormV->IsSameString(aStr, aCaseSens))
314 aFound = Standard_True;
315 theFV = XCAFDimTolObjects_DimensionFormVariance_T;
318 aStr = new TCollection_HAsciiString("u");
319 if(aFormV->IsSameString(aStr, aCaseSens))
321 aFound = Standard_True;
322 theFV = XCAFDimTolObjects_DimensionFormVariance_U;
325 aStr = new TCollection_HAsciiString("v");
326 if(aFormV->IsSameString(aStr, aCaseSens))
328 aFound = Standard_True;
329 theFV = XCAFDimTolObjects_DimensionFormVariance_V;
332 aStr = new TCollection_HAsciiString("x");
333 if(aFormV->IsSameString(aStr, aCaseSens))
335 aFound = Standard_True;
336 theFV = XCAFDimTolObjects_DimensionFormVariance_X;
339 aStr = new TCollection_HAsciiString("y");
340 if(aFormV->IsSameString(aStr, aCaseSens))
342 aFound = Standard_True;
343 theFV = XCAFDimTolObjects_DimensionFormVariance_Y;
346 aStr = new TCollection_HAsciiString("b");
347 if(aFormV->IsSameString(aStr, aCaseSens))
349 aFound = Standard_True;
350 theFV = XCAFDimTolObjects_DimensionFormVariance_B;
353 aStr = new TCollection_HAsciiString("z");
354 if(aFormV->IsSameString(aStr, aCaseSens))
356 aFound = Standard_True;
357 theFV = XCAFDimTolObjects_DimensionFormVariance_Z;
360 aStr = new TCollection_HAsciiString("za");
361 if(aFormV->IsSameString(aStr, aCaseSens))
363 aFound = Standard_True;
364 theFV = XCAFDimTolObjects_DimensionFormVariance_ZA;
367 aStr = new TCollection_HAsciiString("zb");
368 if(aFormV->IsSameString(aStr, aCaseSens))
370 aFound = Standard_True;
371 theFV = XCAFDimTolObjects_DimensionFormVariance_ZB;
374 aStr = new TCollection_HAsciiString("zc");
375 if(aFormV->IsSameString(aStr, aCaseSens))
377 aFound = Standard_True;
378 theFV = XCAFDimTolObjects_DimensionFormVariance_ZC;
382 if (c == 1 && !aFound)
383 theHolle = Standard_True;
385 Handle(TCollection_HAsciiString) aStr = new TCollection_HAsciiString("01");
386 if(aGrade->IsSameString(aStr))
388 theG = XCAFDimTolObjects_DimensionGrade_IT01;
392 theG = (XCAFDimTolObjects_DimensionGrade)(aGrade->IntegerValue()+1);
396 //=======================================================================
397 //function : getDimType
399 //=======================================================================
400 Standard_Boolean STEPConstruct_GDTProperty::GetDimType(const Handle(TCollection_HAsciiString)& theName,
401 XCAFDimTolObjects_DimensionType& theType)
403 TCollection_AsciiString aName = theName->String();
405 theType = XCAFDimTolObjects_DimensionType_Location_None;
406 if(aName.IsEqual("curve length"))
408 theType = XCAFDimTolObjects_DimensionType_Size_CurveLength;
410 else if(aName.IsEqual("diameter"))
412 theType = XCAFDimTolObjects_DimensionType_Size_Diameter;
414 else if(aName.IsEqual("spherical diameter"))
416 theType = XCAFDimTolObjects_DimensionType_Size_SphericalDiameter;
418 else if(aName.IsEqual("radius"))
420 theType = XCAFDimTolObjects_DimensionType_Size_Radius;
422 else if(aName.IsEqual("spherical radius"))
424 theType = XCAFDimTolObjects_DimensionType_Size_SphericalRadius;
426 else if(aName.IsEqual("toroidal minor diameter"))
428 theType = XCAFDimTolObjects_DimensionType_Size_ToroidalMinorDiameter;
430 else if(aName.IsEqual("toroidal major diameter"))
432 theType = XCAFDimTolObjects_DimensionType_Size_ToroidalMajorDiameter;
434 else if(aName.IsEqual("toroidal minor radius"))
436 theType = XCAFDimTolObjects_DimensionType_Size_ToroidalMinorRadius;
438 else if(aName.IsEqual("toroidal major radius"))
440 theType = XCAFDimTolObjects_DimensionType_Size_ToroidalMajorRadius;
442 else if(aName.IsEqual("toroidal high major diameter"))
444 theType = XCAFDimTolObjects_DimensionType_Size_ToroidalHighMajorDiameter;
446 else if(aName.IsEqual("toroidal low major diameter"))
448 theType = XCAFDimTolObjects_DimensionType_Size_ToroidalLowMajorDiameter;
450 else if(aName.IsEqual("toroidal high major radius"))
452 theType = XCAFDimTolObjects_DimensionType_Size_ToroidalHighMajorRadius;
454 else if(aName.IsEqual("toroidal low major radius"))
456 theType = XCAFDimTolObjects_DimensionType_Size_ToroidalLowMajorRadius;
458 else if(aName.IsEqual("thickness"))
460 theType = XCAFDimTolObjects_DimensionType_Size_Thickness;
462 else if(aName.IsEqual("curved distance"))
464 theType = XCAFDimTolObjects_DimensionType_Location_CurvedDistance;
466 else if(aName.IsEqual("linear distance"))
468 theType = XCAFDimTolObjects_DimensionType_Location_LinearDistance;
470 else if(aName.IsEqual("linear distance centre outer"))
472 theType = XCAFDimTolObjects_DimensionType_Location_LinearDistance_FromCenterToOuter;
474 else if(aName.IsEqual("linear distance centre inner"))
476 theType = XCAFDimTolObjects_DimensionType_Location_LinearDistance_FromCenterToInner;
478 else if(aName.IsEqual("linear distance outer centre"))
480 theType = XCAFDimTolObjects_DimensionType_Location_LinearDistance_FromOuterToCenter;
482 else if(aName.IsEqual("linear distance outer outer"))
484 theType = XCAFDimTolObjects_DimensionType_Location_LinearDistance_FromOuterToOuter;
486 else if(aName.IsEqual("linear distance outer inner"))
488 theType = XCAFDimTolObjects_DimensionType_Location_LinearDistance_FromOuterToInner;
490 else if(aName.IsEqual("linear distance inner centre"))
492 theType = XCAFDimTolObjects_DimensionType_Location_LinearDistance_FromInnerToCenter;
494 else if(aName.IsEqual("linear distance inner outer"))
496 theType = XCAFDimTolObjects_DimensionType_Location_LinearDistance_FromInnerToOuter;
498 else if(aName.IsEqual("linear distance inner inner"))
500 theType = XCAFDimTolObjects_DimensionType_Location_LinearDistance_FromInnerToInner;
503 if(theType != XCAFDimTolObjects_DimensionType_Location_None)
505 return Standard_True;
507 return Standard_False;
511 //=======================================================================
512 //function : DatumTargetType
514 //=======================================================================
515 Standard_Boolean STEPConstruct_GDTProperty::GetDatumTargetType(const Handle(TCollection_HAsciiString)& theDescription,
516 XCAFDimTolObjects_DatumTargetType& theType)
518 TCollection_AsciiString aName = theDescription->String();
520 if(aName.IsEqual("area"))
522 theType = XCAFDimTolObjects_DatumTargetType_Area;
523 return Standard_True;
525 else if(aName.IsEqual("line"))
527 theType = XCAFDimTolObjects_DatumTargetType_Line;
528 return Standard_True;
530 else if(aName.IsEqual("circle"))
532 theType = XCAFDimTolObjects_DatumTargetType_Circle;
533 return Standard_True;
535 else if(aName.IsEqual("rectangle"))
537 theType = XCAFDimTolObjects_DatumTargetType_Rectangle;
538 return Standard_True;
540 else if(aName.IsEqual("point"))
542 theType = XCAFDimTolObjects_DatumTargetType_Point;
543 return Standard_True;
545 return Standard_False;
548 //=======================================================================
549 //function : GetDimQualifierType
551 //=======================================================================
552 Standard_Boolean STEPConstruct_GDTProperty::GetDimQualifierType(const Handle(TCollection_HAsciiString)& theDescription,
553 XCAFDimTolObjects_DimensionQualifier& theType)
555 TCollection_AsciiString aName = theDescription->String();
557 theType = XCAFDimTolObjects_DimensionQualifier_None;
558 if(aName.IsEqual("maximum"))
560 theType = XCAFDimTolObjects_DimensionQualifier_Max;
562 else if(aName.IsEqual("minimum"))
564 theType = XCAFDimTolObjects_DimensionQualifier_Min;
566 else if(aName.IsEqual("average"))
568 theType = XCAFDimTolObjects_DimensionQualifier_Avg;
570 if(theType != XCAFDimTolObjects_DimensionQualifier_None)
572 return Standard_True;
574 return Standard_False;
577 //=======================================================================
578 //function : GetTolValueType
580 //=======================================================================
581 Standard_Boolean STEPConstruct_GDTProperty::GetTolValueType(const Handle(TCollection_HAsciiString)& theDescription,
582 XCAFDimTolObjects_GeomToleranceTypeValue& theType)
584 TCollection_AsciiString aName = theDescription->String();
586 theType = XCAFDimTolObjects_GeomToleranceTypeValue_None;
587 if(aName.IsEqual("cylindrical or circular"))
589 theType = XCAFDimTolObjects_GeomToleranceTypeValue_Diameter;
591 else if(aName.IsEqual("spherical"))
593 theType = XCAFDimTolObjects_GeomToleranceTypeValue_SphericalDiameter;
595 if(theType != XCAFDimTolObjects_GeomToleranceTypeValue_None)
597 return Standard_True;
599 return Standard_False;