From: ink Date: Thu, 9 Jul 2015 09:01:55 +0000 (+0300) Subject: 0026411: Necessary to improve XCAF to store and querying GD&T data. X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=74ddccd3037f49793a5c607da569a2c0cb1e4f3c;p=occt-copy.git 0026411: Necessary to improve XCAF to store and querying GD&T data. --- diff --git a/adm/UDLIST b/adm/UDLIST index be32f80619..dc11579855 100644 --- a/adm/UDLIST +++ b/adm/UDLIST @@ -402,6 +402,7 @@ p VrmlAPI p VrmlConverter p VrmlData p XCAFApp +p XCAFDimTolObjects p XCAFDoc p XCAFDrivers p XCAFPrs @@ -481,4 +482,4 @@ p IVtkVTK p IVtkTools t TKIVtk p IVtkDraw -t TKIVtkDraw \ No newline at end of file +t TKIVtkDraw diff --git a/src/STEPCAFControl/STEPCAFControl_Writer.cxx b/src/STEPCAFControl/STEPCAFControl_Writer.cxx index 6aac6d2da1..2832f86019 100644 --- a/src/STEPCAFControl/STEPCAFControl_Writer.cxx +++ b/src/STEPCAFControl/STEPCAFControl_Writer.cxx @@ -2024,10 +2024,10 @@ Standard_Boolean STEPCAFControl_Writer::WriteDGTs (const Handle(XSControl_WorkSe Standard_Integer i; for(i=1; i<=DGTLabels.Length(); i++) { TDF_Label DatumL = DGTLabels.Value(i); - TDF_Label ShapeL; + TDF_LabelSequence ShapeL; if(!DGTTool->GetRefShapeLabel(DatumL,ShapeL)) continue; // find target shape - TopoDS_Shape aShape = XCAFDoc_ShapeTool::GetShape(ShapeL); + TopoDS_Shape aShape = XCAFDoc_ShapeTool::GetShape(ShapeL.Value(1)); TopLoc_Location Loc; TColStd_SequenceOfTransient seqRI; FindEntities( FP, aShape, Loc, seqRI ); @@ -2105,10 +2105,10 @@ Standard_Boolean STEPCAFControl_Writer::WriteDGTs (const Handle(XSControl_WorkSe if(DGTLabels.Length()<=0) return Standard_False; for(i=1; i<=DGTLabels.Length(); i++) { TDF_Label DimTolL = DGTLabels.Value(i); - TDF_Label ShapeL; + TDF_LabelSequence ShapeL; if(!DGTTool->GetRefShapeLabel(DimTolL,ShapeL)) continue; // find target shape - TopoDS_Shape aShape = XCAFDoc_ShapeTool::GetShape(ShapeL); + TopoDS_Shape aShape = XCAFDoc_ShapeTool::GetShape(ShapeL.Value(1)); TopLoc_Location Loc; TColStd_SequenceOfTransient seqRI; FindEntities( FP, aShape, Loc, seqRI ); @@ -2248,7 +2248,7 @@ Standard_Boolean STEPCAFControl_Writer::WriteDGTs (const Handle(XSControl_WorkSe else if(kind<50) { //tolerance if(kind<35) { // tolerance with datum system TDF_LabelSequence DatumLabels; - DGTTool->GetDatumTolerLabels(DimTolL,DatumLabels); + DGTTool->GetDatumOfTolerLabels(DimTolL,DatumLabels); Standard_Integer NbDR = DatumLabels.Length(); Handle(StepDimTol_HArray1OfDatumReference) HADR = new StepDimTol_HArray1OfDatumReference(1,NbDR); for(Standard_Integer j=1; j<=NbDR; j++) { diff --git a/src/TKXCAF/PACKAGES b/src/TKXCAF/PACKAGES index 9731d6722d..ad9e0b5c82 100755 --- a/src/TKXCAF/PACKAGES +++ b/src/TKXCAF/PACKAGES @@ -1,3 +1,4 @@ XCAFApp +XCAFDimTolObjects XCAFDoc XCAFPrs diff --git a/src/XCAFDimTolObjects/XCAFDimTolObjects.cdl b/src/XCAFDimTolObjects/XCAFDimTolObjects.cdl new file mode 100644 index 0000000000..5a4ed0fb8e --- /dev/null +++ b/src/XCAFDimTolObjects/XCAFDimTolObjects.cdl @@ -0,0 +1,291 @@ +-- Created on: 2015-07-31 +-- Created by: data exchange team +-- Copyright (c) 2000-2015 OPEN CASCADE SAS +-- +-- This file is part of Open CASCADE Technology software library. +-- +-- This library is free software; you can redistribute it and/or modify it under +-- the terms of the GNU Lesser General Public License version 2.1 as published +-- by the Free Software Foundation, with special exception defined in the file +-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +-- distribution for complete text of the license and disclaimer of any warranty. +-- +-- Alternatively, this file may be used under the terms of Open CASCADE +-- commercial license or contractual agreement. + +package XCAFDimTolObjects + + ---Purpose: + +uses + TCollection, + TColStd, + TopoDS, + gp, + TColgp, + XCAFDoc, + TDocStd + +is + + enumeration DimensionType is + ---Purpose: Defines types of dimension + DimensionType_Location_None, + DimensionType_Location_CurvedDistance, + DimensionType_Location_LinearDistance, + DimensionType_Location_LinearDistance_FromCenterToOuter, + DimensionType_Location_LinearDistance_FromCenterToInner, + DimensionType_Location_LinearDistance_FromOuterToCenter, + DimensionType_Location_LinearDistance_FromOuterToOuter, + DimensionType_Location_LinearDistance_FromOuterToInner, + DimensionType_Location_LinearDistance_FromInnerToCenter, + DimensionType_Location_LinearDistance_FromInnerToOuter, + DimensionType_Location_LinearDistance_FromInnerToInner, + DimensionType_Location_Angular, + DimensionType_Location_Oriented, + DimensionType_Location_WithPath, + DimensionType_Size_CurveLength, + DimensionType_Size_Diameter, + DimensionType_Size_SphericalDiameter, + DimensionType_Size_Radius, + DimensionType_Size_SphericalRadius, + DimensionType_Size_ToroidalMinorDiameter, + DimensionType_Size_ToroidalMajorDiameter, + DimensionType_Size_ToroidalMinorRadius, + DimensionType_Size_ToroidalMajorRadius, + DimensionType_Size_ToroidalHighMajorDiameter, + DimensionType_Size_ToroidalLowMajorDiameter, + DimensionType_Size_ToroidalHighMajorRadius, + DimensionType_Size_ToroidalLowMajorRadius, + DimensionType_Size_Thickness, + DimensionType_Size_Angular, + DimensionType_Size_WithPath + end DimensionType; + + enumeration DimensionQualifier is + ---Purpose: Defines types of qualifier + DimensionQualifier_None, + DimensionQualifier_Min, + DimensionQualifier_Max, + DimensionQualifier_Avg + end DimensionQualifier; + + enumeration DimensionFormVariance is + ---Purpose: Defines value of form variance + DimensionFormVariance_None, + DimensionFormVariance_A, + DimensionFormVariance_B, + DimensionFormVariance_C, + DimensionFormVariance_CD, + DimensionFormVariance_D, + DimensionFormVariance_E, + DimensionFormVariance_EF, + DimensionFormVariance_F, + DimensionFormVariance_FG, + DimensionFormVariance_G, + DimensionFormVariance_H, + DimensionFormVariance_JS, + DimensionFormVariance_J, + DimensionFormVariance_K, + DimensionFormVariance_M, + DimensionFormVariance_N, + DimensionFormVariance_P, + DimensionFormVariance_R, + DimensionFormVariance_S, + DimensionFormVariance_T, + DimensionFormVariance_U, + DimensionFormVariance_V, + DimensionFormVariance_X, + DimensionFormVariance_Y, + DimensionFormVariance_Z, + DimensionFormVariance_ZA, + DimensionFormVariance_ZB, + DimensionFormVariance_ZC + end DimensionFormVariance; + + enumeration DimensionGrade is + ---Purpose: Defines value of grade + DimensionGrade_IT01, + DimensionGrade_IT0, + DimensionGrade_IT1, + DimensionGrade_IT2, + DimensionGrade_IT3, + DimensionGrade_IT4, + DimensionGrade_IT5, + DimensionGrade_IT6, + DimensionGrade_IT7, + DimensionGrade_IT8, + DimensionGrade_IT9, + DimensionGrade_IT10, + DimensionGrade_IT11, + DimensionGrade_IT12, + DimensionGrade_IT13, + DimensionGrade_IT14, + DimensionGrade_IT15, + DimensionGrade_IT16, + DimensionGrade_IT17, + DimensionGrade_IT18 + end DimensionGrade; + + enumeration GeomToleranceType is + ---Purpose: Defines types of geom tolerance + GeomToleranceType_None, + GeomToleranceType_Angularity, + GeomToleranceType_CircularRunout, + GeomToleranceType_CircularityOrRoundness, + GeomToleranceType_Coaxiality, + GeomToleranceType_Concentricity, + GeomToleranceType_Cylindricity, + GeomToleranceType_Flatness, + GeomToleranceType_Parallelism, + GeomToleranceType_Perpendicularity, + GeomToleranceType_Position, + GeomToleranceType_ProfileOfLine, + GeomToleranceType_ProfileOfSurface, + GeomToleranceType_Straightness, + GeomToleranceType_Symmetry, + GeomToleranceType_TotalRunout + end GeomToleranceType; + + enumeration GeomToleranceTypeValue is + ---Purpose: Defines types of value of tolerane + GeomToleranceTypeValue_None, + GeomToleranceTypeValue_Diameter, + GeomToleranceTypeValue_SphericalDiameter + end GeomToleranceTypeValue; + + enumeration GeomToleranceMatReqModif is + ---Purpose: Defines types of material requirement + GeomToleranceMatReqModif_None, + GeomToleranceMatReqModif_M, + GeomToleranceMatReqModif_L + end GeomToleranceMatReqModif; + + enumeration GeomToleranceZoneModif is + ---Purpose: Defines types of zone + GeomToleranceZoneModif_None, + GeomToleranceZoneModif_P, + GeomToleranceZoneModif_NonUniform + end GeomToleranceZoneModif; + + + enumeration DatumSingleModif is + ---Purpose: Defines modifirs + DatumSingleModif_AnyCrossSection, + DatumSingleModif_Any_LongitudinalSection, + DatumSingleModif_Basic, + DatumSingleModif_ContactingFeature, + DatumSingleModif_DegreeOfFreedomConstraintU, + DatumSingleModif_DegreeOfFreedomConstraintV, + DatumSingleModif_DegreeOfFreedomConstraintW, + DatumSingleModif_DegreeOfFreedomConstraintX, + DatumSingleModif_DegreeOfFreedomConstraintY, + DatumSingleModif_DegreeOfFreedomConstraintZ, + DatumSingleModif_DistanceVariable, + DatumSingleModif_FreeState, + DatumSingleModif_LeastMaterialRequirement, + DatumSingleModif_Line, + DatumSingleModif_MajorDiameter, + DatumSingleModif_MaximumMaterialRequirement, + DatumSingleModif_MinorDiameter, + DatumSingleModif_Orientation, + DatumSingleModif_PitchDiameter, + DatumSingleModif_Plane, + DatumSingleModif_Point, + DatumSingleModif_Translation + end DatumSingleModif; + + enumeration DatumModifWithValue is + ---Purpose: Defines modifirs + DatumModifWithValue_None, + DatumModifWithValue_CircularOrCylindrical, + DatumModifWithValue_Distance, + DatumModifWithValue_Projected, + DatumModifWithValue_Spherical + end DatumModifWithValue; + + enumeration DimensionModif is + ---Purpose: Defines modifirs + DimensionModif_ControlledRadius, + DimensionModif_Square, + DimensionModif_StatisticalTolerance, + DimensionModif_ContinuousFeature, + DimensionModif_TwoPointSize, + DimensionModif_LocalSizeDefinedBySphere, + DimensionModif_LeastSquaresAssociationCriterion, + DimensionModif_MaximumInscribedAssociation, + DimensionModif_MinimumCircumscribedAssociation, + DimensionModif_CircumferenceDiameter, + DimensionModif_AreaDiameter, + DimensionModif_VolumeDiameter, + DimensionModif_MaximumSize, + DimensionModif_MinimumSize, + DimensionModif_AverageSize, + DimensionModif_MedianSize, + DimensionModif_MidRangeSize, + DimensionModif_RangeOfSizes, + DimensionModif_AnyRestrictedPortionOfFeature, + DimensionModif_AnyCrossSection, + DimensionModif_SpecificFixedCrossSection, + DimensionModif_CommonTolerance, + DimensionModif_FreeStateCondition, + DimensionModif_Between + end DimensionModif; + + enumeration GeomToleranceModif is + ---Purpose: Defines modifirs + GeomToleranceModif_Any_Cross_Section, + GeomToleranceModif_Common_Zone, + GeomToleranceModif_Each_Radial_Element, + GeomToleranceModif_Free_State, + GeomToleranceModif_Least_Material_Requirement, + GeomToleranceModif_Line_Element, + GeomToleranceModif_Major_Diameter, + GeomToleranceModif_Maximum_Material_Requirement, + GeomToleranceModif_Minor_Diameter, + GeomToleranceModif_Not_Convex, + GeomToleranceModif_Pitch_Diameter, + GeomToleranceModif_Reciprocity_Requirement, + GeomToleranceModif_Separate_Requirement, + GeomToleranceModif_Statistical_Tolerance, + GeomToleranceModif_Tangent_Plane + end GeomToleranceModif; + + + class DimensionObject; + + class GeomToleranceObject; + + class DatumObject; + + class Tool; + + class DimensionObjectSequence instantiates Sequence from TCollection + (DimensionObject from XCAFDimTolObjects); + ---Purpose: class for containing Dimension. + + class GeomToleranceObjectSequence instantiates Sequence from TCollection + (GeomToleranceObject from XCAFDimTolObjects); + ---Purpose: class for containing GeomTolerances. + + class DatumObjectSequence instantiates Sequence from TCollection + (DatumObject from XCAFDimTolObjects); + ---Purpose: class for containing Datums. + + class DimensionModifiersSequence instantiates Sequence from TCollection + (DimensionModif from XCAFDimTolObjects); + ---Purpose: class for containing modifiers of Dimension. + + class GeomToleranceModifiersSequence instantiates Sequence from TCollection + (GeomToleranceModif from XCAFDimTolObjects); + ---Purpose: class for containing modifiers of GeomTolerances. + + class DatumModifiersSequence instantiates Sequence from TCollection + (DatumSingleModif from XCAFDimTolObjects); + ---Purpose: class for containing modifiers of Datums. + + class DataMapOfToleranceDatum instantiates DataMap from TCollection + (GeomToleranceObject from XCAFDimTolObjects,DatumObject from XCAFDimTolObjects,MapTransientHasher from TColStd); + ---Purpose: + +end XCAFDimTolObjects; diff --git a/src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.cdl b/src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.cdl new file mode 100644 index 0000000000..f517f16d25 --- /dev/null +++ b/src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.cdl @@ -0,0 +1,63 @@ +-- Created on: 2015-07-31 +-- Created by: data exchange team +-- Copyright (c) 2000-2015 OPEN CASCADE SAS +-- +-- This file is part of Open CASCADE Technology software library. +-- +-- This library is free software; you can redistribute it and/or modify it under +-- the terms of the GNU Lesser General Public License version 2.1 as published +-- by the Free Software Foundation, with special exception defined in the file +-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +-- distribution for complete text of the license and disclaimer of any warranty. +-- +-- Alternatively, this file may be used under the terms of Open CASCADE +-- commercial license or contractual agreement. + +class DatumObject from XCAFDimTolObjects inherits Transient from Standard + + ---Purpose: object to store datum + +uses + HAsciiString from TCollection, + DatumModifWithValue from XCAFDimTolObjects, + DatumModifiersSequence from XCAFDimTolObjects, + DatumSingleModif from XCAFDimTolObjects, + Shape from TopoDS + +is + Create returns DatumObject from XCAFDimTolObjects; + + Create(theObj : DatumObject from XCAFDimTolObjects) returns DatumObject from XCAFDimTolObjects; + + ---Category: class methods + -- ============= + + + GetName (me) returns HAsciiString from TCollection; + + SetName (me : mutable; theTag : HAsciiString from TCollection); + + GetModifiers (me) returns DatumModifiersSequence from XCAFDimTolObjects; + + SetModifiers (me : mutable; theModifiers : DatumModifiersSequence from XCAFDimTolObjects); + + GetModifierWithValue (me; theModifier : out DatumModifWithValue from XCAFDimTolObjects; theValue : out Real from Standard); + + SetModifierWithValue (me : mutable; theModifier : DatumModifWithValue from XCAFDimTolObjects; theValue : Real from Standard); + + AddModifier (me : mutable; theModifier : DatumSingleModif from XCAFDimTolObjects); + + GetDatumTarget (me) returns Shape from TopoDS; + + SetDatumTarget (me : mutable; theShape : Shape from TopoDS); + + IsDatumTarget (me) returns Boolean from Standard; + +fields + myName : HAsciiString from TCollection; + myModifiers : DatumModifiersSequence from XCAFDimTolObjects; + myModifierWithValue : DatumModifWithValue from XCAFDimTolObjects; + myValueOfModifier : Real from Standard; + myDatumTarget : Shape from TopoDS; + +end DatumObject; diff --git a/src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.cxx b/src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.cxx new file mode 100644 index 0000000000..96cc1179b3 --- /dev/null +++ b/src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.cxx @@ -0,0 +1,142 @@ +// Copyright (c) 1999-2014 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + + +//======================================================================= +//function : XCAFDimTolObjects_DatumObject +//purpose : +//======================================================================= + +XCAFDimTolObjects_DatumObject::XCAFDimTolObjects_DatumObject() +{ +} + +//======================================================================= +//function : XCAFDimTolObjects_DatumObject +//purpose : +//======================================================================= + +XCAFDimTolObjects_DatumObject::XCAFDimTolObjects_DatumObject(const Handle(XCAFDimTolObjects_DatumObject)& theObj) +{ + myName = theObj->myName; + myModifiers = theObj->myModifiers; + myModifierWithValue = theObj->myModifierWithValue; + myValueOfModifier = theObj->myValueOfModifier; + myDatumTarget = theObj->myDatumTarget; +} + +//======================================================================= +//function : GetName +//purpose : +//======================================================================= + +Handle(TCollection_HAsciiString) XCAFDimTolObjects_DatumObject::GetName() const +{ + if(myName.IsNull()) + return new TCollection_HAsciiString(); + return myName; +} + +//======================================================================= +//function : SetName +//purpose : +//======================================================================= + +void XCAFDimTolObjects_DatumObject::SetName(const Handle(TCollection_HAsciiString)& theName) +{ + myName = theName; +} + +//======================================================================= +//function : GetModifiers +//purpose : +//======================================================================= + +XCAFDimTolObjects_DatumModifiersSequence XCAFDimTolObjects_DatumObject::GetModifiers() const +{ + return myModifiers; +} + +//======================================================================= +//function : SetModifiers +//purpose : +//======================================================================= + +void XCAFDimTolObjects_DatumObject::SetModifiers(const XCAFDimTolObjects_DatumModifiersSequence& theModifiers) +{ + myModifiers = theModifiers; +} + +//======================================================================= +//function : SetModifierWithValue +//purpose : +//======================================================================= + +void XCAFDimTolObjects_DatumObject::SetModifierWithValue(const XCAFDimTolObjects_DatumModifWithValue theModifier, const Standard_Real theValue) +{ + myModifierWithValue = theModifier; + myValueOfModifier = theValue; +} + +//======================================================================= +//function : GetModifierWithValue +//purpose : +//======================================================================= + +void XCAFDimTolObjects_DatumObject::GetModifierWithValue(XCAFDimTolObjects_DatumModifWithValue& theModifier, Standard_Real& theValue) const +{ + theModifier = myModifierWithValue; + theValue = myValueOfModifier; +} + +//======================================================================= +//function : AddModifier +//purpose : +//======================================================================= + +void XCAFDimTolObjects_DatumObject::AddModifier(const XCAFDimTolObjects_DatumSingleModif theModifier) +{ + myModifiers.Append(theModifier); +} + +//======================================================================= +//function : GetDatumTarget +//purpose : +//======================================================================= + +TopoDS_Shape XCAFDimTolObjects_DatumObject::GetDatumTarget() const +{ + return myDatumTarget; +} + +//======================================================================= +//function : SetDatumTarget +//purpose : +//======================================================================= + +void XCAFDimTolObjects_DatumObject::SetDatumTarget (const TopoDS_Shape& theShape) +{ + myDatumTarget = theShape; +} + +//======================================================================= +//function : IsDatumTarget +//purpose : +//======================================================================= + +Standard_Boolean XCAFDimTolObjects_DatumObject::IsDatumTarget() const +{ + return !myDatumTarget.IsNull(); +} diff --git a/src/XCAFDimTolObjects/XCAFDimTolObjects_DimensionObject.cdl b/src/XCAFDimTolObjects/XCAFDimTolObjects_DimensionObject.cdl new file mode 100644 index 0000000000..bf4ebdd7da --- /dev/null +++ b/src/XCAFDimTolObjects/XCAFDimTolObjects_DimensionObject.cdl @@ -0,0 +1,128 @@ +-- Created on: 2015-07-31 +-- Created by: data exchange team +-- Copyright (c) 2000-2015 OPEN CASCADE SAS +-- +-- This file is part of Open CASCADE Technology software library. +-- +-- This library is free software; you can redistribute it and/or modify it under +-- the terms of the GNU Lesser General Public License version 2.1 as published +-- by the Free Software Foundation, with special exception defined in the file +-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +-- distribution for complete text of the license and disclaimer of any warranty. +-- +-- Alternatively, this file may be used under the terms of Open CASCADE +-- commercial license or contractual agreement. + +class DimensionObject from XCAFDimTolObjects inherits Transient from Standard + + ---Purpose: object to store dimension + +uses + HArray1OfReal from TColStd, + DimensionQualifier from XCAFDimTolObjects, + DimensionType from XCAFDimTolObjects, + DimensionFormVariance from XCAFDimTolObjects, + DimensionGrade from XCAFDimTolObjects, + Edge from TopoDS, + Dir from gp, + HArray1OfPnt from TColgp, + DimensionModifiersSequence from XCAFDimTolObjects, + DimensionModif from XCAFDimTolObjects + +is + + Create returns DimensionObject from XCAFDimTolObjects; + + Create(theObj : DimensionObject from XCAFDimTolObjects) returns DimensionObject from XCAFDimTolObjects; + + ---Category: class methods + -- ============= + + SetQualifier (me : mutable; theQualifier : DimensionQualifier from XCAFDimTolObjects); + + GetQualifier (me) returns DimensionQualifier from XCAFDimTolObjects; + + HasQualifier (me) returns Boolean; + + SetType (me : mutable; theTyupe : DimensionType from XCAFDimTolObjects); + + GetType (me) returns DimensionType from XCAFDimTolObjects; + + GetValue (me) returns Real from Standard ; + + GetValues (me) returns HArray1OfReal from TColStd ; + + SetValue (me : mutable; theValue : Real from Standard ); + + SetValues (me : mutable; theValue : HArray1OfReal from TColStd ); + + IsDimWithRange (me) returns Boolean; + + SetUpperBound(me : mutable; theUpperBound : Real from Standard); + + SetLowerBound(me : mutable; theLowerBound : Real from Standard); + + GetUpperBound(me) returns Real from Standard; + + GetLowerBound(me) returns Real from Standard; + + IsDimWithPlusMinusTolerance (me) returns Boolean; + + SetUpperTolValue(me : mutable; theUperTolValue : Real from Standard) returns Boolean from Standard; + + SetLowerTolValue(me : mutable; theLowerTolValue : Real from Standard) returns Boolean from Standard; + + GetUpperTolValue(me) returns Real from Standard; + + GetLowerTolValue(me) returns Real from Standard; + + IsDimWithClassOfTolerance (me) returns Boolean; + + SetClassOfTolerance(me : mutable; theHole : Boolean from Standard; + theFormVariance : DimensionFormVariance from XCAFDimTolObjects; + theGrade : DimensionGrade from XCAFDimTolObjects); + + GetClassOfTolerance(me; theHole : out Boolean from Standard; + theFormVariance : out DimensionFormVariance from XCAFDimTolObjects; + theGrade : out DimensionGrade from XCAFDimTolObjects) + returns Boolean from Standard; + + SetNbOfDecimalPlaces(me : mutable; theL : Integer from Standard; + theR : Integer from Standard); + + GetNbOfDecimalPlaces(me; theL : out Integer from Standard; + theR : out Integer from Standard); + + GetModifiers(me) returns DimensionModifiersSequence from XCAFDimTolObjects; + + SetModifiers(me : mutable; theModifiers : DimensionModifiersSequence from XCAFDimTolObjects ); + + AddModifier(me : mutable; theModifier : DimensionModif from XCAFDimTolObjects); + + GetPath(me) returns Edge from TopoDS; + + SetPath(me : mutable; thePath : Edge from TopoDS); + + GetDirection(me; theDir : out Dir from gp) returns Boolean from Standard; + + SetDirection(me : mutable; theDir : Dir from gp)returns Boolean from Standard; + + GetPoints(me) returns HArray1OfPnt from TColgp; + + SetPoints(me : mutable; thePnts : HArray1OfPnt from TColgp); + +fields + myType : DimensionType from XCAFDimTolObjects; + myVal : HArray1OfReal from TColStd; + myQualifier : DimensionQualifier from XCAFDimTolObjects; + myIsHole : Boolean from Standard; + myFormVariance : DimensionFormVariance from XCAFDimTolObjects; + myGrade : DimensionGrade from XCAFDimTolObjects; + myL : Integer from Standard; + myR : Integer from Standard; + myModifiers : DimensionModifiersSequence from XCAFDimTolObjects; + myPath : Edge from TopoDS; + myDir : Dir from gp; + myPnts : HArray1OfPnt from TColgp; + +end DimensionObject; diff --git a/src/XCAFDimTolObjects/XCAFDimTolObjects_DimensionObject.cxx b/src/XCAFDimTolObjects/XCAFDimTolObjects_DimensionObject.cxx new file mode 100644 index 0000000000..d9c65b2e8f --- /dev/null +++ b/src/XCAFDimTolObjects/XCAFDimTolObjects_DimensionObject.cxx @@ -0,0 +1,430 @@ +// Copyright (c) 1999-2014 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +#include +#include + + +//======================================================================= +//function : XCAFDimTolObjects_DimensionObject +//purpose : +//======================================================================= + +XCAFDimTolObjects_DimensionObject::XCAFDimTolObjects_DimensionObject() +{ +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +XCAFDimTolObjects_DimensionObject::XCAFDimTolObjects_DimensionObject(const Handle(XCAFDimTolObjects_DimensionObject)& theObj) +{ + myType = theObj->myType; + myVal = theObj->myVal; + myQualifier = theObj->myQualifier; + myIsHole = theObj->myIsHole; + myFormVariance = theObj->myFormVariance; + myGrade = theObj->myGrade; + myL = theObj->myL; + myR = theObj->myR; + myModifiers = theObj->myModifiers; + myPath = theObj->myPath; + myDir = theObj->myDir; + myPnts = theObj->myPnts; +} + +//======================================================================= +//function : SetQualifier +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetQualifier (const XCAFDimTolObjects_DimensionQualifier theQualifier) +{ + myQualifier = theQualifier; +} + +//======================================================================= +//function : GetQualifier +//purpose : +//======================================================================= +XCAFDimTolObjects_DimensionQualifier XCAFDimTolObjects_DimensionObject::GetQualifier() const +{ + return myQualifier; +} + +//======================================================================= +//function : HasQualifier +//purpose : +//======================================================================= +Standard_Boolean XCAFDimTolObjects_DimensionObject::HasQualifier() const +{ + return (myQualifier != XCAFDimTolObjects_DimensionQualifier_None); +} + +//======================================================================= +//function : SetType +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetType (const XCAFDimTolObjects_DimensionType theType) +{ + myType = theType; +} + +//======================================================================= +//function : GetType +//purpose : +//======================================================================= +XCAFDimTolObjects_DimensionType XCAFDimTolObjects_DimensionObject::GetType() const +{ + return myType; +} + +//======================================================================= +//function : GetValue +//purpose : +//======================================================================= +Standard_Real XCAFDimTolObjects_DimensionObject::GetValue () const +{ + if(!myVal.IsNull() && (myVal->Length() == 1 || myVal->Length() == 3)) + { + return myVal->Value(1); + } + return 0; +} + +//======================================================================= +//function : GetValues +//purpose : +//======================================================================= +Handle(TColStd_HArray1OfReal) XCAFDimTolObjects_DimensionObject::GetValues () const +{ + return myVal; +} + +//======================================================================= +//function : SetValue +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetValue (const Standard_Real theValue) +{ + myVal = new TColStd_HArray1OfReal(1, 1); + myVal->SetValue(1,theValue); +} + +//======================================================================= +//function : SetValues +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetValues (const Handle(TColStd_HArray1OfReal)& theValue) +{ + myVal = theValue; +} + +//======================================================================= +//function : IsDimWithRange +//purpose : +//======================================================================= +Standard_Boolean XCAFDimTolObjects_DimensionObject::IsDimWithRange() const +{ + if (!myVal.IsNull() && myVal->Length() == 2) + return Standard_True; + return Standard_False; +} + +//======================================================================= +//function : SetUpperBound +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetUpperBound (const Standard_Real theUpperBound) +{ + if(!myVal.IsNull() && myVal->Length() > 1) + myVal->SetValue(2, theUpperBound); + else + { + myVal = new TColStd_HArray1OfReal(1, 2); + myVal->SetValue(1, theUpperBound); + myVal->SetValue(2, theUpperBound); + } +} + +//======================================================================= +//function : SetLowerBound +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetLowerBound (const Standard_Real theLowerBound) +{ + if(!myVal.IsNull() && myVal->Length() > 1) + myVal->SetValue(1, theLowerBound); + else + { + myVal = new TColStd_HArray1OfReal(1, 2); + myVal->SetValue(2, theLowerBound); + myVal->SetValue(1, theLowerBound); + } +} + +//======================================================================= +//function : GetUpperBound +//purpose : +//======================================================================= +Standard_Real XCAFDimTolObjects_DimensionObject::GetUpperBound () const +{ + if(!myVal.IsNull() && myVal->Length() == 2) + { + return myVal->Value(2); + } + return 0; +} + +//======================================================================= +//function : GetLowerBound +//purpose : +//======================================================================= +Standard_Real XCAFDimTolObjects_DimensionObject::GetLowerBound () const +{ + if(!myVal.IsNull() && myVal->Length() == 2) + { + return myVal->Value(1); + } + return 0; +} + +//======================================================================= +//function : IsDimWithPlusMinusTolerance +//purpose : +//======================================================================= +Standard_Boolean XCAFDimTolObjects_DimensionObject::IsDimWithPlusMinusTolerance() const +{ + return (!myVal.IsNull() && myVal->Length() == 3); +} + +//======================================================================= +//function : SetUpperTolValue +//purpose : +//======================================================================= +Standard_Boolean XCAFDimTolObjects_DimensionObject::SetUpperTolValue (const Standard_Real theUperTolValue) +{ + if(!myVal.IsNull() && myVal->Length() == 3) + { + myVal->SetValue(3, theUperTolValue); + return Standard_True; + } + else if(!myVal.IsNull() && myVal->Length() == 1) + { + Standard_Real v = myVal->Value(1); + myVal = new TColStd_HArray1OfReal(1, 3); + myVal->SetValue(1, v); + myVal->SetValue(2, theUperTolValue); + myVal->SetValue(3, theUperTolValue); + return Standard_True; + } + return Standard_False; +} + +//======================================================================= +//function : SetLowerTolValue +//purpose : +//======================================================================= +Standard_Boolean XCAFDimTolObjects_DimensionObject::SetLowerTolValue (const Standard_Real theLowerTolValue) +{ + if(!myVal.IsNull() && myVal->Length() == 3) + { + myVal->SetValue(2, theLowerTolValue); + return Standard_True; + } + else if(!myVal.IsNull() && myVal->Length() == 1) + { + Standard_Real v = myVal->Value(1); + myVal = new TColStd_HArray1OfReal(1, 3); + myVal->SetValue(1, v); + myVal->SetValue(2, theLowerTolValue); + myVal->SetValue(3, theLowerTolValue); + return Standard_True; + } + return Standard_False; +} + +//======================================================================= +//function : GetUpperTolValue +//purpose : +//======================================================================= +Standard_Real XCAFDimTolObjects_DimensionObject::GetUpperTolValue () const +{ + if(!myVal.IsNull() && myVal->Length() == 3) + { + return myVal->Value(3); + } + return 0; +} + +//======================================================================= +//function : GetLowerTolValue +//purpose : +//======================================================================= +Standard_Real XCAFDimTolObjects_DimensionObject::GetLowerTolValue () const +{ + if(!myVal.IsNull() && myVal->Length() == 3) + { + return myVal->Value(2); + } + return 0; +} + +//======================================================================= +//function : IsDimWithClassOfTolerance +//purpose : +//======================================================================= +Standard_Boolean XCAFDimTolObjects_DimensionObject::IsDimWithClassOfTolerance() const +{ + return (myFormVariance != XCAFDimTolObjects_DimensionFormVariance_None); +} + +//======================================================================= +//function : SetClassOfTolerance +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetClassOfTolerance (const Standard_Boolean theHole, + const XCAFDimTolObjects_DimensionFormVariance theFormVariance, + const XCAFDimTolObjects_DimensionGrade theGrade) +{ + myIsHole = theHole; + myFormVariance = theFormVariance; + myGrade = theGrade; +} + +//======================================================================= +//function : GetClassOfTolerance +//purpose : +//======================================================================= +Standard_Boolean XCAFDimTolObjects_DimensionObject::GetClassOfTolerance (Standard_Boolean& theHole, + XCAFDimTolObjects_DimensionFormVariance& theFormVariance, + XCAFDimTolObjects_DimensionGrade& theGrade) const +{ + if(myFormVariance != XCAFDimTolObjects_DimensionFormVariance_None) + { + theHole = myIsHole; + theFormVariance = myFormVariance; + theGrade = myGrade; + return Standard_True; + } + return Standard_False; +} + +//======================================================================= +//function : SetNbOfDecimalPlaces +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetNbOfDecimalPlaces (const Standard_Integer theL, const Standard_Integer theR) +{ + myL = theL; + myR = theR; +} + +//======================================================================= +//function : GetNbOfDecimalPlaces +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::GetNbOfDecimalPlaces (Standard_Integer& theL, Standard_Integer& theR) const +{ + theL = myL; + theR = myR; +} + +//======================================================================= +//function : GetModifiers +//purpose : +//======================================================================= +XCAFDimTolObjects_DimensionModifiersSequence XCAFDimTolObjects_DimensionObject::GetModifiers () const +{ + return myModifiers; +} + +//======================================================================= +//function : SetModifiers +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetModifiers (const XCAFDimTolObjects_DimensionModifiersSequence& theModifiers) +{ + myModifiers = theModifiers; +} + +//======================================================================= +//function : AddModifier +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::AddModifier (const XCAFDimTolObjects_DimensionModif theModifier) +{ + myModifiers.Append(theModifier); +} + +//======================================================================= +//function : GetPath +//purpose : +//======================================================================= +TopoDS_Edge XCAFDimTolObjects_DimensionObject::GetPath () const +{ + return myPath; +} + +//======================================================================= +//function : SetPath +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetPath (const TopoDS_Edge& thePath) +{ + if(!thePath.IsNull()) + { + myPath = thePath; + } +} + +//======================================================================= +//function : GetDirection +//purpose : +//======================================================================= +Standard_Boolean XCAFDimTolObjects_DimensionObject::GetDirection (gp_Dir& theDir) const +{ + theDir = myDir; + return Standard_True; +} + +//======================================================================= +//function : SetDirection +//purpose : +//======================================================================= +Standard_Boolean XCAFDimTolObjects_DimensionObject::SetDirection (const gp_Dir& theDir) +{ + myDir = theDir; + return Standard_True; +} + +//======================================================================= +//function : GetPoints +//purpose : +//======================================================================= +Handle(TColgp_HArray1OfPnt) XCAFDimTolObjects_DimensionObject::GetPoints () const +{ + return myPnts; +} + +//======================================================================= +//function : SetPoints +//purpose : +//======================================================================= +void XCAFDimTolObjects_DimensionObject::SetPoints (const Handle(TColgp_HArray1OfPnt)& thePnts) +{ + myPnts = thePnts; +} diff --git a/src/XCAFDimTolObjects/XCAFDimTolObjects_GeomToleranceObject.cdl b/src/XCAFDimTolObjects/XCAFDimTolObjects_GeomToleranceObject.cdl new file mode 100644 index 0000000000..a7a6596b48 --- /dev/null +++ b/src/XCAFDimTolObjects/XCAFDimTolObjects_GeomToleranceObject.cdl @@ -0,0 +1,84 @@ +-- Created on: 2015-07-31 +-- Created by: data exchange team +-- Copyright (c) 2000-2015 OPEN CASCADE SAS +-- +-- This file is part of Open CASCADE Technology software library. +-- +-- This library is free software; you can redistribute it and/or modify it under +-- the terms of the GNU Lesser General Public License version 2.1 as published +-- by the Free Software Foundation, with special exception defined in the file +-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +-- distribution for complete text of the license and disclaimer of any warranty. +-- +-- Alternatively, this file may be used under the terms of Open CASCADE +-- commercial license or contractual agreement. + +class GeomToleranceObject from XCAFDimTolObjects inherits Transient from Standard + + ---Purpose: attribute to store dimension and tolerance + +uses + HArray1OfReal from TColStd, + HAsciiString from TCollection, + GeomToleranceType from XCAFDimTolObjects, + GeomToleranceTypeValue from XCAFDimTolObjects, + GeomToleranceMatReqModif from XCAFDimTolObjects, + GeomToleranceZoneModif from XCAFDimTolObjects, + GeomToleranceModifiersSequence from XCAFDimTolObjects, + GeomToleranceModif from XCAFDimTolObjects + +is + + Create returns GeomToleranceObject from XCAFDimTolObjects; + + Create(theObj : GeomToleranceObject from XCAFDimTolObjects) returns GeomToleranceObject from XCAFDimTolObjects; + + ---Category: class methods + -- ============= + + SetType (me : mutable; theType : GeomToleranceType from XCAFDimTolObjects); + + GetType (me) returns GeomToleranceType from XCAFDimTolObjects; + + SetTypeOfValue (me : mutable; theTypeOfValue : GeomToleranceTypeValue from XCAFDimTolObjects); + + GetTypeOfValue (me) returns GeomToleranceTypeValue from XCAFDimTolObjects; + + SetValue (me : mutable; theValue : Real from Standard); + + GetValue (me) returns Real from Standard; + + SetMaterialRequirementModifier (me : mutable; theGeomToleranceMatReqModif : GeomToleranceMatReqModif from XCAFDimTolObjects); + + GetMaterialRequirementModifier (me) returns GeomToleranceMatReqModif from XCAFDimTolObjects; + + SetZoneModifier (me : mutable; theGeomToleranceZoneModif : GeomToleranceZoneModif from XCAFDimTolObjects); + + GetZoneModifier (me) returns GeomToleranceZoneModif from XCAFDimTolObjects; + + SetValueOfZoneModifier (me : mutable; theValue : Real from Standard); + + GetValueOfZoneModifier (me) returns Real from Standard; + + SetModifiers (me : mutable; theModifiers : GeomToleranceModifiersSequence from XCAFDimTolObjects); + + AddModifier (me : mutable; theModifier : GeomToleranceModif from XCAFDimTolObjects); + + GetModifiers (me) returns GeomToleranceModifiersSequence from XCAFDimTolObjects; + + SetMaxValueModifier (me : mutable; theModifier : Real from Standard); + + GetMaxValueModifier (me) returns Real from Standard; + + +fields + myType : GeomToleranceType from XCAFDimTolObjects; + myTypeOfValue : GeomToleranceTypeValue from XCAFDimTolObjects ; + myValue : Real from Standard ; + myMatReqModif : GeomToleranceMatReqModif from XCAFDimTolObjects ; + myZoneModif : GeomToleranceZoneModif from XCAFDimTolObjects; + myValueOfZoneModif : Real from Standard; + myModifiers : GeomToleranceModifiersSequence from XCAFDimTolObjects; + myMaxValueModif : Real from Standard ; + +end GeomToleranceObject; diff --git a/src/XCAFDimTolObjects/XCAFDimTolObjects_GeomToleranceObject.cxx b/src/XCAFDimTolObjects/XCAFDimTolObjects_GeomToleranceObject.cxx new file mode 100644 index 0000000000..f4f96ad5a4 --- /dev/null +++ b/src/XCAFDimTolObjects/XCAFDimTolObjects_GeomToleranceObject.cxx @@ -0,0 +1,210 @@ +// Copyright (c) 1999-2014 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +//======================================================================= +//function : XCAFDimTolObjects_GeomTolerance +//purpose : +//======================================================================= + +XCAFDimTolObjects_GeomToleranceObject::XCAFDimTolObjects_GeomToleranceObject() +{ +} + +//======================================================================= +//function : XCAFDimTolObjects_GeomTolerance +//purpose : +//======================================================================= + +XCAFDimTolObjects_GeomToleranceObject::XCAFDimTolObjects_GeomToleranceObject(const Handle(XCAFDimTolObjects_GeomToleranceObject)& theObj) +{ + myType = theObj->myType; + myTypeOfValue = theObj->myTypeOfValue; + myValue = theObj->myValue; + myMatReqModif = theObj->myMatReqModif; + myZoneModif = theObj->myZoneModif; + myValueOfZoneModif = theObj->myValueOfZoneModif; + myModifiers = theObj->myModifiers; + myMaxValueModif = theObj->myMaxValueModif; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +void XCAFDimTolObjects_GeomToleranceObject::SetType (const XCAFDimTolObjects_GeomToleranceType theType) +{ + myType = theType; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +XCAFDimTolObjects_GeomToleranceType XCAFDimTolObjects_GeomToleranceObject::GetType() const +{ + return myType; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +void XCAFDimTolObjects_GeomToleranceObject::SetTypeOfValue (const XCAFDimTolObjects_GeomToleranceTypeValue theTypeOfValue) +{ + myTypeOfValue = theTypeOfValue; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +XCAFDimTolObjects_GeomToleranceTypeValue XCAFDimTolObjects_GeomToleranceObject::GetTypeOfValue() const +{ + return myTypeOfValue; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +void XCAFDimTolObjects_GeomToleranceObject::SetValue (const Standard_Real theValue) +{ + myValue = theValue; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +Standard_Real XCAFDimTolObjects_GeomToleranceObject::GetValue() const +{ + return myValue; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +void XCAFDimTolObjects_GeomToleranceObject::SetMaterialRequirementModifier (const XCAFDimTolObjects_GeomToleranceMatReqModif theMatReqModif) +{ + myMatReqModif = theMatReqModif; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +XCAFDimTolObjects_GeomToleranceMatReqModif XCAFDimTolObjects_GeomToleranceObject::GetMaterialRequirementModifier() const +{ + return myMatReqModif; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +void XCAFDimTolObjects_GeomToleranceObject::SetZoneModifier (const XCAFDimTolObjects_GeomToleranceZoneModif theZoneModif) +{ + myZoneModif = theZoneModif; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +XCAFDimTolObjects_GeomToleranceZoneModif XCAFDimTolObjects_GeomToleranceObject::GetZoneModifier() const +{ + return myZoneModif; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +void XCAFDimTolObjects_GeomToleranceObject::SetValueOfZoneModifier (const Standard_Real theValue) +{ + myValueOfZoneModif = theValue; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +Standard_Real XCAFDimTolObjects_GeomToleranceObject::GetValueOfZoneModifier() const +{ + return myValueOfZoneModif; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +void XCAFDimTolObjects_GeomToleranceObject::SetModifiers (const XCAFDimTolObjects_GeomToleranceModifiersSequence& theModifiers) +{ + myModifiers = theModifiers; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +void XCAFDimTolObjects_GeomToleranceObject::AddModifier (const XCAFDimTolObjects_GeomToleranceModif theModifier) +{ + myModifiers.Append(theModifier); +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +XCAFDimTolObjects_GeomToleranceModifiersSequence XCAFDimTolObjects_GeomToleranceObject::GetModifiers() const +{ + return myModifiers; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +void XCAFDimTolObjects_GeomToleranceObject::SetMaxValueModifier (const Standard_Real theModifier) +{ + myMaxValueModif = theModifier; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +Standard_Real XCAFDimTolObjects_GeomToleranceObject::GetMaxValueModifier() const +{ + return myMaxValueModif; +} diff --git a/src/XCAFDimTolObjects/XCAFDimTolObjects_Tool.cdl b/src/XCAFDimTolObjects/XCAFDimTolObjects_Tool.cdl new file mode 100644 index 0000000000..7a93d93617 --- /dev/null +++ b/src/XCAFDimTolObjects/XCAFDimTolObjects_Tool.cdl @@ -0,0 +1,62 @@ +-- Created on: 2004-01-09 +-- Created by: Sergey KUUL +-- Copyright (c) 2004-2014 OPEN CASCADE SAS +-- +-- This file is part of Open CASCADE Technology software library. +-- +-- This library is free software; you can redistribute it and/or modify it under +-- the terms of the GNU Lesser General Public License version 2.1 as published +-- by the Free Software Foundation, with special exception defined in the file +-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +-- distribution for complete text of the license and disclaimer of any warranty. +-- +-- Alternatively, this file may be used under the terms of Open CASCADE +-- commercial license or contractual agreement. + +class Tool from XCAFDimTolObjects + + ---Purpose: +uses + Shape from TopoDS, + Document from TDocStd, + DimTolTool from XCAFDoc, + GeomToleranceObject from XCAFDimTolObjects, + DatumObject from XCAFDimTolObjects, + DimensionObject from XCAFDimTolObjects, + DimensionObjectSequence from XCAFDimTolObjects, + DatumObjectSequence from XCAFDimTolObjects, + GeomToleranceObjectSequence from XCAFDimTolObjects, + DataMapOfToleranceDatum from XCAFDimTolObjects + +is + Create (theDoc : Document from TDocStd) returns Tool from XCAFDimTolObjects; + + + GetDimensions (me; theDimensionObjectSequence: out DimensionObjectSequence from XCAFDimTolObjects); + ---Purpose: Returns a sequence of Dimensions currently stored + -- in the DGTtable + + GetRefDimensions (me; theShape: Shape from TopoDS; theDimensions: out DimensionObjectSequence from XCAFDimTolObjects) + returns Boolean; + ---Purpose: Returns all Dimensions defined for Shape + + GetGeomTolerances (me; theGeomToleranceObjectSequence : out GeomToleranceObjectSequence from XCAFDimTolObjects; + theDatumObjectSequence : out DatumObjectSequence from XCAFDimTolObjects; + theMap : out DataMapOfToleranceDatum from XCAFDimTolObjects); + ---Purpose: Returns a sequence of Tolerancess currently stored + -- in the DGTtable + GetRefGeomTolerances (me; theShape: Shape from TopoDS; + theGeomToleranceObjectSequence: out GeomToleranceObjectSequence from XCAFDimTolObjects; + theDatumObjectSequence : out DatumObjectSequence from XCAFDimTolObjects; + theMap : out DataMapOfToleranceDatum from XCAFDimTolObjects) + returns Boolean; + ---Purpose: Returns all GeomTolerances defined for Shape + + GetRefDatum (me; theShape: Shape from TopoDS; theDatum: out DatumObject from XCAFDimTolObjects) + returns Boolean; + ---Purpose: Returns DatumObject defined for Shape +fields + myDimTolTool : DimTolTool from XCAFDoc; + + +end Tool; diff --git a/src/XCAFDimTolObjects/XCAFDimTolObjects_Tool.cxx b/src/XCAFDimTolObjects/XCAFDimTolObjects_Tool.cxx new file mode 100644 index 0000000000..418b4692c2 --- /dev/null +++ b/src/XCAFDimTolObjects/XCAFDimTolObjects_Tool.cxx @@ -0,0 +1,187 @@ +// Copyright (c) 1999-2015 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//======================================================================= +//function : XCAFDimTolObjects_Tool +//purpose : +//======================================================================= + +XCAFDimTolObjects_Tool::XCAFDimTolObjects_Tool(const Handle(TDocStd_Document)& theDoc) +{ + myDimTolTool = XCAFDoc_DocumentTool::DimTolTool(theDoc->Main()); +} + +//======================================================================= +//function : GetDimensions +//purpose : +//======================================================================= + +void XCAFDimTolObjects_Tool::GetDimensions(XCAFDimTolObjects_DimensionObjectSequence& theDimensionObjectSequence) const +{ + theDimensionObjectSequence.Clear(); + TDF_ChildIterator aChildIterator( myDimTolTool->Label() ); + for (; aChildIterator.More(); aChildIterator.Next()) { + TDF_Label aL = aChildIterator.Value(); + Handle(XCAFDoc_Dimension) aDimension; + if(aL.FindAttribute(XCAFDoc_Dimension::GetID(),aDimension)) { + theDimensionObjectSequence.Append(aDimension->GetObject()); + } + } +} + +//======================================================================= +//function : GetGeomTolerances +//purpose : +//======================================================================= + +void XCAFDimTolObjects_Tool::GetGeomTolerances(XCAFDimTolObjects_GeomToleranceObjectSequence& theGeomToleranceObjectSequence, + XCAFDimTolObjects_DatumObjectSequence& theDatumSequence, + XCAFDimTolObjects_DataMapOfToleranceDatum& theMap) const +{ + theGeomToleranceObjectSequence.Clear(); + TDF_ChildIterator aChildIterator( myDimTolTool->Label() ); + for (; aChildIterator.More(); aChildIterator.Next()) { + TDF_Label aL = aChildIterator.Value(); + Handle(XCAFDoc_GeomTolerance) aGeomTolerance; + if(aL.FindAttribute(XCAFDoc_GeomTolerance::GetID(),aGeomTolerance)) { + theGeomToleranceObjectSequence.Append(aGeomTolerance->GetObject()); + TDF_LabelSequence aSeq; + if(myDimTolTool->GetDatumOfTolerLabels(aGeomTolerance->Label(), aSeq)) + { + for(Standard_Integer i = 1; i <= aSeq.Length(); i++) + { + Handle(XCAFDoc_Datum) aDatum; + if(aSeq.Value(i).FindAttribute(XCAFDoc_Datum::GetID(), aDatum)) + { + theDatumSequence.Append(aDatum->GetObject()); + theMap.Bind(theGeomToleranceObjectSequence.Last(), theDatumSequence.Last()); + } + } + } + } + } +} + +//======================================================================= +//function : GetRefDimensions +//purpose : +//======================================================================= + +Standard_Boolean XCAFDimTolObjects_Tool::GetRefDimensions(const TopoDS_Shape& theShape, + XCAFDimTolObjects_DimensionObjectSequence& theDimensionObjectSequence) const +{ + theDimensionObjectSequence.Clear(); + TDF_Label aShapeL; + myDimTolTool->ShapeTool()->Search(theShape, aShapeL); + if(!aShapeL.IsNull()) + { + TDF_LabelSequence aSeq; + if( myDimTolTool->GetRefDimensionLabels(aShapeL, aSeq) ) { + for(Standard_Integer i = 1; i <= aSeq.Length(); i++) + { + Handle(XCAFDoc_Dimension) aDimension; + if( aSeq.Value(i).FindAttribute(XCAFDoc_Dimension::GetID(),aDimension)) + theDimensionObjectSequence.Append(aDimension->GetObject()); + } + return Standard_True; + } + } + return Standard_False; +} + +//======================================================================= +//function : GetRefGeomTolerances +//purpose : +//======================================================================= + +Standard_Boolean XCAFDimTolObjects_Tool::GetRefGeomTolerances(const TopoDS_Shape& theShape, + XCAFDimTolObjects_GeomToleranceObjectSequence& theGeomToleranceObjectSequence, + XCAFDimTolObjects_DatumObjectSequence& theDatumSequence, + XCAFDimTolObjects_DataMapOfToleranceDatum& theMap) const +{ + theGeomToleranceObjectSequence.Clear(); + TDF_Label aShapeL; + myDimTolTool->ShapeTool()->Search(theShape, aShapeL); + if(!aShapeL.IsNull()) + { + TDF_LabelSequence aSeq; + if( myDimTolTool->GetRefGeomToleranceLabels(aShapeL, aSeq) ) { + for(Standard_Integer i = 1; i <= aSeq.Length(); i++) + { + Handle(XCAFDoc_GeomTolerance) aGeomTolerance; + if( aSeq.Value(i).FindAttribute(XCAFDoc_GeomTolerance::GetID(),aGeomTolerance)) + { + theGeomToleranceObjectSequence.Append(aGeomTolerance->GetObject()); + TDF_LabelSequence aSeq; + if(myDimTolTool->GetDatumOfTolerLabels(aGeomTolerance->Label(), aSeq)) + { + for(Standard_Integer i = 1; i <= aSeq.Length(); i++) + { + Handle(XCAFDoc_Datum) aDatum; + if(aSeq.Value(i).FindAttribute(XCAFDoc_Datum::GetID(), aDatum)) + { + theDatumSequence.Append(aDatum->GetObject()); + theMap.Bind(theGeomToleranceObjectSequence.Last(), theDatumSequence.Last()); + } + } + } + } + } + return Standard_True; + } + } + return Standard_False; +} + +//======================================================================= +//function : GetRefDatum +//purpose : +//======================================================================= + +Standard_Boolean XCAFDimTolObjects_Tool::GetRefDatum(const TopoDS_Shape& theShape, + Handle(XCAFDimTolObjects_DatumObject)& theDatumObject) const +{ + TDF_Label aShapeL; + myDimTolTool->ShapeTool()->Search(theShape, aShapeL); + if(!aShapeL.IsNull()) + { + TDF_Label aDatumL; + if(myDimTolTool->GetRefDatumLabel(aShapeL, aDatumL)) + { + Handle(XCAFDoc_Datum) aDatum; + if( aDatumL.FindAttribute(XCAFDoc_Datum::GetID(),aDatum)){ + theDatumObject = aDatum->GetObject(); + return Standard_True; + } + } + } + return Standard_False; +} diff --git a/src/XCAFDoc/XCAFDoc.cdl b/src/XCAFDoc/XCAFDoc.cdl index b28e8690c8..9ed62bcae0 100644 --- a/src/XCAFDoc/XCAFDoc.cdl +++ b/src/XCAFDoc/XCAFDoc.cdl @@ -34,12 +34,14 @@ uses Quantity, TCollection, TColStd, + TColgp, TopLoc, TopoDS, TopTools, TDF, TDocStd, TDataStd, + XCAFDimTolObjects, gp is @@ -56,7 +58,6 @@ is ColorSurf, -- color of surfaces ColorCurv -- color of curves end ColorType; - class DocumentTool; @@ -65,9 +66,13 @@ is class Color; class DimTol; - + + class Dimension; + + class GeomTolerance; + class Datum; - + class Material; class Volume; @@ -93,6 +98,7 @@ is class GraphNodeSequence instantiates Sequence from TCollection (GraphNode from XCAFDoc); ---Purpose: class for containing GraphNodes. + class DataMapOfShapeLabel instantiates DataMap from TCollection (Shape from TopoDS, @@ -113,9 +119,15 @@ is DimTolRefGUID returns GUID from Standard; ---Purpose: Return GUIDs for TreeNode representing specified types of DGT + + DimensionRefGUID returns GUID from Standard; + ---Purpose: Return GUIDs for TreeNode representing specified types of Dimension DatumRefGUID returns GUID from Standard; ---Purpose: Return GUIDs for TreeNode representing specified types of datum + + GeomToleranceRefGUID returns GUID from Standard; + ---Purpose: Return GUIDs for TreeNode representing specified types of GeomTolerance DatumTolRefGUID returns GUID from Standard; ---Purpose: Return GUIDs for TreeNode representing connections Datum-Toler diff --git a/src/XCAFDoc/XCAFDoc.cxx b/src/XCAFDoc/XCAFDoc.cxx index dc22c014a1..ab339a5941 100644 --- a/src/XCAFDoc/XCAFDoc.cxx +++ b/src/XCAFDoc/XCAFDoc.cxx @@ -89,6 +89,27 @@ Standard_GUID XCAFDoc::DimTolRefGUID() return ID; } +//======================================================================= +//function : DimensionRefGUID +//purpose : +//======================================================================= + +Standard_GUID XCAFDoc::DimensionRefGUID() +{ + static Standard_GUID ID("efd212e3-6dfd-11d4-b9c8-0060b0ee281b"); + return ID; +} + +//======================================================================= +//function : GeomToleranceRefGUID +//purpose : +//======================================================================= + +Standard_GUID XCAFDoc::GeomToleranceRefGUID() +{ + static Standard_GUID ID("efd213e3-6dfd-11d4-b9c8-0060b0ee281b"); + return ID; +} //======================================================================= //function : DatumRefGUID diff --git a/src/XCAFDoc/XCAFDoc_Datum.cdl b/src/XCAFDoc/XCAFDoc_Datum.cdl index 17dad19fbb..26c3527936 100644 --- a/src/XCAFDoc/XCAFDoc_Datum.cdl +++ b/src/XCAFDoc/XCAFDoc_Datum.cdl @@ -20,9 +20,11 @@ class Datum from XCAFDoc inherits Attribute from TDF uses Label from TDF, RelocationTable from TDF, - HAsciiString from TCollection + HAsciiString from TCollection, + DatumObject from XCAFDimTolObjects is + Create returns Datum from XCAFDoc; ---Category: class methods @@ -38,16 +40,24 @@ is anIdentification : HAsciiString from TCollection) returns Datum from XCAFDoc; + Set (myclass; label : Label from TDF) + returns Datum from XCAFDoc; + + Set (me : mutable; aName : HAsciiString from TCollection; aDescription : HAsciiString from TCollection; anIdentification : HAsciiString from TCollection); GetName (me) returns HAsciiString from TCollection; - + GetDescription (me) returns HAsciiString from TCollection; GetIdentification (me) returns HAsciiString from TCollection; + GetObject (me) returns DatumObject from XCAFDimTolObjects; + + SetObject (me : mutable; theObject : DatumObject from XCAFDimTolObjects); + ID (me) ---C++: return const & returns GUID from Standard; diff --git a/src/XCAFDoc/XCAFDoc_Datum.cxx b/src/XCAFDoc/XCAFDoc_Datum.cxx index 1dbe0977c9..b08c83445f 100644 --- a/src/XCAFDoc/XCAFDoc_Datum.cxx +++ b/src/XCAFDoc/XCAFDoc_Datum.cxx @@ -14,7 +14,20 @@ #include #include - +#include +#include +#include +#include +#include +#include + +enum ChildLab +{ + ChildLab_Name = 1, + ChildLab_Modifiers, + ChildLab_ModifierWithValue, + ChildLab_DatumTarget +}; //======================================================================= //function : XCAFDoc_Datum @@ -25,7 +38,6 @@ XCAFDoc_Datum::XCAFDoc_Datum() { } - //======================================================================= //function : GetID //purpose : @@ -45,18 +57,33 @@ const Standard_GUID& XCAFDoc_Datum::GetID() //purpose : //======================================================================= -Handle(XCAFDoc_Datum) XCAFDoc_Datum::Set(const TDF_Label& label, - const Handle(TCollection_HAsciiString)& aName, - const Handle(TCollection_HAsciiString)& aDescription, - const Handle(TCollection_HAsciiString)& anIdentification) +Handle(XCAFDoc_Datum) XCAFDoc_Datum::Set(const TDF_Label& theLabel, + const Handle(TCollection_HAsciiString)& theName, + const Handle(TCollection_HAsciiString)& theDescription, + const Handle(TCollection_HAsciiString)& theIdentification) +{ + Handle(XCAFDoc_Datum) aDatum; + if (!theLabel.FindAttribute(XCAFDoc_Datum::GetID(), aDatum)) { + aDatum = new XCAFDoc_Datum(); + theLabel.AddAttribute(aDatum); + } + aDatum->Set(theName,theDescription,theIdentification); + return aDatum; +} + +//======================================================================= +//function : Set +//purpose : +//======================================================================= + +Handle(XCAFDoc_Datum) XCAFDoc_Datum::Set(const TDF_Label& theLabel) { - Handle(XCAFDoc_Datum) A; - if (!label.FindAttribute(XCAFDoc_Datum::GetID(), A)) { - A = new XCAFDoc_Datum(); - label.AddAttribute(A); + Handle(XCAFDoc_Datum) aDatum; + if (!theLabel.FindAttribute(XCAFDoc_Datum::GetID(), aDatum)) { + aDatum = new XCAFDoc_Datum(); + theLabel.AddAttribute(aDatum); } - A->Set(aName,aDescription,anIdentification); - return A; + return aDatum; } @@ -65,13 +92,14 @@ Handle(XCAFDoc_Datum) XCAFDoc_Datum::Set(const TDF_Label& label, //purpose : //======================================================================= -void XCAFDoc_Datum::Set(const Handle(TCollection_HAsciiString)& aName, - const Handle(TCollection_HAsciiString)& aDescription, - const Handle(TCollection_HAsciiString)& anIdentification) +void XCAFDoc_Datum::Set(const Handle(TCollection_HAsciiString)& theName, + const Handle(TCollection_HAsciiString)& theDescription, + const Handle(TCollection_HAsciiString)& theIdentification) { - myName = aName; - myDescription = aDescription; - myIdentification = anIdentification; + Backup(); + myName = theName; + myDescription = theDescription; + myIdentification = theIdentification; } @@ -82,12 +110,13 @@ void XCAFDoc_Datum::Set(const Handle(TCollection_HAsciiString)& aName, Handle(TCollection_HAsciiString) XCAFDoc_Datum::GetName() const { + if(myName.IsNull()) + return new TCollection_HAsciiString(); return myName; } - //======================================================================= -//function : GetDescription +//function : GetDescriptio7n //purpose : //======================================================================= @@ -107,6 +136,127 @@ Handle(TCollection_HAsciiString) XCAFDoc_Datum::GetIdentification() const return myIdentification; } +//======================================================================= +//function : SetObject +//purpose : +//======================================================================= + +void XCAFDoc_Datum::SetObject(const Handle(XCAFDimTolObjects_DatumObject)& theObject) +{ + Backup(); + if (!theObject->GetName().IsNull()) + { + Handle(TDataStd_AsciiString) anAttName; + if(!Label().FindChild(ChildLab_Name).FindAttribute(TDataStd_AsciiString::GetID(), anAttName)) + { + anAttName = new TDataStd_AsciiString(); + Label().FindChild(ChildLab_Name).AddAttribute(anAttName); + } + anAttName->Set(theObject->GetName()->String()); + } + else + { + Label().FindChild(ChildLab_Name).ForgetAllAttributes(); + } + + if(theObject->GetModifiers().Length() == 0) + { + Label().FindChild(ChildLab_Modifiers).ForgetAllAttributes(); + } + else + { + Handle(TDataStd_IntegerArray) aModifiers; + if(!Label().FindChild(ChildLab_Modifiers).FindAttribute(TDataStd_IntegerArray::GetID(), aModifiers)) + { + aModifiers = new TDataStd_IntegerArray(); + Label().FindChild(ChildLab_Modifiers).AddAttribute(aModifiers); + } + Handle(TColStd_HArray1OfInteger) anArr = new TColStd_HArray1OfInteger(1,theObject->GetModifiers().Length()); + for(Standard_Integer i = 1; i <= theObject->GetModifiers().Length(); i++) + anArr->SetValue(i,theObject->GetModifiers().Value(i)); + aModifiers->ChangeArray(anArr); + } + + XCAFDimTolObjects_DatumModifWithValue aM; + Standard_Real aV; + theObject->GetModifierWithValue(aM, aV); + if(aM != XCAFDimTolObjects_DatumModifWithValue_None) + { + Handle(TDataStd_Integer) aModifierWithValueM; + if(!Label().FindChild(ChildLab_ModifierWithValue).FindAttribute(TDataStd_Integer::GetID(), aModifierWithValueM)) + { + aModifierWithValueM = new TDataStd_Integer(); + Label().FindChild(ChildLab_ModifierWithValue).AddAttribute(aModifierWithValueM); + } + Handle(TDataStd_Real) aModifierWithValueV; + if(!Label().FindChild(ChildLab_ModifierWithValue).FindAttribute(TDataStd_Real::GetID(), aModifierWithValueV)) + { + aModifierWithValueV = new TDataStd_Real(); + Label().FindChild(ChildLab_ModifierWithValue).AddAttribute(aModifierWithValueV); + } + aModifierWithValueM->Set(aM); + aModifierWithValueV->Set(aV); + } + else + { + Label().FindChild(ChildLab_ModifierWithValue).ForgetAllAttributes(); + } + + if(!theObject->GetDatumTarget().IsNull()) + { + TNaming_Builder tnBuild(Label().FindChild(ChildLab_DatumTarget)); + tnBuild.Generated(theObject->GetDatumTarget()); + } + else + { + Label().FindChild(ChildLab_DatumTarget).ForgetAllAttributes(); + } +} + +//======================================================================= +//function : GetObject +//purpose : +//======================================================================= + +Handle(XCAFDimTolObjects_DatumObject) XCAFDoc_Datum::GetObject() const +{ + Handle(XCAFDimTolObjects_DatumObject) anObj = new XCAFDimTolObjects_DatumObject(); + + Handle(TDataStd_AsciiString) anAttName; + if(Label().FindChild(ChildLab_Name).FindAttribute(TDataStd_AsciiString::GetID(), anAttName)) + { + Handle(TCollection_HAsciiString) aStr = new TCollection_HAsciiString(anAttName->Get()); + anObj->SetName(aStr); + } + + Handle(TDataStd_IntegerArray) anArr; + if(Label().FindChild(ChildLab_Modifiers).FindAttribute(TDataStd_IntegerArray::GetID(), anArr) + && !anArr->Array().IsNull()) + { + XCAFDimTolObjects_DatumModifiersSequence aModifiers; + for(Standard_Integer i = 1; i <= anArr->Length(); i++) + aModifiers.Append((XCAFDimTolObjects_DatumSingleModif)anArr->Value(i)); + anObj->SetModifiers(aModifiers); + } + + Handle(TDataStd_Integer) aModifierWithValueM; + if(Label().FindChild(ChildLab_ModifierWithValue).FindAttribute(TDataStd_Integer::GetID(), aModifierWithValueM)) + { + Handle(TDataStd_Real) aModifierWithValueV; + if(Label().FindChild(ChildLab_ModifierWithValue).FindAttribute(TDataStd_Real::GetID(), aModifierWithValueV)) + { + anObj->SetModifierWithValue((XCAFDimTolObjects_DatumModifWithValue)aModifierWithValueM->Get(),aModifierWithValueV->Get()); + } + } + + Handle(TNaming_NamedShape) aDatumTarget; + if(Label().FindChild(ChildLab_DatumTarget).FindAttribute(TNaming_NamedShape::GetID(), aDatumTarget)) + { + anObj->SetDatumTarget(aDatumTarget->Get()); + } + + return anObj; +} //======================================================================= //function : ID @@ -124,11 +274,11 @@ const Standard_GUID& XCAFDoc_Datum::ID() const //purpose : //======================================================================= -void XCAFDoc_Datum::Restore(const Handle(TDF_Attribute)& With) +void XCAFDoc_Datum::Restore(const Handle(TDF_Attribute)& theWith) { - myName = Handle(XCAFDoc_Datum)::DownCast(With)->GetName(); - myDescription = Handle(XCAFDoc_Datum)::DownCast(With)->GetDescription(); - myIdentification = Handle(XCAFDoc_Datum)::DownCast(With)->GetIdentification(); + myName = Handle(XCAFDoc_Datum)::DownCast(theWith)->GetName(); + myDescription = Handle(XCAFDoc_Datum)::DownCast(theWith)->GetDescription(); + myIdentification = Handle(XCAFDoc_Datum)::DownCast(theWith)->GetIdentification(); } @@ -148,9 +298,9 @@ Handle(TDF_Attribute) XCAFDoc_Datum::NewEmpty() const //purpose : //======================================================================= -void XCAFDoc_Datum::Paste(const Handle(TDF_Attribute)& Into, +void XCAFDoc_Datum::Paste(const Handle(TDF_Attribute)& theInto, const Handle(TDF_RelocationTable)& /*RT*/) const { - Handle(XCAFDoc_Datum)::DownCast(Into)->Set(myName,myDescription,myIdentification); + Handle(XCAFDoc_Datum)::DownCast(theInto)->Set(myName,myDescription,myIdentification); } diff --git a/src/XCAFDoc/XCAFDoc_DimTol.cxx b/src/XCAFDoc/XCAFDoc_DimTol.cxx index d658c7943e..2726975662 100644 --- a/src/XCAFDoc/XCAFDoc_DimTol.cxx +++ b/src/XCAFDoc/XCAFDoc_DimTol.cxx @@ -71,6 +71,7 @@ void XCAFDoc_DimTol::Set(const Standard_Integer kind, const Handle(TCollection_HAsciiString)& aName, const Handle(TCollection_HAsciiString)& aDescription) { + Backup(); myKind = kind; myVal = aVal; myName = aName; diff --git a/src/XCAFDoc/XCAFDoc_DimTolTool.cdl b/src/XCAFDoc/XCAFDoc_DimTolTool.cdl index 9564ff2557..17594735fb 100644 --- a/src/XCAFDoc/XCAFDoc_DimTolTool.cdl +++ b/src/XCAFDoc/XCAFDoc_DimTolTool.cdl @@ -27,6 +27,9 @@ uses LabelSequence from TDF, Document from TDocStd, ShapeTool from XCAFDoc, + GeomTolerance from XCAFDoc, + Datum from XCAFDoc, + Dimension from XCAFDoc, RelocationTable from TDF, HArray1OfReal from TColStd, HAsciiString from TCollection @@ -53,6 +56,61 @@ is ---C++: return const & + + -- Methods for Dimension: + + IsDimension (me; theLab: Label from TDF) returns Boolean; + ---Purpose: Returns True if label belongs to a dimtoltable and + -- is a Dimension definition + + GetDimensionLabels (me; theLabels: out LabelSequence from TDF); + ---Purpose: Returns a sequence of Dimensions labels currently stored + -- in the DGTtable + + + SetDimension (me; theFirstL: Label from TDF; + theSecondL: Label from TDF; + theDimTolL: Label from TDF); + ---Purpose: Sets a link with GUID + + SetDimension (me; theL: Label from TDF; + theDimTolL: Label from TDF); + ---Purpose: Sets a link with GUID + + GetRefDimensionLabels (me; theShapeL: Label from TDF; theDimensions: out LabelSequence from TDF) + returns Boolean; + ---Purpose: Returns all Dimension labels defined for label ShapeL + + AddDimension (me : mutable) + returns Label from TDF; + ---Purpose: Adds a dimension definition to a DGTtable and returns its label + + + + -- Methods for GeomTolerance: + + IsGeomTolerance (me; theLab: Label from TDF) returns Boolean; + ---Purpose: Returns True if label belongs to a dimtoltable and + -- is a DimTol definition + + GetGeomToleranceLabels (me; theLabels: out LabelSequence from TDF); + ---Purpose: Returns a sequence of Tolerance labels currently stored + -- in the DGTtable + + SetGeomTolerance (me; theL: Label from TDF; + theDimTolL: Label from TDF); + ---Purpose: Sets a link with GUID + + GetRefGeomToleranceLabels (me; theShapeL: Label from TDF; theDimTols: out LabelSequence from TDF) + returns Boolean; + ---Purpose: Returns all GeomTolerance labels defined for label ShapeL + + AddGeomTolerance (me : mutable) + returns Label from TDF; + ---Purpose: Adds a GeomTolerance definition to a DGTtable and returns its label + + + -- Methods for DimTol: IsDimTol (me; lab: Label from TDF) returns Boolean; @@ -98,12 +156,12 @@ is ---Purpose: Sets a link with GUID -- Adds a DimTol as necessary - GetRefShapeLabel (me; DimTolL: Label from TDF; ShapeL: out Label from TDF) + GetRefShapeLabel (me; theDimTolL: Label from TDF; theShapeL: out LabelSequence from TDF) returns Boolean; ---Purpose: Returns ShapeL defined for label DimTolL -- Returns False if the DimTolL is not in DGTtable - GetRefDGTLabels (me; ShapeL: Label from TDF; DimTols: out LabelSequence from TDF) + GetRefDGTLabels (me; theShapeL: Label from TDF; theDimTols: out LabelSequence from TDF) returns Boolean; ---Purpose: Returns all DimTol labels defined for label ShapeL @@ -117,14 +175,14 @@ is -- Methods for Datum: - IsDatum (me; lab: Label from TDF) returns Boolean; + IsDatum (me; theLab: Label from TDF) returns Boolean; ---Purpose: Returns True if label belongs to a dimtoltable and -- is a Datum definition - GetDatumLabels (me; Labels: out LabelSequence from TDF); - ---Purpose: Returns a sequence of Datumss currently stored + GetDatumLabels (me; theLabels: out LabelSequence from TDF); + ---Purpose: Returns a sequence of Datum labels currently stored -- in the DGTtable - + FindDatum (me; aName : HAsciiString from TCollection; aDescription : HAsciiString from TCollection; anIdentification : HAsciiString from TCollection; @@ -138,8 +196,12 @@ is returns Label from TDF; ---Purpose: Adds a datum definition to a DGTtable and returns its label - SetDatum (me; L: Label from TDF; - DatumL: Label from TDF); + AddDatum (me : mutable) + returns Label from TDF; + ---Purpose: Adds a datum definition to a DGTtable and returns its label + + SetDatum (me; theL: Label from TDF; + theDatumL: Label from TDF); ---Purpose: Sets a link with GUID SetDatum (me; L: Label from TDF; TolerL: Label from TDF; @@ -149,6 +211,11 @@ is ---Purpose: Sets a link with GUID for Datum -- Adds a Datum as necessary -- Sets connection between Datum and Tolerance + + SetDatumToGeomTol (me; theL: Label from TDF; theTolerL: Label from TDF); + ---Purpose: Sets a link with GUID for Datum + -- Sets connection between Datum and Tolerance + GetDatum (me; DatumL: Label from TDF; aName : out HAsciiString from TCollection; @@ -157,10 +224,21 @@ is ---Purpose: Returns datum assigned to -- Returns False if no such datum is assigned - GetDatumTolerLabels (me; DimTolL: Label from TDF; Datums: out LabelSequence from TDF) + GetDatumOfTolerLabels (me; theDimTolL: Label from TDF; theDatums: out LabelSequence from TDF) returns Boolean; ---Purpose: Returns all Datum labels defined for label DimTolL + GetTolerOfDatumLabels (me; theDatumL: Label from TDF; theTols: out LabelSequence from TDF) + returns Boolean; + ---Purpose: Returns all GeomToleranses labels defined for label DatumL + + GetRefDatumLabel (me; theShapeL: Label from TDF; theDatum: out Label from TDF) + returns Boolean; + ---Purpose: Returns Datum label defined for label ShapeL + + GetRefDatum (me; theShape: Shape from TopoDS; theDatum: out Datum from XCAFDoc) + returns Boolean; + ---Purpose: Returns Datum label defined for label Shape ID (me) ---C++: return const & diff --git a/src/XCAFDoc/XCAFDoc_DimTolTool.cxx b/src/XCAFDoc/XCAFDoc_DimTolTool.cxx index b3e597b996..e28629f17b 100644 --- a/src/XCAFDoc/XCAFDoc_DimTolTool.cxx +++ b/src/XCAFDoc/XCAFDoc_DimTolTool.cxx @@ -15,6 +15,8 @@ #include #include +#include +#include #include #include #include @@ -92,31 +94,87 @@ const Handle(XCAFDoc_ShapeTool)& XCAFDoc_DimTolTool::ShapeTool() //purpose : //======================================================================= -Standard_Boolean XCAFDoc_DimTolTool::IsDimTol(const TDF_Label& DimTolL) const +Standard_Boolean XCAFDoc_DimTolTool::IsDimTol(const TDF_Label& theDimTolL) const { - Handle(XCAFDoc_DimTol) DimTolAttr; - if(DimTolL.FindAttribute(XCAFDoc_DimTol::GetID(),DimTolAttr)) { + Handle(XCAFDoc_DimTol) aDimTolAttr; + if(theDimTolL.FindAttribute(XCAFDoc_DimTol::GetID(),aDimTolAttr)) { return Standard_True; } return Standard_False; } +//======================================================================= +//function : IsDimension +//purpose : +//======================================================================= + +Standard_Boolean XCAFDoc_DimTolTool::IsDimension(const TDF_Label& theDimTolL) const +{ + Handle(XCAFDoc_Dimension) aDimTolAttr; + if(theDimTolL.FindAttribute(XCAFDoc_Dimension::GetID(),aDimTolAttr)) { + return Standard_True; + } + return Standard_False; +} + +//======================================================================= +//function : IsGeomTolerance +//purpose : +//======================================================================= + +Standard_Boolean XCAFDoc_DimTolTool::IsGeomTolerance(const TDF_Label& theDimTolL) const +{ + Handle(XCAFDoc_GeomTolerance) aDimTolAttr; + if(theDimTolL.FindAttribute(XCAFDoc_GeomTolerance::GetID(),aDimTolAttr)) { + return Standard_True; + } + return Standard_False; +} //======================================================================= //function : GetDimTolLabels //purpose : //======================================================================= -void XCAFDoc_DimTolTool::GetDimTolLabels(TDF_LabelSequence& Labels) const +void XCAFDoc_DimTolTool::GetDimTolLabels(TDF_LabelSequence& theLabels) const { - Labels.Clear(); - TDF_ChildIterator ChildIterator( Label() ); - for (; ChildIterator.More(); ChildIterator.Next()) { - TDF_Label L = ChildIterator.Value(); - if ( IsDimTol(L)) Labels.Append(L); + theLabels.Clear(); + TDF_ChildIterator aChildIterator( Label() ); + for (; aChildIterator.More(); aChildIterator.Next()) { + TDF_Label aL = aChildIterator.Value(); + if ( IsDimTol(aL)) theLabels.Append(aL); } } +//======================================================================= +//function : GetDimensionLabels +//purpose : +//======================================================================= + +void XCAFDoc_DimTolTool::GetDimensionLabels(TDF_LabelSequence& theLabels) const +{ + theLabels.Clear(); + TDF_ChildIterator aChildIterator( Label() ); + for (; aChildIterator.More(); aChildIterator.Next()) { + TDF_Label aL = aChildIterator.Value(); + if ( IsDimension(aL)) theLabels.Append(aL); + } +} + +//======================================================================= +//function : GetGeomToleranceLabels +//purpose : +//======================================================================= + +void XCAFDoc_DimTolTool::GetGeomToleranceLabels(TDF_LabelSequence& theLabels) const +{ + theLabels.Clear(); + TDF_ChildIterator aChildIterator( Label() ); + for (; aChildIterator.More(); aChildIterator.Next()) { + TDF_Label aL = aChildIterator.Value(); + if ( IsGeomTolerance(aL)) theLabels.Append(aL); + } +} //======================================================================= //function : FindDimTol @@ -198,21 +256,129 @@ TDF_Label XCAFDoc_DimTolTool::AddDimTol(const Standard_Integer kind, return DimTolL; } +//======================================================================= +//function : AddDimension +//purpose : +//======================================================================= + +TDF_Label XCAFDoc_DimTolTool::AddDimension() +{ + TDF_Label aDimTolL; + TDF_TagSource aTag; + aDimTolL = aTag.NewChild ( Label() ); + Handle(XCAFDoc_Dimension) aDim = XCAFDoc_Dimension::Set(aDimTolL); + TCollection_AsciiString aStr = "DGT:Dimension"; + TDataStd_Name::Set(aDimTolL,aStr); + return aDimTolL; +} + +//======================================================================= +//function : AddGeomTolerance +//purpose : +//======================================================================= + +TDF_Label XCAFDoc_DimTolTool::AddGeomTolerance() +{ + TDF_Label aDimTolL; + TDF_TagSource aTag; + aDimTolL = aTag.NewChild ( Label() ); + Handle(XCAFDoc_GeomTolerance) aTol = XCAFDoc_GeomTolerance::Set(aDimTolL); + TCollection_AsciiString aStr = "DGT:Tolerance"; + TDataStd_Name::Set(aDimTolL,aStr); + return aDimTolL; +} + +//======================================================================= +//function : SetDimension +//purpose : +//======================================================================= + +void XCAFDoc_DimTolTool::SetDimension(const TDF_Label& theL, + const TDF_Label& theDimTolL) const +{ + TDF_Label nullLab; + SetDimension(theL, nullLab, theDimTolL); +} + +//======================================================================= +//function : SetDimension +//purpose : +//======================================================================= + +void XCAFDoc_DimTolTool::SetDimension(const TDF_Label& theFirstL, + const TDF_Label& theSecondL, + const TDF_Label& theDimTolL) const +{ + Handle(XCAFDoc_GraphNode) aChGNode; + Handle(XCAFDoc_GraphNode) aFGNode; + Handle(XCAFDoc_GraphNode) aSecondFGNode; + + //Handle(XCAFDoc_GraphNode) ChGNode, FGNode; + if ( theDimTolL.FindAttribute (XCAFDoc::DimensionRefGUID(), aChGNode) ) { + while (aChGNode->NbFathers() > 0) { + aFGNode = aChGNode->GetFather(1); + aFGNode->UnSetChild(aChGNode); + } + theDimTolL.ForgetAttribute ( XCAFDoc::DimTolRefGUID() ); + } + + if(!IsDimension(theDimTolL)) + { + return; + } + + if (!theDimTolL.FindAttribute(XCAFDoc::DimensionRefGUID(), aChGNode) ) { + aChGNode = new XCAFDoc_GraphNode; + aChGNode = XCAFDoc_GraphNode::Set(theDimTolL); + } + if (!theFirstL.FindAttribute(XCAFDoc::DimensionRefGUID(), aFGNode) ) { + aFGNode = new XCAFDoc_GraphNode; + aFGNode = XCAFDoc_GraphNode::Set(theFirstL); + } + aFGNode->SetGraphID(XCAFDoc::DimensionRefGUID()); + aChGNode->SetGraphID(XCAFDoc::DimensionRefGUID()); + aFGNode->SetChild(aChGNode); + aChGNode->SetFather(aFGNode); + + if (!theSecondL.IsNull()){ + if(!theSecondL.FindAttribute(XCAFDoc::DimensionRefGUID(), aSecondFGNode) ) { + aSecondFGNode = new XCAFDoc_GraphNode; + aSecondFGNode = XCAFDoc_GraphNode::Set(theSecondL); + } + aSecondFGNode->SetGraphID(XCAFDoc::DimensionRefGUID()); + aSecondFGNode->SetChild(aChGNode); + aChGNode->SetFather(aSecondFGNode); + } +} + +//======================================================================= +//function : SetGeomTolerance +//purpose : +//======================================================================= + +void XCAFDoc_DimTolTool::SetGeomTolerance(const TDF_Label& theL, + const TDF_Label& theDimTolL) const +{ + // set reference + Handle(TDataStd_TreeNode) refNode, mainNode; + refNode = TDataStd_TreeNode::Set ( theDimTolL, XCAFDoc::GeomToleranceRefGUID() ); + mainNode = TDataStd_TreeNode::Set ( theL, XCAFDoc::GeomToleranceRefGUID() ); + refNode->Remove(); // abv: fix against bug in TreeNode::Append() + mainNode->Append(refNode); +} //======================================================================= //function : SetDimTol //purpose : //======================================================================= -void XCAFDoc_DimTolTool::SetDimTol(const TDF_Label& L, - const TDF_Label& DimTolL) const +void XCAFDoc_DimTolTool::SetDimTol(const TDF_Label& theL, + const TDF_Label& theDimTolL) const { // set reference Handle(TDataStd_TreeNode) refNode, mainNode; -// mainNode = TDataStd_TreeNode::Set ( DimTolL, XCAFDoc::DimTolRefGUID() ); -// refNode = TDataStd_TreeNode::Set ( L, XCAFDoc::DimTolRefGUID() ); - refNode = TDataStd_TreeNode::Set ( DimTolL, XCAFDoc::DimTolRefGUID() ); - mainNode = TDataStd_TreeNode::Set ( L, XCAFDoc::DimTolRefGUID() ); + refNode = TDataStd_TreeNode::Set ( theDimTolL, XCAFDoc::DimTolRefGUID() ); + mainNode = TDataStd_TreeNode::Set (theL, XCAFDoc::DimTolRefGUID() ); refNode->Remove(); // abv: fix against bug in TreeNode::Append() mainNode->Append(refNode); } @@ -240,42 +406,88 @@ TDF_Label XCAFDoc_DimTolTool::SetDimTol(const TDF_Label& L, //purpose : //======================================================================= -Standard_Boolean XCAFDoc_DimTolTool::GetRefShapeLabel(const TDF_Label& L, - TDF_Label& ShapeL) const +Standard_Boolean XCAFDoc_DimTolTool::GetRefShapeLabel(const TDF_Label& theL, + TDF_LabelSequence& theShapeL) const { - Handle(TDataStd_TreeNode) Node; - if( !L.FindAttribute(XCAFDoc::DimTolRefGUID(),Node) || !Node->HasFather() ) { - if( !L.FindAttribute(XCAFDoc::DatumRefGUID(),Node) || !Node->HasFather() ) { - return Standard_False; + theShapeL.Clear(); + Handle(TDataStd_TreeNode) aNode; + if( !theL.FindAttribute(XCAFDoc::DimTolRefGUID(),aNode) || !aNode->HasFather() ) { + if( !theL.FindAttribute(XCAFDoc::DatumRefGUID(),aNode) || !aNode->HasFather() ) { + if( !theL.FindAttribute(XCAFDoc::GeomToleranceRefGUID(),aNode) || !aNode->HasFather() ) { + Handle(XCAFDoc_GraphNode) aGNode; + if( theL.FindAttribute(XCAFDoc::DimensionRefGUID(),aGNode) && aGNode->NbFathers() > 0 ) { + for(Standard_Integer i = 1; i <= aGNode->NbFathers(); i++) + { + theShapeL.Append(aGNode->GetFather(i)->Label()); + } + return Standard_True; + } + return Standard_False; + } } } - ShapeL = Node->Father()->Label(); + theShapeL.Append(aNode->Father()->Label()); return Standard_True; } +//======================================================================= +//function : GetRefDimensionLabels +//purpose : +//======================================================================= + +Standard_Boolean XCAFDoc_DimTolTool::GetRefDimensionLabels(const TDF_Label& theShapeL, + TDF_LabelSequence& theDimTols) const +{ + Handle(XCAFDoc_GraphNode) aGNode; + if( theShapeL.FindAttribute(XCAFDoc::DimensionRefGUID(),aGNode) && aGNode->NbChildren() > 0 ) { + for(Standard_Integer i = 1; i <= aGNode->NbChildren(); i++) + { + theDimTols.Append(aGNode->GetChild(i)->Label()); + } + return Standard_True; + } + return Standard_False; +} //======================================================================= -//function : GetRefDGTLabels +//function : GetRefGeomToleranceLabels //purpose : //======================================================================= -Standard_Boolean XCAFDoc_DimTolTool::GetRefDGTLabels(const TDF_Label& ShapeL, - TDF_LabelSequence &DimTols) const +Standard_Boolean XCAFDoc_DimTolTool::GetRefGeomToleranceLabels(const TDF_Label& theShapeL, + TDF_LabelSequence& theDimTols) const { - Handle(TDataStd_TreeNode) Node; - if( !ShapeL.FindAttribute(XCAFDoc::DimTolRefGUID(),Node) || - !Node->HasFirst() ) { + Handle(TDataStd_TreeNode) aNode; + if( !theShapeL.FindAttribute(XCAFDoc::GeomToleranceRefGUID(),aNode) || + !aNode->HasFirst() ) { return Standard_False; } - Handle(TDataStd_TreeNode) Last = Node->First(); - DimTols.Append(Last->Label()); - while(Last->HasNext()) { - Last = Last->Next(); - DimTols.Append(Last->Label()); + Handle(TDataStd_TreeNode) aLast = aNode->First(); + theDimTols.Append(aLast->Label()); + while(aLast->HasNext()) { + aLast = aLast->Next(); + theDimTols.Append(aLast->Label()); } return Standard_True; } +//======================================================================= +//function : GetRefDatumLabel +//purpose : +//======================================================================= + +Standard_Boolean XCAFDoc_DimTolTool::GetRefDatumLabel(const TDF_Label& theShapeL, + TDF_Label& theDatum) const +{ + Handle(TDataStd_TreeNode) aNode; + if( !theShapeL.FindAttribute(XCAFDoc::DatumRefGUID(),aNode) || + !aNode->HasFirst() ) { + return Standard_False; + } + Handle(TDataStd_TreeNode) aLast = aNode->First(); + theDatum = aLast->Label(); + return Standard_True; +} //======================================================================= //function : GetDimTol @@ -306,10 +518,10 @@ Standard_Boolean XCAFDoc_DimTolTool::GetDimTol(const TDF_Label& DimTolL, //purpose : //======================================================================= -Standard_Boolean XCAFDoc_DimTolTool::IsDatum(const TDF_Label& DimTolL) const +Standard_Boolean XCAFDoc_DimTolTool::IsDatum(const TDF_Label& theDimTolL) const { - Handle(XCAFDoc_Datum) DatumAttr; - if(DimTolL.FindAttribute(XCAFDoc_Datum::GetID(),DatumAttr)) { + Handle(XCAFDoc_Datum) aDatumAttr; + if(theDimTolL.FindAttribute(XCAFDoc_Datum::GetID(),aDatumAttr)) { return Standard_True; } return Standard_False; @@ -321,17 +533,16 @@ Standard_Boolean XCAFDoc_DimTolTool::IsDatum(const TDF_Label& DimTolL) const //purpose : //======================================================================= -void XCAFDoc_DimTolTool::GetDatumLabels(TDF_LabelSequence& Labels) const +void XCAFDoc_DimTolTool::GetDatumLabels(TDF_LabelSequence& theLabels) const { - Labels.Clear(); - TDF_ChildIterator ChildIterator( Label() ); - for (; ChildIterator.More(); ChildIterator.Next()) { - TDF_Label L = ChildIterator.Value(); - if ( IsDatum(L)) Labels.Append(L); + theLabels.Clear(); + TDF_ChildIterator aChildIterator( Label() ); + for (; aChildIterator.More(); aChildIterator.Next()) { + TDF_Label L = aChildIterator.Value(); + if ( IsDatum(L)) theLabels.Append(L); } } - //======================================================================= //function : FindDatum //purpose : @@ -375,24 +586,37 @@ TDF_Label XCAFDoc_DimTolTool::AddDatum(const Handle(TCollection_HAsciiString)& a return DatumL; } +//======================================================================= +//function : AddDatum +//purpose : +//======================================================================= + +TDF_Label XCAFDoc_DimTolTool::AddDatum() +{ + TDF_Label aDatumL; + TDF_TagSource aTag; + aDatumL = aTag.NewChild ( Label() ); + Handle(XCAFDoc_Datum) aDat = XCAFDoc_Datum::Set(aDatumL); + TDataStd_Name::Set(aDatumL,"DGT:Datum"); + return aDatumL; +} //======================================================================= //function : SetDatum //purpose : //======================================================================= -void XCAFDoc_DimTolTool::SetDatum(const TDF_Label& L, - const TDF_Label& DatumL) const +void XCAFDoc_DimTolTool::SetDatum(const TDF_Label& theL, + const TDF_Label& theDatumL) const { // set reference Handle(TDataStd_TreeNode) refNode, mainNode; - refNode = TDataStd_TreeNode::Set ( DatumL, XCAFDoc::DatumRefGUID() ); - mainNode = TDataStd_TreeNode::Set ( L, XCAFDoc::DatumRefGUID() ); + refNode = TDataStd_TreeNode::Set ( theDatumL, XCAFDoc::DatumRefGUID() ); + mainNode = TDataStd_TreeNode::Set ( theL, XCAFDoc::DatumRefGUID() ); refNode->Remove(); mainNode->Append(refNode); } - //======================================================================= //function : SetDatum //purpose : @@ -425,6 +649,31 @@ void XCAFDoc_DimTolTool::SetDatum(const TDF_Label& L, ChGNode->SetFather(FGNode); } +//======================================================================= +//function : SetDatumToGeomTol +//purpose : +//======================================================================= + +void XCAFDoc_DimTolTool::SetDatumToGeomTol(const TDF_Label& theDatumL, + const TDF_Label& theTolerL) const +{ + // set reference + Handle(XCAFDoc_GraphNode) aFGNode; + Handle(XCAFDoc_GraphNode) aChGNode; + if (! theTolerL.FindAttribute( XCAFDoc::DatumTolRefGUID(), aFGNode) ) { + aFGNode = new XCAFDoc_GraphNode; + aFGNode = XCAFDoc_GraphNode::Set(theTolerL); + } + if (! theDatumL.FindAttribute( XCAFDoc::DatumTolRefGUID(), aChGNode) ) { + aChGNode = new XCAFDoc_GraphNode; + aChGNode = XCAFDoc_GraphNode::Set(theDatumL); + } + aFGNode->SetGraphID( XCAFDoc::DatumTolRefGUID() ); + aChGNode->SetGraphID( XCAFDoc::DatumTolRefGUID() ); + aFGNode->SetChild(aChGNode); + aChGNode->SetFather(aFGNode); +} + //======================================================================= //function : GetDatum //purpose : @@ -451,15 +700,33 @@ Standard_Boolean XCAFDoc_DimTolTool::GetDatum(const TDF_Label& theDatumL, //purpose : //======================================================================= -Standard_Boolean XCAFDoc_DimTolTool::GetDatumTolerLabels(const TDF_Label& DimTolL, - TDF_LabelSequence &Datums) const +Standard_Boolean XCAFDoc_DimTolTool::GetDatumOfTolerLabels(const TDF_Label& theDimTolL, + TDF_LabelSequence& theDatums) const { - Handle(XCAFDoc_GraphNode) Node; - if( !DimTolL.FindAttribute(XCAFDoc::DatumTolRefGUID(),Node) ) + Handle(XCAFDoc_GraphNode) aNode; + if( !theDimTolL.FindAttribute(XCAFDoc::DatumTolRefGUID(),aNode) ) return Standard_False; - for(Standard_Integer i=1; i<=Node->NbChildren(); i++) { - Handle(XCAFDoc_GraphNode) DatumNode = Node->GetChild(i); - Datums.Append(DatumNode->Label()); + for(Standard_Integer i=1; i<=aNode->NbChildren(); i++) { + Handle(XCAFDoc_GraphNode) aDatumNode = aNode->GetChild(i); + theDatums.Append(aDatumNode->Label()); + } + return Standard_True; +} + +//======================================================================= +//function : GetTolerDatumLabels +//purpose : +//======================================================================= + +Standard_Boolean XCAFDoc_DimTolTool::GetTolerOfDatumLabels(const TDF_Label& theDatumL, + TDF_LabelSequence& theTols) const +{ + Handle(XCAFDoc_GraphNode) aNode; + if( !theDatumL.FindAttribute(XCAFDoc::DatumTolRefGUID(),aNode) ) + return Standard_False; + for(Standard_Integer i=1; i<=aNode->NbFathers(); i++) { + Handle(XCAFDoc_GraphNode) aDatumNode = aNode->GetFather(i); + theTols.Append(aDatumNode->Label()); } return Standard_True; } @@ -505,5 +772,4 @@ Handle(TDF_Attribute) XCAFDoc_DimTolTool::NewEmpty() const void XCAFDoc_DimTolTool::Paste(const Handle(TDF_Attribute)& /*into*/, const Handle(TDF_RelocationTable)& /*RT*/) const { -} - +} \ No newline at end of file diff --git a/src/XCAFDoc/XCAFDoc_Dimension.cdl b/src/XCAFDoc/XCAFDoc_Dimension.cdl new file mode 100644 index 0000000000..3dcee0d275 --- /dev/null +++ b/src/XCAFDoc/XCAFDoc_Dimension.cdl @@ -0,0 +1,55 @@ +-- Created on: 2004-01-09 +-- Created by: Sergey KUUL +-- Copyright (c) 2004-2014 OPEN CASCADE SAS +-- +-- This file is part of Open CASCADE Technology software library. +-- +-- This library is free software; you can redistribute it and/or modify it under +-- the terms of the GNU Lesser General Public License version 2.1 as published +-- by the Free Software Foundation, with special exception defined in the file +-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +-- distribution for complete text of the license and disclaimer of any warranty. +-- +-- Alternatively, this file may be used under the terms of Open CASCADE +-- commercial license or contractual agreement. + +class Dimension from XCAFDoc inherits Attribute from TDF + + ---Purpose: attribute to store dimension + +uses + Label from TDF, + RelocationTable from TDF, + DimensionObject from XCAFDimTolObjects + +is + + Create returns Dimension from XCAFDoc; + + ---Category: class methods + -- ============= + + GetID (myclass) + ---C++: return const & + returns GUID from Standard; + + Set (myclass; theLabel : Label from TDF) + returns Dimension from XCAFDoc; + + ID (me) + ---C++: return const & + returns GUID from Standard; + + Restore (me: mutable; With : Attribute from TDF); + + NewEmpty (me) + returns Attribute from TDF; + + Paste (me; Into : Attribute from TDF; + RT : RelocationTable from TDF); + + SetObject (me : mutable; theDimensionObject : DimensionObject from XCAFDimTolObjects); + + GetObject (me) returns DimensionObject from XCAFDimTolObjects; + +end Dimension; diff --git a/src/XCAFDoc/XCAFDoc_Dimension.cxx b/src/XCAFDoc/XCAFDoc_Dimension.cxx new file mode 100644 index 0000000000..297a7c9491 --- /dev/null +++ b/src/XCAFDoc/XCAFDoc_Dimension.cxx @@ -0,0 +1,329 @@ +// Copyright (c) 1999-2014 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum ChildLab +{ + ChildLab_Type = 1, + ChildLab_Value, + ChildLab_Qualifier, + ChildLab_Class, + ChildLab_Dec, + ChildLab_Modifiers, + ChildLab_Path, + ChildLab_Dir, + ChildLab_Pnts +}; + +//======================================================================= +//function : XCAFDoc_Dimension +//purpose : +//======================================================================= + +XCAFDoc_Dimension::XCAFDoc_Dimension() +{ +} + + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= + +const Standard_GUID& XCAFDoc_Dimension::GetID() +{ + static Standard_GUID DGTID ("58ed092c-44de-11d8-8776-001083004c77"); + //static Standard_GUID ID("efd212e9-6dfd-11d4-b9c8-0060b0ee281b"); + return DGTID; + //return ID; +} + +//======================================================================= +//function : Set +//purpose : +//======================================================================= +Handle(XCAFDoc_Dimension) XCAFDoc_Dimension::Set(const TDF_Label& theLabel) +{ + Handle(XCAFDoc_Dimension) A; + if (!theLabel.FindAttribute(XCAFDoc_Dimension::GetID(), A)) { + A = new XCAFDoc_Dimension(); + theLabel.AddAttribute(A); + } + return A; +} + +//======================================================================= +//function : SetObject +//purpose : +//======================================================================= +void XCAFDoc_Dimension::SetObject (const Handle(XCAFDimTolObjects_DimensionObject)& theObject) +{ + Backup(); + + Handle(TDataStd_Integer) aType; + if(!Label().FindChild(ChildLab_Type).FindAttribute(TDataStd_Integer::GetID(), aType)) + { + aType = new TDataStd_Integer(); + Label().FindChild(ChildLab_Type).AddAttribute(aType); + } + aType->Set(theObject->GetType()); + + if(theObject->GetValues().IsNull()) + { + Label().FindChild(ChildLab_Value).ForgetAllAttributes(); + } + else + { + Handle(TDataStd_RealArray) aVal; + if(!Label().FindChild(ChildLab_Value).FindAttribute(TDataStd_RealArray::GetID(), aVal)) + { + aVal = new TDataStd_RealArray(); + Label().FindChild(ChildLab_Value).AddAttribute(aVal); + } + aVal->ChangeArray(theObject->GetValues()); + } + + Handle(TDataStd_Integer) aQualifier; + if(!Label().FindChild(ChildLab_Qualifier).FindAttribute(TDataStd_Integer::GetID(), aQualifier)) + { + aQualifier = new TDataStd_Integer(); + Label().FindChild(ChildLab_Qualifier).AddAttribute(aQualifier); + } + aQualifier->Set(theObject->GetQualifier()); + + Standard_Boolean aH; + XCAFDimTolObjects_DimensionFormVariance aF; + XCAFDimTolObjects_DimensionGrade aG; + theObject->GetClassOfTolerance(aH,aF,aG); + Handle(TDataStd_IntegerArray) aClass; + if(!Label().FindChild(ChildLab_Class).FindAttribute(TDataStd_IntegerArray::GetID(), aClass)) + { + aClass = new TDataStd_IntegerArray(); + Label().FindChild(ChildLab_Class).AddAttribute(aClass); + } + Handle(TColStd_HArray1OfInteger) anArrI = new TColStd_HArray1OfInteger(1,3); + anArrI->SetValue(1,aH); + anArrI->SetValue(2,aF); + anArrI->SetValue(3,aG); + aClass->ChangeArray(anArrI); + + Standard_Integer aL, aR; + theObject->GetNbOfDecimalPlaces(aL, aR); + Handle(TDataStd_IntegerArray) aDec; + if(!Label().FindChild(ChildLab_Dec).FindAttribute(TDataStd_IntegerArray::GetID(), aDec)) + { + aDec = new TDataStd_IntegerArray(); + Label().FindChild(ChildLab_Dec).AddAttribute(aDec); + } + anArrI = new TColStd_HArray1OfInteger(1,2); + anArrI->SetValue(1,aL); + anArrI->SetValue(2,aR); + aDec->ChangeArray(anArrI); + + if(theObject->GetModifiers().Length() == 0) + { + Label().FindChild(ChildLab_Modifiers).ForgetAllAttributes(); + } + else + { + Handle(TDataStd_IntegerArray) aModifiers; + if(!Label().FindChild(ChildLab_Modifiers).FindAttribute(TDataStd_IntegerArray::GetID(), aModifiers)) + { + aModifiers = new TDataStd_IntegerArray(); + Label().FindChild(ChildLab_Modifiers).AddAttribute(aModifiers); + } + anArrI = new TColStd_HArray1OfInteger(1,theObject->GetModifiers().Length()); + for(Standard_Integer i = 1; i <= theObject->GetModifiers().Length(); i++) + anArrI->SetValue(i,theObject->GetModifiers().Value(i)); + aModifiers->ChangeArray(anArrI); + } + + if(!theObject->GetPath().IsNull()) + { + TNaming_Builder tnBuild(Label().FindChild(ChildLab_Path)); + tnBuild.Generated(theObject->GetPath()); + } + else + { + Label().FindChild(ChildLab_Path).ForgetAllAttributes(); + } + + Handle(TDataStd_RealArray) aDir; + if(!Label().FindChild(ChildLab_Dir).FindAttribute(TDataStd_RealArray::GetID(), aDir)) + { + aDir = new TDataStd_RealArray(); + Label().FindChild(ChildLab_Dir).AddAttribute(aDir); + } + gp_Dir aD; + theObject->GetDirection(aD); + Handle(TColStd_HArray1OfReal) anArrR = new TColStd_HArray1OfReal(1,3); + anArrR->SetValue(1,aD.X()); + anArrR->SetValue(2,aD.Y()); + anArrR->SetValue(3,aD.Z()); + aDir->ChangeArray(anArrR); + + Handle(TDataStd_RealArray) aPnts; + if(!Label().FindChild(ChildLab_Pnts).FindAttribute(TDataStd_RealArray::GetID(), aPnts)) + { + aPnts = new TDataStd_RealArray(); + Label().FindChild(ChildLab_Pnts).AddAttribute(aPnts); + } + Handle(TColgp_HArray1OfPnt) aP = theObject->GetPoints(); + if(!aP.IsNull() && aP->Length() > 0) + { + anArrR = new TColStd_HArray1OfReal(1,6); + anArrR->SetValue(1,aP->Value(1).X()); + anArrR->SetValue(2,aP->Value(1).Y()); + anArrR->SetValue(3,aP->Value(1).Z()); + anArrR->SetValue(4,aP->Value(2).X()); + anArrR->SetValue(5,aP->Value(2).Y()); + anArrR->SetValue(6,aP->Value(2).Z()); + aPnts->ChangeArray(anArrR); + } +} + +//======================================================================= +//function : GetObject +//purpose : +//======================================================================= +Handle(XCAFDimTolObjects_DimensionObject) XCAFDoc_Dimension::GetObject() const +{ + Handle(XCAFDimTolObjects_DimensionObject) anObj = new XCAFDimTolObjects_DimensionObject(); + + Handle(TDataStd_Integer) aType; + if(Label().FindChild(ChildLab_Type).FindAttribute(TDataStd_Integer::GetID(), aType)) + { + anObj->SetType((XCAFDimTolObjects_DimensionType)aType->Get()); + } + + Handle(TDataStd_RealArray) aVal; + if(Label().FindChild(ChildLab_Value).FindAttribute(TDataStd_RealArray::GetID(), aVal) + && !aVal->Array().IsNull()) + { + anObj->SetValues(aVal->Array()); + } + + Handle(TDataStd_Integer) aQualifier; + if(Label().FindChild(ChildLab_Qualifier).FindAttribute(TDataStd_Integer::GetID(), aQualifier)) + { + anObj->SetQualifier((XCAFDimTolObjects_DimensionQualifier)aQualifier->Get()); + } + + Handle(TDataStd_IntegerArray) aClass; + if(Label().FindChild(ChildLab_Class).FindAttribute(TDataStd_IntegerArray::GetID(), aClass) + && !aClass->Array().IsNull() && aClass->Array()->Length() > 0) + { + anObj->SetClassOfTolerance(aClass->Array()->Value(1), (XCAFDimTolObjects_DimensionFormVariance)aClass->Array()->Value(2), (XCAFDimTolObjects_DimensionGrade)aClass->Array()->Value(3)); + } + + Handle(TDataStd_IntegerArray) aDec; + if(Label().FindChild(ChildLab_Dec).FindAttribute(TDataStd_IntegerArray::GetID(), aDec) + && !aDec->Array().IsNull() && aDec->Array()->Length() > 0) + { + anObj->SetNbOfDecimalPlaces(aDec->Array()->Value(1), aDec->Array()->Value(2)); + } + + Handle(TDataStd_IntegerArray) aModifiers; + if(Label().FindChild(ChildLab_Modifiers).FindAttribute(TDataStd_IntegerArray::GetID(), aModifiers) + && !aModifiers->Array().IsNull()) + { + XCAFDimTolObjects_DimensionModifiersSequence aM; + for(Standard_Integer i = 1; i <= aModifiers->Array()->Length(); i++) + aM.Append((XCAFDimTolObjects_DimensionModif)aModifiers->Array()->Value(i)); + anObj->SetModifiers(aM); + } + + Handle(TNaming_NamedShape) aShape; + if(Label().FindChild(ChildLab_Path).FindAttribute(TNaming_NamedShape::GetID(), aShape) + && !aShape.IsNull()) + { + anObj->SetPath(TopoDS::Edge(aShape->Get())); + } + + + Handle(TDataStd_RealArray) aDir; + if(Label().FindChild(ChildLab_Dir).FindAttribute(TDataStd_RealArray::GetID(), aDir) + && !aDir->Array().IsNull() && aDir->Array()->Length() > 0) + { + gp_Dir aD(aDir->Array()->Value(1), aDir->Array()->Value(2), aDir->Array()->Value(3)); + anObj->SetDirection(aD); + } + + Handle(TDataStd_RealArray) aPnts; + if(Label().FindChild(ChildLab_Pnts).FindAttribute(TDataStd_RealArray::GetID(), aPnts) + && !aPnts->Array().IsNull() && aPnts->Array()->Length() > 0) + { + Handle(TColgp_HArray1OfPnt) aP = new TColgp_HArray1OfPnt(1,2); + aP->SetValue(1, gp_Pnt(aPnts->Array()->Value(1), aPnts->Array()->Value(2), aPnts->Array()->Value(3))); + aP->SetValue(2, gp_Pnt(aPnts->Array()->Value(4), aPnts->Array()->Value(5), aPnts->Array()->Value(6))); + anObj->SetPoints(aP); + } + + return anObj; +} + +//======================================================================= +//function : ID +//purpose : +//======================================================================= + +const Standard_GUID& XCAFDoc_Dimension::ID() const +{ + return GetID(); +} + +//======================================================================= +//function : Restore +//purpose : +//======================================================================= + +void XCAFDoc_Dimension::Restore(const Handle(TDF_Attribute)& /*With*/) +{ +} + + +//======================================================================= +//function : NewEmpty +//purpose : +//======================================================================= + +Handle(TDF_Attribute) XCAFDoc_Dimension::NewEmpty() const +{ + return new XCAFDoc_Dimension(); +} + + +//======================================================================= +//function : Paste +//purpose : +//======================================================================= + +void XCAFDoc_Dimension::Paste(const Handle(TDF_Attribute)& /*Into*/, + const Handle(TDF_RelocationTable)& /*RT*/) const +{ +} diff --git a/src/XCAFDoc/XCAFDoc_GeomTolerance.cdl b/src/XCAFDoc/XCAFDoc_GeomTolerance.cdl new file mode 100644 index 0000000000..68bc386f5d --- /dev/null +++ b/src/XCAFDoc/XCAFDoc_GeomTolerance.cdl @@ -0,0 +1,58 @@ +-- Created on: 2004-01-09 +-- Created by: Sergey KUUL +-- Copyright (c) 2004-2014 OPEN CASCADE SAS +-- +-- This file is part of Open CASCADE Technology software library. +-- +-- This library is free software; you can redistribute it and/or modify it under +-- the terms of the GNU Lesser General Public License version 2.1 as published +-- by the Free Software Foundation, with special exception defined in the file +-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +-- distribution for complete text of the license and disclaimer of any warranty. +-- +-- Alternatively, this file may be used under the terms of Open CASCADE +-- commercial license or contractual agreement. + +class GeomTolerance from XCAFDoc inherits Attribute from TDF + + ---Purpose: attribute to store dimension and tolerance + +uses + Label from TDF, + RelocationTable from TDF, + GeomToleranceObject from XCAFDimTolObjects + +is + + Create returns GeomTolerance from XCAFDoc; + + Create(theObj : GeomTolerance from XCAFDoc) returns GeomTolerance from XCAFDoc; + + ---Category: class methods + -- ============= + + GetID (myclass) + ---C++: return const & + returns GUID from Standard; + + Set (myclass; theLabel : Label from TDF) + returns GeomTolerance from XCAFDoc; + + SetObject (me : mutable; theObject : GeomToleranceObject from XCAFDimTolObjects); + + GetObject (me) returns GeomToleranceObject from XCAFDimTolObjects; + + ID (me) + ---C++: return const & + returns GUID from Standard; + + Restore (me: mutable; With : Attribute from TDF); + + NewEmpty (me) + returns Attribute from TDF; + + Paste (me; Into : Attribute from TDF; + RT : RelocationTable from TDF); + + +end GeomTolerance; diff --git a/src/XCAFDoc/XCAFDoc_GeomTolerance.cxx b/src/XCAFDoc/XCAFDoc_GeomTolerance.cxx new file mode 100644 index 0000000000..e784520040 --- /dev/null +++ b/src/XCAFDoc/XCAFDoc_GeomTolerance.cxx @@ -0,0 +1,261 @@ +// Copyright (c) 1999-2014 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +#include +#include +#include +#include +#include +#include + +enum ChildLab +{ + ChildLab_Type = 1, + ChildLab_TypeOfValue, + ChildLab_Value, + ChildLab_MatReqModif, + ChildLab_ZoneModif, + ChildLab_ValueOfZoneModif, + ChildLab_Modifiers, + ChildLab_aMaxValueModif +}; + +//======================================================================= +//function : XCAFDoc_GeomTolerance +//purpose : +//======================================================================= + +XCAFDoc_GeomTolerance::XCAFDoc_GeomTolerance() +{ +} + + +//======================================================================= +//function : GetID +//purpose : +//======================================================================= + +const Standard_GUID& XCAFDoc_GeomTolerance::GetID() +{ + static Standard_GUID DGTID ("58ed092f-44de-11d8-8776-001083004c77"); + //static Standard_GUID ID("efd212e9-6dfd-11d4-b9c8-0060b0ee281b"); + return DGTID; + //return ID; +} + +//======================================================================= +//function : +//purpose : +//======================================================================= + +Handle(XCAFDoc_GeomTolerance) XCAFDoc_GeomTolerance::Set (const TDF_Label& theLabel) +{ + Handle(XCAFDoc_GeomTolerance) A; + if (!theLabel.FindAttribute(XCAFDoc_GeomTolerance::GetID(), A)) { + A = new XCAFDoc_GeomTolerance(); + theLabel.AddAttribute(A); + } + return A; +} + +//======================================================================= +//function : SetObject +//purpose : +//======================================================================= + +void XCAFDoc_GeomTolerance::SetObject (const Handle(XCAFDimTolObjects_GeomToleranceObject)& theObject) +{ + Backup(); + + Handle(TDataStd_Integer) aType; + if(!Label().FindChild(ChildLab_Type).FindAttribute(TDataStd_Integer::GetID(), aType)) + { + aType = new TDataStd_Integer(); + Label().FindChild(ChildLab_Type).AddAttribute(aType); + } + aType->Set(theObject->GetType()); + + Handle(TDataStd_Integer) aTypeOfValue; + if(!Label().FindChild(ChildLab_TypeOfValue).FindAttribute(TDataStd_Integer::GetID(), aTypeOfValue)) + { + aTypeOfValue = new TDataStd_Integer(); + Label().FindChild(ChildLab_TypeOfValue).AddAttribute(aTypeOfValue); + } + aTypeOfValue->Set(theObject->GetTypeOfValue()); + + Handle(TDataStd_Real) aValue; + if(!Label().FindChild(ChildLab_Value).FindAttribute(TDataStd_Real::GetID(), aValue)) + { + aValue = new TDataStd_Real(); + Label().FindChild(ChildLab_Value).AddAttribute(aValue); + } + aValue->Set(theObject->GetValue()); + + Handle(TDataStd_Integer) aMatReqModif; + if(!Label().FindChild(ChildLab_MatReqModif).FindAttribute(TDataStd_Integer::GetID(), aMatReqModif)) + { + aMatReqModif = new TDataStd_Integer(); + Label().FindChild(ChildLab_MatReqModif).AddAttribute(aMatReqModif); + } + aMatReqModif->Set(theObject->GetMaterialRequirementModifier()); + + Handle(TDataStd_Integer) aZoneModif; + if(!Label().FindChild(ChildLab_ZoneModif).FindAttribute(TDataStd_Integer::GetID(), aZoneModif)) + { + aZoneModif = new TDataStd_Integer(); + Label().FindChild(ChildLab_ZoneModif).AddAttribute(aZoneModif); + } + aZoneModif->Set(theObject->GetZoneModifier()); + + Handle(TDataStd_Real) aValueOfZoneModif; + if(!Label().FindChild(ChildLab_ValueOfZoneModif).FindAttribute(TDataStd_Real::GetID(), aValueOfZoneModif)) + { + aValueOfZoneModif = new TDataStd_Real(); + Label().FindChild(ChildLab_ValueOfZoneModif).AddAttribute(aValueOfZoneModif); + } + aValueOfZoneModif->Set(theObject->GetValueOfZoneModifier()); + + if(theObject->GetModifiers().Length() == 0) + { + Label().FindChild(ChildLab_Modifiers).ForgetAllAttributes(); + } + else + { + Handle(TDataStd_IntegerArray) aModifiers; + if(!Label().FindChild(ChildLab_Modifiers).FindAttribute(TDataStd_IntegerArray::GetID(), aModifiers) + || theObject->GetModifiers().Length() == 0) + { + aModifiers = new TDataStd_IntegerArray(); + Label().FindChild(ChildLab_Modifiers).AddAttribute(aModifiers); + } + Handle(TColStd_HArray1OfInteger) anArr = new TColStd_HArray1OfInteger(1,theObject->GetModifiers().Length()); + for(Standard_Integer i = 1; i <= theObject->GetModifiers().Length(); i++) + anArr->SetValue(i,theObject->GetModifiers().Value(i)); + aModifiers->ChangeArray(anArr); + } + + Handle(TDataStd_Real) aMaxValueModif; + if(!Label().FindChild(ChildLab_aMaxValueModif).FindAttribute(TDataStd_Real::GetID(), aMaxValueModif)) + { + aMaxValueModif = new TDataStd_Real(); + Label().FindChild(ChildLab_aMaxValueModif).AddAttribute(aMaxValueModif); + } + aMaxValueModif->Set(theObject->GetMaxValueModifier()); +} + +//======================================================================= +//function :GetObject +//purpose : +//======================================================================= + +Handle(XCAFDimTolObjects_GeomToleranceObject) XCAFDoc_GeomTolerance::GetObject() const +{ + Handle(XCAFDimTolObjects_GeomToleranceObject) anObj = new XCAFDimTolObjects_GeomToleranceObject(); + + Handle(TDataStd_Integer) aType; + if(Label().FindChild(ChildLab_Type).FindAttribute(TDataStd_Integer::GetID(), aType)) + { + anObj->SetType((XCAFDimTolObjects_GeomToleranceType)aType->Get()); + } + + Handle(TDataStd_Integer) aTypeOfValue; + if(Label().FindChild(ChildLab_TypeOfValue).FindAttribute(TDataStd_Integer::GetID(), aTypeOfValue)) + { + anObj->SetTypeOfValue((XCAFDimTolObjects_GeomToleranceTypeValue)aTypeOfValue->Get()); + } + + Handle(TDataStd_Real) aValue; + if(Label().FindChild(ChildLab_Value).FindAttribute(TDataStd_Real::GetID(), aValue)) + { + anObj->SetValue(aValue->Get()); + } + + Handle(TDataStd_Integer) aMatReqModif; + if(Label().FindChild(ChildLab_MatReqModif).FindAttribute(TDataStd_Integer::GetID(), aMatReqModif)) + { + anObj->SetMaterialRequirementModifier((XCAFDimTolObjects_GeomToleranceMatReqModif)aMatReqModif->Get()); + } + + Handle(TDataStd_Integer) aZoneModif; + if(Label().FindChild(ChildLab_ZoneModif).FindAttribute(TDataStd_Integer::GetID(), aZoneModif)) + { + anObj->SetZoneModifier((XCAFDimTolObjects_GeomToleranceZoneModif)aZoneModif->Get()); + } + + Handle(TDataStd_Real) aValueOfZoneModif; + if(Label().FindChild(ChildLab_ValueOfZoneModif).FindAttribute(TDataStd_Real::GetID(), aValueOfZoneModif)) + { + anObj->SetValueOfZoneModifier(aValueOfZoneModif->Get()); + } + + Handle(TDataStd_IntegerArray) anArr; + if(Label().FindChild(ChildLab_Modifiers).FindAttribute(TDataStd_IntegerArray::GetID(), anArr) + && !anArr->Array().IsNull()) + { + XCAFDimTolObjects_GeomToleranceModifiersSequence aModifiers; + for(Standard_Integer i = 1; i <= anArr->Length(); i++) + aModifiers.Append((XCAFDimTolObjects_GeomToleranceModif)anArr->Value(i)); + anObj->SetModifiers(aModifiers); + } + + Handle(TDataStd_Real) aMaxValueModif; + if(Label().FindChild(ChildLab_aMaxValueModif).FindAttribute(TDataStd_Real::GetID(), aMaxValueModif)) + { + anObj->SetMaxValueModifier(aMaxValueModif->Get()); + } + + return anObj; +} + +//======================================================================= +//function : ID +//purpose : +//======================================================================= + +const Standard_GUID& XCAFDoc_GeomTolerance::ID() const +{ + return GetID(); +} + +//======================================================================= +//function : Restore +//purpose : +//======================================================================= + +void XCAFDoc_GeomTolerance::Restore(const Handle(TDF_Attribute)& /*With*/) +{ +} + + +//======================================================================= +//function : NewEmpty +//purpose : +//======================================================================= + +Handle(TDF_Attribute) XCAFDoc_GeomTolerance::NewEmpty() const +{ + return new XCAFDoc_GeomTolerance(); +} + + +//======================================================================= +//function : Paste +//purpose : +//======================================================================= + +void XCAFDoc_GeomTolerance::Paste(const Handle(TDF_Attribute)& /*Into*/, + const Handle(TDF_RelocationTable)& /*RT*/) const +{ +} diff --git a/src/XDEDRAW/XDEDRAW.cdl b/src/XDEDRAW/XDEDRAW.cdl index 066ec710ac..735b1b226b 100644 --- a/src/XDEDRAW/XDEDRAW.cdl +++ b/src/XDEDRAW/XDEDRAW.cdl @@ -28,6 +28,8 @@ is class Layers; + class GDTs; + class Props; class Common; diff --git a/src/XDEDRAW/XDEDRAW.cxx b/src/XDEDRAW/XDEDRAW.cxx index eef41eee5d..b5f696ae40 100644 --- a/src/XDEDRAW/XDEDRAW.cxx +++ b/src/XDEDRAW/XDEDRAW.cxx @@ -75,6 +75,7 @@ #include #include +#include #include #include #include @@ -600,8 +601,6 @@ static Standard_Integer XAttributeValue (Draw_Interpretor& di, Standard_Integer else if ( att->ID() == XCAFDoc::ColorRefGUID(XCAFDoc_ColorGen) ) type = "Generic Color Link"; else if ( att->ID() == XCAFDoc::ColorRefGUID(XCAFDoc_ColorSurf) ) type = "Surface Color Link"; else if ( att->ID() == XCAFDoc::ColorRefGUID(XCAFDoc_ColorCurv) ) type = "Curve Color Link"; - else if ( att->ID() == XCAFDoc::DimTolRefGUID() ) type = "DGT Link"; - else if ( att->ID() == XCAFDoc::DatumRefGUID() ) type = "Datum Link"; else if ( att->ID() == XCAFDoc::MaterialRefGUID() ) type = "Material Link"; Handle(TDataStd_TreeNode) TN = Handle(TDataStd_TreeNode)::DownCast(att); TCollection_AsciiString ref; @@ -768,6 +767,12 @@ static Standard_Integer XAttributeValue (Draw_Interpretor& di, Standard_Integer else if ( att->ID() == XCAFDoc::DatumTolRefGUID() ) { type = "DatumToler Link"; } + else if ( att->ID() == XCAFDoc::DimTolRefGUID() ){ + type = "DGT Link"; + } + else if ( att->ID() == XCAFDoc::DatumRefGUID() ){ + type = "Datum Link"; + } else return 0; Handle(XCAFDoc_GraphNode) DETGN = Handle(XCAFDoc_GraphNode)::DownCast(att); @@ -1140,6 +1145,7 @@ void XDEDRAW::Init(Draw_Interpretor& di) XDEDRAW_Colors::InitCommands ( di ); XDEDRAW_Layers::InitCommands ( di ); XDEDRAW_Props::InitCommands ( di ); + XDEDRAW_GDTs::InitCommands ( di ); XDEDRAW_Common::InitCommands ( di );//moved from EXE } diff --git a/src/XDEDRAW/XDEDRAW_GDTs.cdl b/src/XDEDRAW/XDEDRAW_GDTs.cdl new file mode 100644 index 0000000000..737bfae5ce --- /dev/null +++ b/src/XDEDRAW/XDEDRAW_GDTs.cdl @@ -0,0 +1,27 @@ +-- Created on: 2015-06-18 +-- Created by: Ilya Novikov +-- Copyright (c) 2000-2015 OPEN CASCADE SAS +-- +-- This file is part of Open CASCADE Technology software library. +-- +-- This library is free software; you can redistribute it and/or modify it under +-- the terms of the GNU Lesser General Public License version 2.1 as published +-- by the Free Software Foundation, with special exception defined in the file +-- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +-- distribution for complete text of the license and disclaimer of any warranty. +-- +-- Alternatively, this file may be used under the terms of Open CASCADE +-- commercial license or contractual agreement. + +class GDTs from XDEDRAW + + ---Purpose: Contains commands to work with G&DTs + +uses + Interpretor from Draw + +is + + InitCommands (myclass; theCommands: in out Interpretor from Draw); + +end GDTs; diff --git a/src/XDEDRAW/XDEDRAW_GDTs.cxx b/src/XDEDRAW/XDEDRAW_GDTs.cxx new file mode 100644 index 0000000000..696fa19a3a --- /dev/null +++ b/src/XDEDRAW/XDEDRAW_GDTs.cxx @@ -0,0 +1,2209 @@ +// Created on: 2015-06-18 +// Created by: Ilya Novikov +// Copyright (c) 2000-2015 OPEN CASCADE SAS +// +// This file is part of Open CASCADE Technology software library. +// +// This library is free software; you can redistribute it and/or modify it under +// the terms of the GNU Lesser General Public License version 2.1 as published +// by the Free Software Foundation, with special exception defined in the file +// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT +// distribution for complete text of the license and disclaimer of any warranty. +// +// Alternatively, this file may be used under the terms of Open CASCADE +// commercial license or contractual agreement. + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + + + +static Standard_Integer DumpDGTs (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XDumpDGTs Doc shape/label/all\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool= XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TCollection_AsciiString name = argv[2]; + TDF_LabelSequence aLabels; + if(name.IsEqual("all")) + { + aShapeTool->GetShapes(aLabels); + for ( Standard_Integer i=1; i <= aLabels.Length(); i++ ) + { + aShapeTool->GetSubShapes(aLabels.Value(i), aLabels); + } + } + else + { + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( !aLabel.IsNull() ) { + aLabels.Append(aLabel); + aShapeTool->GetSubShapes(aLabel, aLabels); + } + else + { + TopoDS_Shape aShape= DBRep::Get(argv[2]); + if ( !aShape.IsNull() ) + { + aShapeTool->Search(aShape, aLabel); + if ( !aLabel.IsNull() ) { + aLabels.Append(aLabel); + aShapeTool->GetSubShapes(aLabel, aLabels); + } + else + { + di<<"Shape "<GetRefDimensionLabels(aLabels.Value(i), aGDTs); + for ( Standard_Integer j=1; j <= aGDTs.Length(); j++ ) + { + Handle(XCAFDoc_Dimension) aDimTol; + if(aGDTs.Value(j).FindAttribute(XCAFDoc_Dimension::GetID(), aDimTol)) + { + Handle(XCAFDimTolObjects_DimensionObject) aDimTolObj = aDimTol->GetObject(); + if(flag) + { + TCollection_AsciiString Entry; + TDF_Tool::Entry(aLabels.Value(i), Entry); + di << "\n " << Entry; + flag = Standard_False; + } + TCollection_AsciiString Entry; + TDF_Tool::Entry(aGDTs.Value(j), Entry); + di << "\n \t " << Entry; + flag = Standard_False; + + di << " Dimension"; + } + } + aGDTs.Clear(); + aDimTolTool->GetRefGeomToleranceLabels(aLabels.Value(i), aGDTs); + for ( Standard_Integer j=1; j <= aGDTs.Length(); j++ ) + { + Handle(XCAFDoc_GeomTolerance) aDimTol; + if(aGDTs.Value(j).FindAttribute(XCAFDoc_GeomTolerance::GetID(), aDimTol)) + { + Handle(XCAFDimTolObjects_GeomToleranceObject) aDimTolObj = aDimTol->GetObject(); + if(flag) + { + TCollection_AsciiString Entry; + TDF_Tool::Entry(aLabels.Value(i), Entry); + di << "\n " << Entry; + flag = Standard_False; + } + TCollection_AsciiString Entry; + TDF_Tool::Entry(aGDTs.Value(j), Entry); + di << "\n \t " << Entry; + flag = Standard_False; + + di << " GeomTolerance"; + Handle(XCAFDoc_GraphNode) aNode; + if(aGDTs.Value(j).FindAttribute(XCAFDoc::DatumTolRefGUID(), aNode) && aNode->NbChildren() > 0) + { + for(Standard_Integer i = 1; i<=aNode->NbChildren(); i++) + { + Handle(XCAFDoc_Datum) aDatum; + if(aNode->GetChild(i)->Label().FindAttribute(XCAFDoc_Datum::GetID(), aDatum)) + { + TCollection_AsciiString Entry; + TDF_Tool::Entry(aNode->GetChild(i)->Label(), Entry); + di << "\n \t \t " << Entry; + di << " Datum"; + } + } + } + } + } + TDF_Label aDatumL; + if (aDimTolTool->GetRefDatumLabel(aLabels.Value(i), aDatumL)) + { + Handle(XCAFDoc_Datum) aDatum; + if(aDatumL.FindAttribute(XCAFDoc_Datum::GetID(), aDatum)) + { + if(flag) + { + TCollection_AsciiString Entry; + TDF_Tool::Entry(aLabels.Value(i), Entry); + di << "\n " << Entry; + flag = Standard_False; + } + TCollection_AsciiString Entry; + TDF_Tool::Entry(aDatumL, Entry); + di << "\n \t " << Entry; + flag = Standard_False; + + di << " Datum"; + } + } + } + return 0; +} + +static Standard_Integer addDim (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XAddDimension Doc shape/label [shape/label]\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + TopoDS_Shape aShape= DBRep::Get(argv[2]); + if ( !aShape.IsNull() ) + { + aShapeTool->Search(aShape, aLabel); + if ( aLabel.IsNull() ) + { + di<<"Shape "<GetData(), argv[3], aLabel1); + if ( aLabel1.IsNull() ) + { + TopoDS_Shape aShape= DBRep::Get(argv[3]); + if ( !aShape.IsNull() ) + { + aShapeTool->Search(aShape, aLabel1); + if ( aLabel1.IsNull() ) + { + di<<"Shape "<AddDimension(); + if(aLabel1.IsNull()) + aDimTolTool->SetDimension(aLabel, aDimL); + else + aDimTolTool->SetDimension(aLabel, aLabel1, aDimL); + TCollection_AsciiString Entry; + TDF_Tool::Entry(aDimL, Entry); + di << Entry; + return 0; +} + +static Standard_Integer addGTol (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XAddGeomTolerance Doc shape/label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + TopoDS_Shape aShape= DBRep::Get(argv[2]); + if ( !aShape.IsNull() ) + { + aShapeTool->Search(aShape, aLabel); + if ( aLabel.IsNull() ) + { + di<<"Shape "<AddGeomTolerance(); + aDimTolTool->SetGeomTolerance(aLabel, aTolL); + TCollection_AsciiString Entry; + TDF_Tool::Entry(aTolL, Entry); + di << Entry; + return 0; +} + +static Standard_Integer addDatum (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XAddDatum Doc shape/label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + TopoDS_Shape aShape= DBRep::Get(argv[2]); + if ( !aShape.IsNull() ) + { + aShapeTool->Search(aShape, aLabel); + if ( aLabel.IsNull() ) + { + di<<"Shape "<AddDatum(); + aDimTolTool->SetDatum(aLabel, aDatumL); + TCollection_AsciiString Entry; + TDF_Tool::Entry(aDatumL, Entry); + di << Entry; + return 0; +} + +static Standard_Integer setDatum (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetDatum Doc Datum_Label GeomTol_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Datum "<GetData(), argv[3], aTol); + if ( aTol.IsNull() ) + { + di<<"GeomTolerance "<SetDatumToGeomTol(aLabel, aTol); + return 0; +} + +static Standard_Integer getDatum (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDatum Doc GeomTol_Label/Shape_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Label "<GetRefDatumLabel(aLabel, aD)) + { + TDF_LabelSequence aDS; + if(aDimTolTool->GetDatumOfTolerLabels(aLabel, aDS)) + { + for(Standard_Integer i = 1; i<=aDS.Length();i++) + { + if(i>1) di<<", "; + TCollection_AsciiString Entry; + TDF_Tool::Entry(aDS.Value(i), Entry); + di<Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Datum "< -1) + { + Handle(XCAFDimTolObjects_DatumObject) anObj = aDatum->GetObject(); + anObj->AddModifier((XCAFDimTolObjects_DatumSingleModif)Draw::Atoi(argv[i])); + aDatum->SetObject(anObj); + } + } + } + return 0; +} + +static Standard_Integer getDatumModif (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDatumModifiers Doc Datum_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Datum "<GetObject()->GetModifiers(); + for(Standard_Integer i = 1; i<=aS.Length();i++) + { + if (i > 1) di<<", "; + switch(aS.Value(i)){ + case 0 : di<<"AnyCrossSection"; break; + case 1 : di<<"AnyLongitudinalSection"; break; + case 2 : di<<"Basic"; break; + case 3 : di<<"ContactingFeature\n"; break; + case 4 : di<<"DegreeOfFreedomConstraintU"; break; + case 5 : di<<"DegreeOfFreedomConstraintV"; break; + case 6 : di<<"DegreeOfFreedomConstraintW"; break; + case 7 : di<<"DegreeOfFreedomConstraintX"; break; + case 8 : di<<"DegreeOfFreedomConstraintY"; break; + case 9 : di<<"DegreeOfFreedomConstraintZ"; break; + case 10 : di<<"DistanceVariable"; break; + case 11 : di<<"FreeState"; break; + case 12 : di<<"LeastMaterialRequirement"; break; + case 13 : di<<"Line"; break; + case 14 : di<<"MajorDiameter"; break; + case 15 : di<<"MaximumMaterialRequirement"; break; + case 16 : di<<"MinorDiameter"; break; + case 17 : di<<"Orientation"; break; + case 18 : di<<"PitchDiameter"; break; + case 19 : di<<"Plane"; break; + case 20 : di<<"Point"; break; + case 21 : di<<"Translation"; break; + default : break; + } + } + } + return 0; +} + +static Standard_Integer setDatumName (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetDatumName Doc Datum_Label name\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Datum "<GetObject(); + anObj->SetName(new TCollection_HAsciiString(argv[3])); + aDatum->SetObject(anObj); + } + return 0; +} + +static Standard_Integer getDatumName (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDatumName Doc Datum_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Datum "<GetObject()->GetName()->ToCString(); + } + return 0; +} + +static Standard_Integer setTypeOfTol (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetTypeOfTolerance Doc GTol_Label type\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "< -1 && Draw::Atoi(argv[3]) < 16) + { + Handle(XCAFDimTolObjects_GeomToleranceObject) anObj = aGeomTolerance->GetObject(); + anObj->SetType((XCAFDimTolObjects_GeomToleranceType)Draw::Atoi(argv[3])); + aGeomTolerance->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer getTypeOfTol (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetTypeOfTolerance Doc GTol_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject()->GetType()){ + case 0 : di<<"type is absent"; break; + case 1 : di<<"Angularity"; break; + case 2 : di<<"CircularRunout"; break; + case 3 : di<<"CircularityOrRoundness"; break; + case 4 : di<<"Coaxiality"; break; + case 5 : di<<"Concentricity"; break; + case 6 : di<<"Cylindricity"; break; + case 7 : di<<"Flatness"; break; + case 8 : di<<"Parallelism"; break; + case 9 : di<<"Perpendicularity"; break; + case 10 : di<<"Position"; break; + case 11 : di<<"ProfileOfLine"; break; + case 12 : di<<"ProfileOfSurface"; break; + case 13 : di<<"Straightness"; break; + case 14 : di<<"Symmetry"; break; + case 15 : di<<"TotalRunout"; break; + default : break; + } + } + return 0; +} + +static Standard_Integer setTypeOfTolVal (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetTypeOfToleranceValue Doc GTol_Label type\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "< -1 && Draw::Atoi(argv[3]) < 3) + { + Handle(XCAFDimTolObjects_GeomToleranceObject) anObj = aGeomTolerance->GetObject(); + anObj->SetTypeOfValue((XCAFDimTolObjects_GeomToleranceTypeValue)Draw::Atoi(argv[3])); + aGeomTolerance->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer getTypeOfTolVal (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetTypeOfToleranceValue Doc GTol_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject()->GetTypeOfValue()){ + case 0 : di<<"type is absent"; break; + case 1 : di<<"Diameter"; break; + case 2 : di<<"SphericalDiameter"; break; + default : break; + } + } + return 0; +} + +static Standard_Integer setTolVal (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetToleranceValue Doc GTol_Label value\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject(); + anObj->SetValue(Draw::Atof(argv[3])); + aGeomTolerance->SetObject(anObj); + } + return 0; +} + +static Standard_Integer getTolVal (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetToleranceValue Doc GTol_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject()->GetValue(); + } + return 0; +} + +static Standard_Integer setMatReq (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetTolMaterialReq Doc GTol_Label mod\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "< -1 && Draw::Atoi(argv[3]) < 3) + { + Handle(XCAFDimTolObjects_GeomToleranceObject) anObj = aGeomTolerance->GetObject(); + anObj->SetMaterialRequirementModifier((XCAFDimTolObjects_GeomToleranceMatReqModif)Draw::Atoi(argv[3])); + aGeomTolerance->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer getMatReq (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetTolMaterialReq Doc GTol_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject()->GetMaterialRequirementModifier()){ + case 0 : di<<"modifier is absent"; break; + case 1 : di<<"M"; break; + case 2 : di<<"L"; break; + default : break; + } + } + return 0; +} + +static Standard_Integer setZoneMod (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetTolZoneMod Doc GTol_Label mod\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "< -1 && Draw::Atoi(argv[3]) < 3) + { + Handle(XCAFDimTolObjects_GeomToleranceObject) anObj = aGeomTolerance->GetObject(); + anObj->SetZoneModifier((XCAFDimTolObjects_GeomToleranceZoneModif)Draw::Atoi(argv[3])); + aGeomTolerance->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer getZoneMod (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetTolZoneMod Doc GTol_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject()->GetZoneModifier()){ + case 0 : di<<"modifier is absent"; break; + case 1 : di<<"P"; break; + case 2 : di<<"NonUniform"; break; + default : break; + } + } + return 0; +} + +static Standard_Integer setZoneModVal (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetTolZoneModValue Doc GTol_Label val\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject(); + anObj->SetValueOfZoneModifier(Draw::Atof(argv[3])); + aGeomTolerance->SetObject(anObj); + } + return 0; +} + +static Standard_Integer getZoneModVal (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetTolZoneModValue Doc GTol_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject()->GetValueOfZoneModifier(); + } + return 0; +} + +static Standard_Integer addTolModif (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XAddTolModifier Doc Tol_Label mod1 mod2 ...\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "< -1 && Draw::Atoi(argv[i]) < 15) + { + Handle(XCAFDimTolObjects_GeomToleranceObject) anObj = aGeomTolerance->GetObject(); + anObj->AddModifier((XCAFDimTolObjects_GeomToleranceModif)Draw::Atoi(argv[i])); + aGeomTolerance->SetObject(anObj); + } + } + } + return 0; +} + +static Standard_Integer getTolModif (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetTolModifiers Doc Tol_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject()->GetModifiers(); + for(Standard_Integer i = 1; i <= aS.Length(); i++) + { + if (i > 1) di<<", "; + switch(aS.Value(i)){ + case 0 : di<<"Any_Cross_Section"; break; + case 1 : di<<"Common_Zone"; break; + case 2 : di<<"Each_Radial_Element"; break; + case 3 : di<<"Free_State"; break; + case 4 : di<<"Least_Material_Requirement"; break; + case 5 : di<<"Line_Element"; break; + case 6 : di<<"Major_Diameter"; break; + case 7 : di<<"Maximum_Material_Requirement"; break; + case 8 : di<<"Minor_Diameter"; break; + case 9 : di<<"Not_Convex"; break; + case 10 : di<<"Pitch_Diameter"; break; + case 11 : di<<"Reciprocity_Requirement"; break; + case 12 : di<<"Separate_Requirement"; break; + case 13 : di<<"Statistical_Tolerance"; break; + case 14 : di<<"Tangent_Plane"; break; + default : break; + } + } + } + return 0; +} + +static Standard_Integer setTolMaxVal (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetTolMaxValue Doc Dim_Label val\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject(); + anObj->SetMaxValueModifier(Draw::Atof(argv[3])); + aGeomTolerance->SetObject(anObj); + } + return 0; +} + +static Standard_Integer getTolMaxVal (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetTolMaxValue Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"GeomTolerance "<GetObject()->GetMaxValueModifier(); + } + return 0; +} + +static Standard_Integer setDimType (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetDimensionType Doc Dim_Label type\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "< -1 && Draw::Atoi(argv[3]) < 30) + { + Handle(XCAFDimTolObjects_DimensionObject) anObj = aDimension->GetObject(); + anObj->SetType((XCAFDimTolObjects_DimensionType)Draw::Atoi(argv[3])); + aDimension->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer getDimType (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDimensionType Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject()->GetType()){ + case 0 : di<<"type is absent"; break; + case 1 : di<<"Location_CurvedDistance"; break; + case 2 : di<<"Location_LinearDistance"; break; + case 3 : di<<"Location_LinearDistance_FromCenterToOuter"; break; + case 4 : di<<"Location_LinearDistance_FromCenterToInner"; break; + case 5 : di<<"Location_LinearDistance_FromOuterToCenter"; break; + case 6 : di<<"Location_LinearDistance_FromOuterToOuter"; break; + case 7 : di<<"Location_LinearDistance_FromOuterToInner"; break; + case 8 : di<<"Location_LinearDistance_FromInnerToCenter"; break; + case 9 : di<<"Location_LinearDistance_FromInnerToOuter"; break; + case 10 : di<<"Location_LinearDistance_FromInnerToInner"; break; + case 11 : di<<"Location_Angular"; break; + case 12 : di<<"Location_Oriented"; break; + case 13 : di<<"Location_WithPath"; break; + case 14 : di<<"Size_CurveLength"; break; + case 15 : di<<"Size_Diameter"; break; + case 16 : di<<"Size_SphericalDiameter"; break; + case 17 : di<<"Size_Radius"; break; + case 18 : di<<"Size_SphericalRadius"; break; + case 19 : di<<"Size_ToroidalMinorDiameter"; break; + case 20 : di<<"Size_ToroidalMajorDiameter"; break; + case 21 : di<<"Size_ToroidalMinorRadius"; break; + case 22 : di<<"Size_ToroidalMajorRadius"; break; + case 23 : di<<"Size_ToroidalHighMajorDiameter"; break; + case 24 : di<<"Size_ToroidalLowMajorDiameter"; break; + case 25 : di<<"Size_ToroidalHighMajorRadius"; break; + case 26 : di<<"Size_ToroidalLowMajorRadius"; break; + case 27 : di<<"Size_Thickness"; break; + case 28 : di<<"Size_Angular"; break; + case 29 : di<<"Size_WithPath"; break; + default : break; + } + } + return 0; +} + +static Standard_Integer setDimVal (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetDimensionValue Doc Dim_Label val\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject(); + anObj->SetValue(Draw::Atof(argv[3])); + aDimension->SetObject(anObj); + } + return 0; +} + +static Standard_Integer getDimVal (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDimensionValue Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject()->GetValue(); + } + return 0; +} + +static Standard_Integer setDimQalif (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetDimensionQualifier Doc Dim_Label val\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "< -1 && Draw::Atoi(argv[3]) < 4) + { + Handle(XCAFDimTolObjects_DimensionObject) anObj = aDimension->GetObject(); + anObj->SetQualifier((XCAFDimTolObjects_DimensionQualifier)Draw::Atoi(argv[3])); + aDimension->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer getDimQalif (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDimensionQualifier Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject()->GetQualifier()){ + case 0 : di<<"type is absent"; break; + case 1 : di<<"Min"; break; + case 2 : di<<"Max"; break; + case 3 : di<<"Avg"; break; + default : break; + } + } + return 0; +} + +static Standard_Integer setDimRange (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 5) { + di<<"Use: "<<"XSetDimensionRange Doc Dim_Label low_val up_val\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject(); + anObj->SetLowerBound(Draw::Atof(argv[3])); + anObj->SetUpperBound(Draw::Atof(argv[4])); + aDimension->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer getDimRange (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDimensionRange Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject()->GetLowerBound(); + di << " upper " << aDimension->GetObject()->GetUpperBound(); + } + return 0; +} + +static Standard_Integer setDimPlusMinusTol (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 5) { + di<<"Use: "<<"XSetDimensionPlusMinusTol Doc Dim_Label low_val up_val\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject(); + anObj->SetLowerTolValue(Draw::Atof(argv[3])); + anObj->SetUpperTolValue(Draw::Atof(argv[4])); + aDimension->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer getDimPlusMinusTol (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDimensionPlusMinusTol Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject()->GetLowerTolValue(); + di << " upper " << aDimension->GetObject()->GetUpperTolValue(); + } + return 0; +} + +static Standard_Integer setDimClassTol (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 6) { + di<<"Use: "<<"XSetDimensionClassOfTol Doc Dim_Label ishole[1/0] formVar grade\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "< 0 && Draw::Atoi(argv[4]) < 29 && Draw::Atoi(argv[5]) > -1 && Draw::Atoi(argv[5]) < 20) + { + Handle(XCAFDimTolObjects_DimensionObject) anObj = aDimension->GetObject(); + anObj->SetClassOfTolerance((Draw::Atoi(argv[3]) != 0), (XCAFDimTolObjects_DimensionFormVariance)Draw::Atoi(argv[4]), (XCAFDimTolObjects_DimensionGrade)Draw::Atoi(argv[5])); + aDimension->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer getDimClassTol (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDimensionClassOfTol Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject()->GetClassOfTolerance(h ,f, g)) + { + if(h) + { + switch(f){ + case 1 : di<<"a";break; + case 2 : di<<"b";break; + case 3 : di<<"c";break; + case 4 : di<<"cd";break; + case 5 : di<<"d";break; + case 6 : di<<"e";break; + case 7 : di<<"ef";break; + case 8 : di<<"f";break; + case 9 : di<<"fg";break; + case 10 : di<<"g";break; + case 11 : di<<"h";break; + case 12 : di<<"js";break; + case 13 : di<<"j";break; + case 14 : di<<"k";break; + case 15 : di<<"m";break; + case 16 : di<<"n";break; + case 17 : di<<"p";break; + case 18 : di<<"r";break; + case 19 : di<<"s";break; + case 20 : di<<"t";break; + case 21 : di<<"u";break; + case 22 : di<<"v";break; + case 23 : di<<"x";break; + case 24 : di<<"y";break; + case 25 : di<<"z";break; + case 26 : di<<"a";break; + case 27 : di<<"zb";break; + case 28 : di<<"zc";break; + default : break; + } + } + else + { + switch(f){ + case 1 : di<<"A";break; + case 2 : di<<"B";break; + case 3 : di<<"C";break; + case 4 : di<<"CD";break; + case 5 : di<<"D";break; + case 6 : di<<"E";break; + case 7 : di<<"EF";break; + case 8 : di<<"F";break; + case 9 : di<<"FG";break; + case 10 : di<<"G";break; + case 11 : di<<"H";break; + case 12 : di<<"JS";break; + case 13 : di<<"J";break; + case 14 : di<<"K";break; + case 15 : di<<"M";break; + case 16 : di<<"N";break; + case 17 : di<<"P";break; + case 18 : di<<"R";break; + case 19 : di<<"S";break; + case 20 : di<<"T";break; + case 21 : di<<"U";break; + case 22 : di<<"V";break; + case 23 : di<<"X";break; + case 24 : di<<"Y";break; + case 25 : di<<"Z";break; + case 26 : di<<"ZA";break; + case 27 : di<<"ZB";break; + case 28 : di<<"ZC";break; + default : break; + } + } + switch(g){ + case 0 : di<<"01"; break; + case 1 : di<<"0"; break; + case 2 : di<<"1"; break; + case 3 : di<<"2"; break; + case 4 : di<<"3"; break; + case 5 : di<<"4"; break; + case 6 : di<<"5"; break; + case 7 : di<<"6"; break; + case 8 : di<<"7"; break; + case 9 : di<<"8"; break; + case 10 : di<<"9"; break; + case 11 : di<<"10"; break; + case 12 : di<<"11"; break; + case 13 : di<<"12"; break; + case 14 : di<<"13"; break; + case 15 : di<<"14"; break; + case 16 : di<<"15"; break; + case 17 : di<<"16"; break; + case 18 : di<<"17"; break; + case 19 : di<<"18"; break; + default : break; + } + } + } + return 0; +} + +static Standard_Integer setDimNbOfDecimalPlaces (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 5) { + di<<"Use: "<<"XSetDimensionNbOfDecimalPlaces Doc Dim_Label l_val r_val\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject(); + anObj->SetNbOfDecimalPlaces(Draw::Atoi(argv[3]), Draw::Atoi(argv[4])); + aDimension->SetObject(anObj); + } + return 0; +} + +static Standard_Integer getDimNbOfDecimalPlaces (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDimensionNbOfDecimalPlaces Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject()->GetNbOfDecimalPlaces(l,r); + di << l << "." << r; + } + return 0; +} + +static Standard_Integer addDimModifier (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XAddDimensionModifiers Doc Dim_Label mod1 mod2 ...\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "< -1 && Draw::Atoi(argv[i]) < 24) + { + Handle(XCAFDimTolObjects_DimensionObject) anObj = aDimension->GetObject(); + anObj->AddModifier((XCAFDimTolObjects_DimensionModif)Draw::Atoi(argv[i])); + aDimension->SetObject(anObj); + } + } + } + return 0; +} + +static Standard_Integer getDimModifier (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDimensionModifiers Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject()->GetModifiers(); + for(Standard_Integer i = 1; i <= aS.Length(); i++) + { + if (i > 1) di<<", "; + switch(aS.Value(i)){ + case 0 : di<<"ControlledRadius"; break; + case 1 : di<<"Square"; break; + case 2 : di<<"StatisticalTolerance"; break; + case 3 : di<<"ContinuousFeature"; break; + case 4 : di<<"TwoPointSize"; break; + case 5 : di<<"LocalSizeDefinedBySphere"; break; + case 6 : di<<"LeastSquaresAssociationCriterion"; break; + case 7 : di<<"MaximumInscribedAssociation"; break; + case 8 : di<<"MinimumCircumscribedAssociation"; break; + case 9 : di<<"CircumferenceDiameter"; break; + case 10 : di<<"AreaDiameter"; break; + case 11 : di<<"VolumeDiameter"; break; + case 12 : di<<"MaximumSize"; break; + case 13 : di<<"MinimumSize"; break; + case 14 : di<<"AverageSize"; break; + case 15 : di<<"MedianSize"; break; + case 16 : di<<"MidRangeSize"; break; + case 17 : di<<"RangeOfSizes"; break; + case 18 : di<<"AnyRestrictedPortionOfFeature"; break; + case 19 : di<<"AnyCrossSection"; break; + case 20 : di<<"SpecificFixedCrossSection"; break; + case 21 : di<<"CommonTolerance"; break; + case 22 : di<<"FreeStateCondition"; break; + case 23 : di<<"Between"; break; + default : break; + } + } + } + return 0; +} + +static Standard_Integer addDimPath (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 4) { + di<<"Use: "<<"XSetDimensionPath Doc Dim_Label path(edge)\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject(); + anObj->SetPath(aE); + aDimension->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer addDimPoints (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 5) { + di<<"Use: "<<"XSetDimensionPoints Doc Dim_Label v1 v2\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<SetValue(1, BRep_Tool::Pnt(aV1)); + arr->SetValue(2, BRep_Tool::Pnt(aV2)); + Handle(XCAFDimTolObjects_DimensionObject) anObj = aDimension->GetObject(); + anObj->SetPoints(arr); + aDimension->SetObject(anObj); + } + } + return 0; +} + +static Standard_Integer getDimPoints (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XGetDimensionPoints Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject()->GetPoints(); + if(!pnts.IsNull() && pnts->Length() == 2) + { + di << pnts->Value(1).X() << ";" << pnts->Value(1).Y() << ";" << pnts->Value(1).Z() << " "; + di << pnts->Value(2).X() << ";" << pnts->Value(2).Y() << ";" << pnts->Value(2).Z(); + } + } + return 0; +} + +static Standard_Integer addDimDir (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 6) { + di<<"Use: "<<"XSetDimensionDir Doc Dim_Label x y z\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject(); + anObj->SetDirection(gp_Dir(Draw::Atof(argv[3]),Draw::Atof(argv[4]),Draw::Atof(argv[5]))); + aDimension->SetObject(anObj); + } + return 0; +} + +static Standard_Integer getDimDir (Draw_Interpretor& di, Standard_Integer argc, const char** argv) +{ + if (argc < 3) { + di<<"Use: "<<"XSetDimensionDir Doc Dim_Label\n"; + return 1; + } + Handle(TDocStd_Document) Doc; + DDocStd::GetDocument(argv[1], Doc); + if ( Doc.IsNull() ) { di << argv[1] << " is not a document" << "\n"; return 1; } + Handle(XCAFDoc_DimTolTool) aDimTolTool = XCAFDoc_DocumentTool::DimTolTool(Doc->Main()); + Handle(XCAFDoc_ShapeTool) aShapeTool= XCAFDoc_DocumentTool::ShapeTool(Doc->Main()); + + TDF_Label aLabel; + TDF_Tool::Label(Doc->GetData(), argv[2], aLabel); + if ( aLabel.IsNull() ) + { + di<<"Dimension "<GetObject()->GetDirection(dir)) + { + di << dir.X()<< ";"<< dir.Y()<< ";"<