]> OCCT Git - occt-copy.git/commitdiff
Implementation presentations of the PMI read from STEP CR0_PMI_GRAF_TopLevel
authorgka <gka@opencascade.com>
Mon, 18 Jan 2016 12:18:50 +0000 (15:18 +0300)
committergka <gka@opencascade.com>
Mon, 18 Jan 2016 12:18:50 +0000 (15:18 +0300)
src/STEPCAFControl/STEPCAFControl_Reader.cxx
src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.cxx
src/XCAFDimTolObjects/XCAFDimTolObjects_DatumObject.hxx
src/XCAFDimTolObjects/XCAFDimTolObjects_DimensionObject.cxx
src/XCAFDimTolObjects/XCAFDimTolObjects_DimensionObject.hxx
src/XCAFDimTolObjects/XCAFDimTolObjects_GeomToleranceObject.cxx
src/XCAFDimTolObjects/XCAFDimTolObjects_GeomToleranceObject.hxx
src/XCAFDoc/XCAFDoc_Datum.cxx
src/XCAFDoc/XCAFDoc_DimTolTool.cxx
src/XCAFDoc/XCAFDoc_Dimension.cxx
src/XCAFDoc/XCAFDoc_GeomTolerance.cxx

index 3b9d9aa4b6b4fc186c7f7bef3b196b3cb7141a0b..ff62c27c525171bfab509ec78615e011de7bbb72 100644 (file)
 #include <BRepBuilderAPI_MakeEdge.hxx>
 #include <BRepTools.hxx>
 #include <Transfer_ActorOfTransientProcess.hxx>
+#include <Bnd_Box.hxx>
+#include <BRepBndLib.hxx>
 
 // skl 21.08.2003 for reading G&DT
 //#include <StepRepr_CompoundItemDefinition.hxx>
@@ -1864,17 +1866,18 @@ TopoDS_Shape readAnnotation(const Handle(XSControl_TransferReader)& theTR,
   aB.MakeCompound(aResAnnotation);
 
   Standard_Integer i =0;
+  Bnd_Box aBox;
   for( ; i < anAnnotations.Length(); i++)
   {
     Handle(StepVisual_StyledItem) anItem = anAnnotations(i);
   
     theName = anItem->Name();
       //debug name of dimension====================
-    TCollection_AsciiString aCurName = theName.IsNull() ? 
+  /*  TCollection_AsciiString aCurName = theName.IsNull() ? 
       (TCollection_AsciiString("Size") + TCollection_AsciiString(numsize++)) : theName->String();
     aCurName += "_";
     aCurName += TCollection_AsciiString(i);
-    aCurName += ".brep";
+    aCurName += ".brep";*/
     //========================
     Handle(StepVisual_AnnotationCurveOccurrence) anACO = 
       Handle(StepVisual_AnnotationCurveOccurrence)::DownCast(anItem);
@@ -1894,26 +1897,29 @@ TopoDS_Shape readAnnotation(const Handle(XSControl_TransferReader)& theTR,
         }
         
       }
-
-      //if (aCurveItem->IsKind(STANDARD_TYPE(StepShape_GeometricCurveSet))) {
-      //  Handle(StepShape_GeometricCurveSet) aCurveSet =
-      //    Handle(StepShape_GeometricCurveSet)::DownCast(aCurveItem);
-
-
-
-      //  Standard_Integer i = 1;
-      //  for ( ; i <= aCurveSet->NbElements() && aCurve.IsNull(); i++) {
-      //    aCurve = Handle(StepGeom_Polyline)::DownCast(aCurveSet->ElementsValue(i).Curve());
-      //  }
-      //  if (isDimLoc) {
-      //    for ( ; i <= aCurveSet->NbElements() && aCurve2.IsNull(); i++) {
-      //      aCurve2 = Handle(StepGeom_Polyline)::DownCast(aCurveSet->ElementsValue(i).Curve());
-      //    }
-      //  }
-      //}
-      //else {
-      //  aCurve = Handle(StepGeom_Polyline)::DownCast(aCurveItem);
-      //}
+            
+     // //get text attacment point
+     //// if( i == anAnnotations.Length() -1)
+     //// {
+     //   if (aCurveItem->IsKind(STANDARD_TYPE(StepShape_GeometricCurveSet))) 
+     //   {
+     //     Handle(StepShape_GeometricCurveSet) aCurveSet =
+     //     Handle(StepShape_GeometricCurveSet)::DownCast(aCurveItem);
+
+     //     Standard_Integer n = 1;
+     //     for ( ; n <= aCurveSet->NbElements() && aCurve.IsNull(); n++) 
+     //     {
+     //       aCurve = Handle(StepGeom_Polyline)::DownCast(aCurveSet->ElementsValue(n).Curve());
+     //     }
+     //     if (isDimLoc) {
+     //       for ( ; i <= aCurveSet->NbElements() && aCurve2.IsNull(); i++) {
+     //         aCurve2 = Handle(StepGeom_Polyline)::DownCast(aCurveSet->ElementsValue(i).Curve());
+     //     }
+     //   }
+     // }
+     // else {
+     //   aCurve = Handle(StepGeom_Polyline)::DownCast(aCurveItem);
+     // }
 
       //isDimLoc = isDimLoc && !aCurve2.IsNull() && aCurve2->NbPoints() > 0;
 
@@ -1956,14 +1962,12 @@ TopoDS_Shape readAnnotation(const Handle(XSControl_TransferReader)& theTR,
       isDimLoc = !aPoints.IsNull() && aPoints->Length() > 0;
       if( isDimLoc)
       {
-        //debug
+        
         NCollection_Handle<StepVisual_VectorOfHSequenceOfInteger> aCurves = aTessCurve->Curves();
         Standard_Integer aNbC = (aCurves.IsNull() ? 0 : aCurves->Length());
-        //BRep_Builder aB;
         TopoDS_Compound aComp;
         aB.MakeCompound(aComp);
-        // TopoDS_Wire aCurW;
-        //aB.MakeWire(aCurW);
+      
         Standard_Integer k = 0; 
         for( ; k < aNbC; k++)
         {
@@ -1994,57 +1998,51 @@ TopoDS_Shape readAnnotation(const Handle(XSControl_TransferReader)& theTR,
         anAnotationShape = aComp;
       }
 
-
-      ////
-      // aXYZ1 += aPoints->Value(1);
-      // aXYZ2 += aPoints->Value(aPoints->Length());
-      // nbP++;
     }
     if(!anAnotationShape.IsNull())
     {
-      aCurName.RemoveAll(' ');
+      //aCurName.RemoveAll(' ');
       //BRepTools::Write(anAnotationShape, aCurName.ToCString());
+      
       aB.Add(aResAnnotation, anAnotationShape);
+      if( i == anAnnotations.Length()-1)
+        BRepBndLib::AddClose(anAnotationShape, aBox);
     }
-    /*if(nbP)
-    {
-    aPoint = gp_Pnt(aXYZ1/ nbP);
-    aPoint2 = gp_Pnt(aXYZ2/ nbP);
-    }*/
+       
+  }
+  
+  gp_Pnt aPtext(0.,0.,0.);
+  if( !aBox.IsVoid())
+  {
+    Standard_Real aXmin, aYmin, aZmin,aXmax, aYmax, aZmax; 
+    aBox.Get(aXmin, aYmin, aZmin,aXmax, aYmax, aZmax);
+    aPtext = gp_Pnt((aXmin + aXmax) *0.5, (aYmin + aYmax) *0.5, (aZmin + aZmax) *0.5);
+    //TopoDS_Vertex aV1;
+    //debug add point of text location
+    //aB.MakeVertex(aV1, aPtext , 0);
+    //aB.Add(aResAnnotation,aV1);
+    //Handle(TColgp_HArray1OfPnt) aPnts = new TColgp_HArray1OfPnt(1, 1);
+    //aPnts->SetValue(1, aP);
   }
-  //////////////////////
-
 
   // set point to XCAF
/* if (theDimObject->IsKind(STANDARD_TYPE(XCAFDimTolObjects_DimensionObject))) 
+  if (theDimObject->IsKind(STANDARD_TYPE(XCAFDimTolObjects_DimensionObject))) 
   {
     Handle(XCAFDimTolObjects_DimensionObject) anObj = 
       Handle(XCAFDimTolObjects_DimensionObject)::DownCast(theDimObject);
-
-    Handle(TColgp_HArray1OfPnt) aPnts;
-    if (isDimLoc)
-      aPnts = new TColgp_HArray1OfPnt(1, 2);
-    else
-      aPnts = new TColgp_HArray1OfPnt(1, 1);
-    aPnts->SetValue(1, aPoint);
-    if (isDimLoc)
-    {
-      aPnts->SetValue(1, aPoint);
-      aPnts->SetValue(2, aPoint2);
-    }
-
-    anObj->SetPoints(aPnts);
+    anObj->SetPointTextAttach(aPtext);
+    
   }
   else if (theDimObject->IsKind(STANDARD_TYPE(XCAFDimTolObjects_DatumObject))) {
     Handle(XCAFDimTolObjects_DatumObject) anObj =
       Handle(XCAFDimTolObjects_DatumObject)::DownCast(theDimObject);
-    anObj->SetPoint(aPoint);
+    anObj->SetPointTextAttach(aPtext);
   }
   else if (theDimObject->IsKind(STANDARD_TYPE(XCAFDimTolObjects_GeomToleranceObject))) {
     Handle(XCAFDimTolObjects_GeomToleranceObject) anObj =
       Handle(XCAFDimTolObjects_GeomToleranceObject)::DownCast(theDimObject);
-    anObj->SetPoint(aPoint);
-  }*/
+    anObj->SetPointTextAttach(aPtext);
+  }
   return aResAnnotation;
 }
 
@@ -2343,11 +2341,14 @@ static Standard_Boolean setDatumToXCAF(const Handle(StepDimTol_Datum)& theDat,
       Handle(TCollection_HAsciiString) aName;
       TopoDS_Shape anAnnotation = readAnnotation(aTR, aSAR->RelatingShapeAspect(), aDatObj,aName);
         
-      TDF_Label aL = aSTool->AddShape(anAnnotation, Standard_False);
-      if( !aName.IsNull() && !aL.IsNull())
+      TDF_Label aPresentLabel = aSTool->AddShape(anAnnotation, Standard_False);
+      TDF_Label aDatL = aDat->Label();
+      if( !aPresentLabel.IsNull())
+        aDGTTool->SetPresentation( aDatL, aPresentLabel);
+      if( !aName.IsNull() && !aPresentLabel.IsNull())
       {
         TCollection_ExtendedString str ( aName->String() );
-        TDataStd_Name::Set ( aL, str );
+        TDataStd_Name::Set ( aPresentLabel, str );
       }
       
       aDat->SetObject(aDatObj);
@@ -3314,22 +3315,27 @@ static void setDimObjectToXCAF(const Handle(Standard_Transient)& theEnt,
   }
   aDimObj->SetType(aType);
 
-  Handle(TCollection_HAsciiString) anAnnotName;
-    
-  TopoDS_Shape anAnnotation = readAnnotation(aTR, theEnt, aDimObj, anAnnotName);
-  aSTool->AddShape(anAnnotation, Standard_False);
-
-  TDF_Label aL = aSTool->AddShape(anAnnotation, Standard_False);
-  if( !anAnnotName.IsNull() && !aL.IsNull())
-  {
-    TCollection_ExtendedString str ( anAnnotName->String() );
-    TDataStd_Name::Set ( aL, str );
-  }
+  
   if(!aDimObj.IsNull())
   {
+
     Handle(XCAFDoc_Dimension) aDim;
+
     if(aDimL.FindAttribute(XCAFDoc_Dimension::GetID(),aDim))
     {
+      Handle(TCollection_HAsciiString) anAnnotName;
+
+      TopoDS_Shape anAnnotation = readAnnotation(aTR, theEnt, aDimObj, anAnnotName);
+      aSTool->AddShape(anAnnotation, Standard_False);
+
+      TDF_Label aPresentLabel = aSTool->AddShape(anAnnotation, Standard_False);
+      if( !aPresentLabel.IsNull())
+        aDGTTool->SetPresentation( aDimL, aPresentLabel);
+      if( !anAnnotName.IsNull() && !aPresentLabel.IsNull())
+      {
+        TCollection_ExtendedString str ( anAnnotName->String() );
+        TDataStd_Name::Set ( aPresentLabel, str );
+      }
       aDim->SetObject(aDimObj);
     }
   }
@@ -3598,6 +3604,8 @@ static void setGeomTolObjectToXCAF(const Handle(Standard_Transient)& theEnt,
   TopoDS_Shape anAnnotation = readAnnotation(aTR, theEnt, aTolObj, aName);
 
   TDF_Label aL = aSTool->AddShape(anAnnotation, Standard_False);
+  if( !aL.IsNull())
+    aDGTTool->SetPresentation(aGTol->Label(), aL);
   if( !aName.IsNull() && !aL.IsNull())
   {
     TCollection_ExtendedString str ( aName->String() );
index 884444db4d4fcad2bb3a6a22301d05dcea6c268c..652334046e785a5399d1c560bc7246f119b703c8 100644 (file)
@@ -26,7 +26,7 @@ XCAFDimTolObjects_DatumObject::XCAFDimTolObjects_DatumObject()
   myIsDTarget = Standard_False;
   myHasPlane = Standard_False;
   myHasPnt = Standard_False;
-  myHasPnt2 = Standard_False;
+  myHasPntText = Standard_False;
 }
 
 //=======================================================================
@@ -46,10 +46,10 @@ XCAFDimTolObjects_DatumObject::XCAFDimTolObjects_DatumObject(const Handle(XCAFDi
   myDTargetType = theObj->myDTargetType;
   myPlane = theObj->myPlane;
   myPnt= theObj->myPnt;
-  myPnt2= theObj->myPnt2;
+  myPntText= theObj->myPntText;
   myHasPlane = theObj->myHasPlane;
   myHasPnt = theObj->myHasPnt;
-  myHasPnt2 = theObj->myHasPnt2;
+  myHasPntText = theObj->myHasPntText;
 }
 
 //=======================================================================
index 2eeecc6dd091ce5740187ae6519a7107a5e635fa..f6b719f1cd02f00d2b0508d6551f1650c2b0c725 100644 (file)
@@ -105,21 +105,31 @@ public:
     myHasPnt = Standard_True;
   }
 
-  const gp_Pnt& GetPoint() const { return myPnt; }
+  const gp_Pnt& GetPoint() const 
+  { 
+    return myPnt; 
+  }
 
-  void SetPoint2 (const gp_Pnt& thePnt)
+  void SetPointTextAttach (const gp_Pnt& thePntText)
   {
-    myPnt2 = thePnt;
-    myHasPnt2 = Standard_True;
+    myPntText = thePntText;
+    myHasPntText = Standard_True;
   }
 
-  const gp_Pnt& GetPoint2() const { return myPnt2; }
+  const gp_Pnt& GetPointTextAttach() const 
+  { 
+    return myPntText; 
+  }
 
   Standard_Boolean HasPlane() const { return myHasPlane; }
 
   Standard_Boolean HasPoint() const { return myHasPnt; }
 
-  Standard_Boolean HasPoint2() const { return myHasPnt2; }
+  Standard_Boolean HasTextPoint() const 
+  { 
+    return myHasPntText; 
+  }
 
   DEFINE_STANDARD_RTTIEXT(XCAFDimTolObjects_DatumObject,Standard_Transient)
 
@@ -139,10 +149,10 @@ private:
   Standard_Integer myDatumTargetNumber;
   gp_Ax2 myPlane;
   gp_Pnt myPnt;
-  gp_Pnt myPnt2;
+  gp_Pnt myPntText;
   Standard_Boolean myHasPlane;
   Standard_Boolean myHasPnt;
-  Standard_Boolean myHasPnt2;
+  Standard_Boolean myHasPntText;
 };
 
 #endif // _XCAFDimTolObjects_DatumObject_HeaderFile
index 78b2eea3cef752e30a8f77fc55505a048abe3e83..8a053ba73827e3b16ccbefa6d0aeffd325f3db96 100644 (file)
@@ -27,7 +27,7 @@ IMPLEMENT_STANDARD_RTTIEXT(XCAFDimTolObjects_DimensionObject,Standard_Transient)
 XCAFDimTolObjects_DimensionObject::XCAFDimTolObjects_DimensionObject()
 {
   myHasPlane = Standard_False;
-  myHasPnt2 = Standard_False;
+  myHasPntText = Standard_False;
 }
 
 //=======================================================================
@@ -49,10 +49,10 @@ XCAFDimTolObjects_DimensionObject::XCAFDimTolObjects_DimensionObject(const Handl
   myPath = theObj->myPath;
   myDir = theObj->myDir;
   myPnts = theObj->myPnts;
-  myPnt2= theObj->myPnt2;
+  myPntText= theObj->myPntText;
   myHasPlane = theObj->myHasPlane;
   myPlane = theObj->myPlane;
-  myHasPnt2 = theObj->myHasPnt2;
+  myHasPntText = theObj->myHasPntText;
 }
 
 //=======================================================================
index 3549cfbf4ee63416c24a6a93ea0ced1e2eb9d5b8..f5346c8a09a825b4f809505f7fa110378fa9b3f3 100644 (file)
@@ -117,13 +117,13 @@ public:
   
   Standard_EXPORT void SetPoints (const Handle(TColgp_HArray1OfPnt)& thePnts);
 
-  void SetPoint2 (const gp_Pnt& thePnt)
+  void SetPointTextAttach (const gp_Pnt& thePntText)
   {
-    myPnt2 = thePnt;
-    myHasPnt2 = Standard_True;
+    myPntText = thePntText;
+    myHasPntText = Standard_True;
   }
 
-  const gp_Pnt& GetPoint2() const { return myPnt2; }
+  const gp_Pnt& GetPointTextAttach() const { return myPntText; }
 
   void SetPlane (const gp_Ax2& thePlane)
   {
@@ -137,7 +137,7 @@ public:
 
   Standard_Boolean HasPoints() const { return (!myPnts.IsNull() && myPnts->Length() > 0); }
 
-  Standard_Boolean HasPoint2() const { return myHasPnt2; }
+  Standard_Boolean HasPoint2() const { return myHasPntText; }
 
   DEFINE_STANDARD_RTTIEXT(XCAFDimTolObjects_DimensionObject,Standard_Transient)
 
@@ -155,10 +155,11 @@ private:
   TopoDS_Edge myPath;
   gp_Dir myDir;
   Handle(TColgp_HArray1OfPnt) myPnts;
-  gp_Pnt myPnt2;
   gp_Ax2 myPlane;
   Standard_Boolean myHasPlane;
-  Standard_Boolean myHasPnt2;
+  Standard_Boolean myHasPnt;
+  Standard_Boolean myHasPntText;
+  gp_Pnt myPntText;
 
 };
 
index 91e7a08e778a4536d29884bf8673b5af7749e831..f1e5c77dd00a0b10f1141991edcfea14470b3477 100644 (file)
@@ -25,7 +25,7 @@ XCAFDimTolObjects_GeomToleranceObject::XCAFDimTolObjects_GeomToleranceObject()
   myHasAxis = Standard_False;
   myHasPlane = Standard_False;
   myHasPnt = Standard_False;
-  myHasPnt2 = Standard_False;
+  myHasPntText = Standard_False;
 }
 
 //=======================================================================
@@ -47,10 +47,10 @@ XCAFDimTolObjects_GeomToleranceObject::XCAFDimTolObjects_GeomToleranceObject(con
   myHasAxis = theObj->myHasAxis;
   myPlane = theObj->myPlane;
   myPnt= theObj->myPnt;
-  myPnt2= theObj->myPnt2;
+  myPntText= theObj->myPntText;
   myHasPlane = theObj->myHasPlane;
   myHasPnt = theObj->myHasPnt;
-  myHasPnt2 = theObj->myHasPnt2;
+  myHasPntText = theObj->myHasPntText;
 }
 
 //=======================================================================
index 42ce2c1848df713b29104f6c655aa4fd804800fc..b5fef8bdb58f5e6d3eadd8e3010cd82601e6711f 100644 (file)
@@ -100,19 +100,24 @@ public:
 
   const gp_Pnt& GetPoint() const { return myPnt; }
 
-  void SetPoint2 (const gp_Pnt& thePnt)
+  void SetPointTextAttach (const gp_Pnt& thePntText)
   {
-    myPnt2 = thePnt;
-    myHasPnt2 = Standard_True;
+    myPntText = thePntText;
+    myHasPntText = Standard_True;
   }
 
-  const gp_Pnt& GetPoint2() const { return myPnt2; }
-
+  const gp_Pnt& GetPointTextAttach() const 
+  { 
+    return myPntText; 
+  }
   Standard_Boolean HasPlane() const { return myHasPlane; }
 
   Standard_Boolean HasPoint() const { return myHasPnt; }
   
-  Standard_Boolean HasPoint2() const { return myHasPnt2; }
+  Standard_Boolean HasPointText() const 
+  { 
+    return myHasPntText; 
+  }
 
   DEFINE_STANDARD_RTTIEXT(XCAFDimTolObjects_GeomToleranceObject,Standard_Transient)
 
@@ -130,10 +135,10 @@ private:
   Standard_Boolean myHasAxis;
   gp_Ax2 myPlane;
   gp_Pnt myPnt;
-  gp_Pnt myPnt2;
+  gp_Pnt myPntText;;
   Standard_Boolean myHasPlane;
   Standard_Boolean myHasPnt;
-  Standard_Boolean myHasPnt2;
+  Standard_Boolean myHasPntText;
 
 };
 
index 755a92711d49540d7c0a16be4bb26db4b41b16ff..0f1503e5014df9bca7228c9f4cd9873c0720b4fc 100644 (file)
@@ -52,7 +52,8 @@ enum ChildLab
   ChildLab_PlaneN,
   ChildLab_PlaneRef,
   ChildLab_Pnt,
-  ChildLab_Pnt2,
+  ChildLab_PntText,
+  ChildLab_Presentation
 };
 
 //=======================================================================
@@ -327,17 +328,17 @@ void XCAFDoc_Datum::SetObject(const Handle(XCAFDimTolObjects_DatumObject)& theOb
     Label().FindChild(ChildLab_Pnt).AddAttribute(aLoc);
   }
 
-  if (theObject->HasPoint2())
+  if (theObject->HasTextPoint())
   {
     Handle(TDataStd_RealArray) aLoc = new TDataStd_RealArray();
-    gp_Pnt aPnt2 = theObject->GetPoint2();
+    gp_Pnt aPntText = theObject->GetPointTextAttach();
 
     Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
     for (Standard_Integer i = 1; i <= 3; i++)
-      aLocArr->SetValue(i, aPnt2.Coord(i));
+      aLocArr->SetValue(i, aPntText.Coord(i));
     aLoc->ChangeArray(aLocArr);
 
-    Label().FindChild(ChildLab_Pnt2).AddAttribute(aLoc);
+    Label().FindChild(ChildLab_PntText).AddAttribute(aLoc);
   }
 }
 
@@ -402,11 +403,11 @@ Handle(XCAFDimTolObjects_DatumObject) XCAFDoc_Datum::GetObject() const
     anObj->SetPoint(aP);
   }
 
-  Handle(TDataStd_RealArray) aPnt2;
-  if(Label().FindChild(ChildLab_Pnt2).FindAttribute(TDataStd_RealArray::GetID(), aPnt2) && aPnt2->Length() == 3 )
+  Handle(TDataStd_RealArray) aPntText;
+  if(Label().FindChild(ChildLab_PntText).FindAttribute(TDataStd_RealArray::GetID(), aPntText) && aPntText->Length() == 3 )
   {
-    gp_Pnt aP (aPnt2->Value(aPnt2->Lower()), aPnt2->Value(aPnt2->Lower()+1), aPnt2->Value(aPnt2->Lower()+2));                          
-    anObj->SetPoint2(aP);
+    gp_Pnt aP (aPntText->Value(aPntText->Lower()), aPntText->Value(aPntText->Lower()+1), aPntText->Value(aPntText->Lower()+2));                          
+    anObj->SetPointTextAttach(aP);
   }
 
   Handle(TDataStd_Integer) aIsDTarget;
index 8267f03d769733797781bb7070a484b9209db978..df186812bd79ed954788f28b1b9b66e83cf5f08e 100644 (file)
@@ -11,7 +11,7 @@
 // Alternatively, this file may be used under the terms of Open CASCADE
 // commercial license or contractual agreement.
 
-
+#include <XCAFDoc_DimTolTool.hxx>
 #include <Precision.hxx>
 #include <Standard_GUID.hxx>
 #include <Standard_Type.hxx>
@@ -34,6 +34,7 @@
 #include <XCAFDoc_GraphNode.hxx>
 #include <XCAFDoc_ShapeTool.hxx>
 
+
 IMPLEMENT_STANDARD_RTTIEXT(XCAFDoc_DimTolTool,TDF_Attribute)
 
 //=======================================================================
@@ -885,6 +886,62 @@ Standard_Boolean XCAFDoc_DimTolTool::GetTolerOfDatumLabels(const TDF_Label& theD
   return Standard_True;
 }
 
+//=======================================================================
+//function : SetPresentation
+//purpose  : 
+//=======================================================================
+Standard_Boolean XCAFDoc_DimTolTool::SetPresentation(const TDF_Label& theDimLabel, const TopoDS_Shape& theShape)
+{
+  TDF_Label aShapeL;
+  if ( ! ShapeTool()->Search (theShape, aShapeL ) ) 
+    return Standard_False;
+  SetPresentation( theDimLabel,aShapeL);
+  return Standard_True;
+}
+
+//=======================================================================
+//function : SetPresentation
+//purpose  : 
+//=======================================================================
+
+void XCAFDoc_DimTolTool::SetPresentation(const TDF_Label& theDimLabel,
+  const TDF_Label& theShapeLabel)
+{
+  Handle(TDataStd_TreeNode) refNode, mainNode;
+  mainNode = TDataStd_TreeNode::Set ( theDimLabel, XCAFDoc::ShapeRefGUID() );
+  refNode  = TDataStd_TreeNode::Set ( theShapeLabel,    XCAFDoc::ShapeRefGUID() );
+  refNode->Remove(); // abv: fix against bug in TreeNode::Append()
+  mainNode->Append(refNode);
+}
+
+//=======================================================================
+//function : GetPresentation
+//purpose  : 
+//=======================================================================
+
+TopoDS_Shape XCAFDoc_DimTolTool::GetPresentation (const TDF_Label& theDimLabel) 
+{
+  TDF_Label aPresentLabel = GetPresentationLabel ( theDimLabel);
+  TopoDS_Shape aShape;
+  if( !aPresentLabel.IsNull())
+    aShape = ShapeTool()->GetShape(aPresentLabel);
+       return aShape;
+}
+//=======================================================================
+//function : GetPresentation
+//purpose  : 
+//=======================================================================
+TDF_Label XCAFDoc_DimTolTool::GetPresentationLabel(const TDF_Label& theDimLabel)
+{
+  TDF_Label aShapeLabel;
+  Handle(TDataStd_TreeNode) Node;
+  if ( ! theDimLabel.FindAttribute ( XCAFDoc::ShapeRefGUID(), Node) ||
+       ! Node->HasFather() ) 
+       return aShapeLabel;
+  aShapeLabel = Node->Father()->Label();
+  return aShapeLabel;
+}
 
 //=======================================================================
 //function : ID
index 70224613c4bd28a001c34afc32aca0855602d91f..d3dfbeb4a05cd3c76bd8c758cfec0f58edf2b69f 100644 (file)
@@ -45,7 +45,9 @@ enum ChildLab
   ChildLab_PlaneLoc,
   ChildLab_PlaneN,
   ChildLab_PlaneRef,
-  ChildLab_Pnt2,
+  ChildLab_PntText,
+  ChildLab_Presentation
+  
 };
 
 //=======================================================================
@@ -217,18 +219,21 @@ void XCAFDoc_Dimension::SetObject (const Handle(XCAFDimTolObjects_DimensionObjec
     Label().FindChild(ChildLab_PlaneRef).AddAttribute(aR);
   }
 
-  if (theObject->HasPoint2())
+  if (theObject->HasTextPoint())
   {
     Handle(TDataStd_RealArray) aLoc = new TDataStd_RealArray();
-    gp_Pnt aPnt2 = theObject->GetPoint2();
+    gp_Pnt aPntText = theObject->GetPointTextAttach();
 
     Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
     for (Standard_Integer i = 1; i <= 3; i++)
-      aLocArr->SetValue(i, aPnt2.Coord(i));
+      aLocArr->SetValue(i, aPntText.Coord(i));
     aLoc->ChangeArray(aLocArr);
 
-    Label().FindChild(ChildLab_Pnt2).AddAttribute(aLoc);
+    Label().FindChild(ChildLab_PntText).AddAttribute(aLoc);
   }
+
+  
+  
 }
 
 //=======================================================================
@@ -325,13 +330,18 @@ Handle(XCAFDimTolObjects_DimensionObject) XCAFDoc_Dimension::GetObject()  const
     anObj->SetPlane(anAx);
   }
 
-  Handle(TDataStd_RealArray) aPnt2;
-  if(Label().FindChild(ChildLab_Pnt2).FindAttribute(TDataStd_RealArray::GetID(), aPnt2) && aPnt2->Length() == 3 )
+  Handle(TDataStd_RealArray) aPntText;
+  if(Label().FindChild(ChildLab_PntText).FindAttribute(TDataStd_RealArray::GetID(), aPntText) && aPntText->Length() == 3 )
   {
-    gp_Pnt aP(aPnt2->Value(aPnt2->Lower()), aPnt2->Value(aPnt2->Lower()+1), aPnt2->Value(aPnt2->Lower()+2));
-    anObj->SetPoint2(aP);
+    gp_Pnt aP(aPntText->Value(aPntText->Lower()), aPntText->Value(aPntText->Lower()+1), aPntText->Value(aPntText->Lower()+2));
+    anObj->SetPointTextAttach(aP);
   }
 
+  /* Handle(TNaming_NamedShape) NS;
+   TDF_Label aLPres = Label().FindChild( ChildLab_Presentation);
+   if ( ! aLPres.FindAttribute(TNaming_NamedShape::GetID(), NS) ) 
+     return Standard_False;
+  TopoDS_Shape aPresShape = TNaming_Tool::GetShape(NS);*/
   return anObj;
 }
 
index 7c15323eb559c43a2aa25afcff49874d9a8d8fc7..25166baee810f13f32cdc2955d2865b07b1d6d6a 100644 (file)
@@ -42,7 +42,8 @@ enum ChildLab
   ChildLab_PlaneN,
   ChildLab_PlaneRef,
   ChildLab_Pnt,
-  ChildLab_Pnt2,
+  ChildLab_PntText,
+  ChildLab_Presentation
 };
 
 //=======================================================================
@@ -221,17 +222,17 @@ void XCAFDoc_GeomTolerance::SetObject (const Handle(XCAFDimTolObjects_GeomTolera
     Label().FindChild(ChildLab_Pnt).AddAttribute(aLoc);
   }
 
-  if (theObject->HasPoint2())
+  if (theObject->HasPointText())
   {
     Handle(TDataStd_RealArray) aLoc = new TDataStd_RealArray();
-    gp_Pnt aPnt2 = theObject->GetPoint2();
+    gp_Pnt aPntText = theObject->GetPointTextAttach();
 
     Handle(TColStd_HArray1OfReal) aLocArr = new TColStd_HArray1OfReal(1, 3);
     for (Standard_Integer i = 1; i <= 3; i++)
-      aLocArr->SetValue(i, aPnt2.Coord(i));
+      aLocArr->SetValue(i, aPntText.Coord(i));
     aLoc->ChangeArray(aLocArr);
 
-    Label().FindChild(ChildLab_Pnt2).AddAttribute(aLoc);
+    Label().FindChild(ChildLab_PntText).AddAttribute(aLoc);
   }
 }
 
@@ -328,11 +329,11 @@ Handle(XCAFDimTolObjects_GeomToleranceObject) XCAFDoc_GeomTolerance::GetObject()
     anObj->SetPoint(aP);
   }
 
-  Handle(TDataStd_RealArray) aPnt2;
-  if(Label().FindChild(ChildLab_Pnt2).FindAttribute(TDataStd_RealArray::GetID(), aPnt2) && aPnt2->Length() == 3 )
+  Handle(TDataStd_RealArray) aPntText;
+  if(Label().FindChild(ChildLab_PntText).FindAttribute(TDataStd_RealArray::GetID(), aPntText) && aPntText->Length() == 3 )
   {
-    gp_Pnt aP(aPnt2->Value(aPnt2->Lower()), aPnt2->Value(aPnt2->Lower()+1), aPnt2->Value(aPnt2->Lower()+2));
-    anObj->SetPoint2(aP);
+    gp_Pnt aP(aPntText->Value(aPntText->Lower()), aPntText->Value(aPntText->Lower()+1), aPntText->Value(aPntText->Lower()+2));
+    anObj->SetPointTextAttach(aP);
   }
 
   return anObj;