]> OCCT Git - occt-copy.git/commitdiff
0030949: Foundation Classes - Dump improvement for OCCT classes
authornds <nds@opencascade.com>
Mon, 16 Sep 2019 22:32:38 +0000 (01:32 +0300)
committernds <nds@opencascade.com>
Mon, 16 Sep 2019 22:32:38 +0000 (01:32 +0300)
82 files changed:
src/AIS/AIS_InteractiveObject.cxx
src/AIS/AIS_InteractiveObject.hxx
src/BRepTest/BRepTest_BasicCommands.cxx
src/BVH/BVH_Box.hxx
src/BVH/BVH_Tree.hxx
src/BVH/BVH_Types.hxx
src/Bnd/Bnd_Box.cxx
src/Bnd/Bnd_Box.hxx
src/Bnd/Bnd_OBB.cxx
src/Bnd/Bnd_OBB.hxx
src/Bnd/Bnd_Range.cxx
src/Bnd/Bnd_Range.hxx
src/Graphic3d/FILES
src/Graphic3d/Graphic3d_Aspects.cxx
src/Graphic3d/Graphic3d_Aspects.hxx
src/Graphic3d/Graphic3d_Group.cxx
src/Graphic3d/Graphic3d_Group.hxx
src/Graphic3d/Graphic3d_PolygonOffset.cxx [new file with mode: 0644]
src/Graphic3d/Graphic3d_PolygonOffset.hxx
src/OpenGl/OpenGl_Aspects.cxx
src/OpenGl/OpenGl_Aspects.hxx
src/OpenGl/OpenGl_Group.cxx
src/OpenGl/OpenGl_Group.hxx
src/Prs3d/Prs3d_ArrowAspect.cxx
src/Prs3d/Prs3d_ArrowAspect.hxx
src/Prs3d/Prs3d_BasicAspect.hxx
src/Prs3d/Prs3d_DatumAspect.cxx
src/Prs3d/Prs3d_DatumAspect.hxx
src/Prs3d/Prs3d_DimensionAspect.cxx
src/Prs3d/Prs3d_DimensionAspect.hxx
src/Prs3d/Prs3d_Drawer.cxx
src/Prs3d/Prs3d_Drawer.hxx
src/Prs3d/Prs3d_LineAspect.cxx
src/Prs3d/Prs3d_LineAspect.hxx
src/Prs3d/Prs3d_PlaneAspect.cxx
src/Prs3d/Prs3d_PlaneAspect.hxx
src/Prs3d/Prs3d_PointAspect.cxx
src/Prs3d/Prs3d_PointAspect.hxx
src/Prs3d/Prs3d_ShadingAspect.cxx
src/Prs3d/Prs3d_ShadingAspect.hxx
src/Prs3d/Prs3d_TextAspect.cxx
src/Prs3d/Prs3d_TextAspect.hxx
src/PrsMgr/PrsMgr_PresentableObject.cxx
src/PrsMgr/PrsMgr_PresentableObject.hxx
src/Quantity/Quantity_Color.cxx
src/Quantity/Quantity_Color.hxx
src/Quantity/Quantity_ColorRGBA.cxx
src/Quantity/Quantity_ColorRGBA.hxx
src/SelectMgr/SelectMgr_BaseFrustum.cxx
src/SelectMgr/SelectMgr_BaseFrustum.hxx
src/SelectMgr/SelectMgr_EntityOwner.cxx
src/SelectMgr/SelectMgr_EntityOwner.hxx
src/SelectMgr/SelectMgr_SelectableObject.cxx
src/SelectMgr/SelectMgr_SelectableObject.hxx
src/SelectMgr/SelectMgr_ViewClipRange.cxx
src/SelectMgr/SelectMgr_ViewClipRange.hxx
src/SelectMgr/SelectMgr_ViewerSelector.cxx
src/SelectMgr/SelectMgr_ViewerSelector.hxx
src/Standard/FILES
src/Standard/Standard_Dump.cxx [new file with mode: 0644]
src/Standard/Standard_Dump.hxx [new file with mode: 0644]
src/TopLoc/TopLoc_Datum3D.cxx
src/TopLoc/TopLoc_Datum3D.hxx
src/TopLoc/TopLoc_ItemLocation.cxx
src/TopLoc/TopLoc_ItemLocation.hxx
src/TopLoc/TopLoc_Location.cxx
src/TopLoc/TopLoc_Location.hxx
src/TopoDS/TopoDS_Shape.cxx
src/TopoDS/TopoDS_Shape.hxx
src/TopoDS/TopoDS_TShape.cxx
src/TopoDS/TopoDS_TShape.hxx
src/ViewerTest/ViewerTest.cxx
src/XCAFPrs/XCAFPrs_Style.cxx
src/XCAFPrs/XCAFPrs_Style.hxx
src/gp/gp_Mat.cxx
src/gp/gp_Mat.hxx
src/gp/gp_Trsf.cxx
src/gp/gp_Trsf.hxx
src/gp/gp_XYZ.cxx
src/gp/gp_XYZ.hxx
tests/bugs/modalg_7/bug29311_15
tests/bugs/vis/bug30949 [new file with mode: 0644]

index 078bdc3c9a7986c7607d40cd252c8ea756286d09..fc76106d7980af824e16cc701b1c5431f8471c65 100644 (file)
@@ -144,3 +144,11 @@ void AIS_InteractiveObject::SetAspect(const Handle(Prs3d_BasicAspect)& theAspect
     aGroup->SetGroupPrimitivesAspect (aTextAspect->Aspect());
   }
 }
+
+void AIS_InteractiveObject::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (AIS_InteractiveObject));
+  DUMP_FIELD_VALUES_PARENT (theOStream, SelectMgr_SelectableObject);
+  DUMP_FIELD_VALUES_POINTER (theOStream, myCTXPtr);
+  DUMP_FIELD_VALUES_POINTER (theOStream, myOwner);
+}
index 4ca80616ed1f2f7178c7cc9392d3f25424bc6b62..fb1766e350a4815414f64bc0c7bd55ebef3be39b 100644 (file)
@@ -118,6 +118,8 @@ public:
   Standard_DEPRECATED("Deprecated method, results might be undefined")
   Standard_EXPORT void SetAspect (const Handle(Prs3d_BasicAspect)& anAspect);
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
 protected:
 
   //! The TypeOfPresention3d means that the interactive object
index eb913e11eee7b56fa5e9d322c4444f18e3090699..7d2e6a191a5ac28de5b83915c1b7a1b5f8a0b4f1 100644 (file)
@@ -55,6 +55,9 @@
 #include <Draw_Marker3D.hxx>
 #include <Draw_MarkerShape.hxx>
 #include <BRepPrimAPI_MakeBox.hxx>
+
+#include <Standard_Dump.hxx>
+
 #include <stdio.h>
 
 Standard_IMPORT Draw_Viewer dout;
@@ -498,6 +501,7 @@ static Standard_Integer BoundBox(Draw_Interpretor& theDI,
   Bnd_Box anAABB;
 
   Standard_Boolean doPrint = Standard_False;
+  Standard_Boolean doDump = Standard_False;
   Standard_Boolean useOldSyntax = Standard_False;
   Standard_Boolean isOBB = Standard_False;
   Standard_Boolean isTriangulationReq = Standard_True;
@@ -527,11 +531,14 @@ static Standard_Integer BoundBox(Draw_Interpretor& theDI,
       aResShapeName = theArgVal[++anArgIter];
       hasToDraw = Standard_False;
     }
-    else if (anArgCase == "-dump"
-          || anArgCase == "-print")
+    else if (anArgCase == "-print")
     {
       doPrint = Standard_True;
     }
+    else if (anArgCase == "-dump")
+    {
+      doDump = Standard_True;
+    }
     else if (anArgCase == "-save"
           && anArgIter + 6 < theNArg
           && anOutVars[0].IsEmpty())
@@ -601,7 +608,7 @@ static Standard_Integer BoundBox(Draw_Interpretor& theDI,
   }
 
   // enable printing (old syntax) if neither saving to shape nor to DRAW variables is requested
-  if (! doPrint && anOutVars[0].IsEmpty() && aResShapeName.IsEmpty())
+  if (! doPrint && ! doDump && anOutVars[0].IsEmpty() && aResShapeName.IsEmpty())
   {
     doPrint = Standard_True;
     useOldSyntax = Standard_True;
@@ -636,6 +643,15 @@ static Standard_Integer BoundBox(Draw_Interpretor& theDI,
             << "Half Z: " << anOBB.ZHSize() << "\n";
     }
 
+    if (doDump)
+    {
+      Standard_SStream aStream;
+      anOBB.Dump (aStream);
+
+      theDI << "Oriented bounding box\n";
+      theDI << Standard_Dump::ConvertDumpToText (aStream);
+    }
+
     if (hasToDraw
     && !anOBB.IsVoid())
     {
@@ -1475,7 +1491,7 @@ void  BRepTest::BasicCommands(Draw_Interpretor& theCommands)
   theCommands.Add ("bounding",
                    "bounding {shape | xmin ymin zmin xmax ymax zmax}"
          "\n\t\t:            [-obb] [-noTriangulation] [-optimal] [-extToler]"
-         "\n\t\t:            [-dump] [-shape name] [-nodraw] [-finitePart]"
+         "\n\t\t:            [-dump] [-print] [-shape name] [-nodraw] [-finitePart]"
          "\n\t\t:            [-save xmin ymin zmin xmax ymax zmax]"
          "\n\t\t:"
          "\n\t\t: Computes a bounding box. Two types of the source data are supported:"
@@ -1492,9 +1508,10 @@ void  BRepTest::BasicCommands(Draw_Interpretor& theCommands)
          "\n\t\t:  -extToler Include tolerance of the shape in the resulting box."
          "\n\t\t:"
          "\n\t\t: Output options:"
-         "\n\t\t:  -dump    Prints the information about computed Bounding Box."
+         "\n\t\t:  -print   Prints the information about computed Bounding Box."
          "\n\t\t:           It is enabled by default (with plain old syntax for AABB)"
          "\n\t\t:           if neither -shape nor -save is specified."
+         "\n\t\t:  -dump    Prints Dump information about Bounding Box."
          "\n\t\t:  -shape   Stores computed box as solid in DRAW variable with specified name."
          "\n\t\t:  -save    Stores min and max coordinates of AABB in specified variables."
          "\n\t\t:  -noDraw  Avoid drawing resulting Bounding Box in DRAW viewer."
index 920c278a4141b8e58e59a387c188f9f52a0bfe92..850fe7860c79976b2ab5dda08280103e6ee0a9b8 100644 (file)
@@ -19,6 +19,7 @@
 #include <BVH_Constants.hxx>
 #include <BVH_Types.hxx>
 #include <Standard_ShortReal.hxx>
+#include <Standard_Dump.hxx>
 
 #include <limits>
 
@@ -108,6 +109,15 @@ public:
   //! Returns center of bounding box along the given axis.
   T Center (const Standard_Integer theAxis) const;
 
+  //! Dumps the content of me into the stream
+  void Dump (Standard_OStream& theOStream) const
+  {
+    Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (BVH_Box));
+    DUMP_FIELD_VALUES (theOStream, IsValid());
+    Bnd_Box aBndBox = BVH::ToBndBox (CornerMin(), CornerMax());
+    DUMP_FIELD_VALUES_SUBCLASS (theOStream, &aBndBox);
+  }
+
 public:
 
   //! Checks if the Box is out of the other box.
index a223d14b30f868bb7042a26a5e6817070e267aa3..f9f89dbd21aa4f239925248cd35d60d71f8af67f 100644 (file)
@@ -27,6 +27,11 @@ class BVH_TreeBaseTransient : public Standard_Transient
   DEFINE_STANDARD_RTTIEXT(BVH_TreeBaseTransient, Standard_Transient)
 protected:
   BVH_TreeBaseTransient() {}
+  //! Dumps the content of me into the stream
+  virtual void Dump (Standard_OStream& theOStream) const { (void)theOStream; }
+  //! Dumps the content of me into the stream
+  virtual void DumpNode (const int theNodeIndex, Standard_OStream& theOStream) const
+  { (void)theNodeIndex; (void)theOStream; }
 };
 
 //! Stores parameters of bounding volume hierarchy (BVH).
@@ -178,6 +183,34 @@ public: //! @name methods for accessing serialized tree data
     return myMaxPointBuffer;
   }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE
+  {
+    Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (BVH_TreeBase));
+    DUMP_FIELD_VALUES (theOStream, myDepth);
+    DUMP_FIELD_VALUES (theOStream, Length());
+
+    for (Standard_Integer aNodeIdx = 0; aNodeIdx < Length(); ++aNodeIdx)
+    {
+       DumpNode (aNodeIdx, theOStream);
+    }
+  }
+
+  //! Dumps the content of node into the stream
+  Standard_EXPORT virtual void DumpNode (const int theNodeIndex, Standard_OStream& theOStream) const Standard_OVERRIDE
+  {
+    Standard_Dump::Sentry aSentry (theOStream, "BVH_TreeNode");
+    DUMP_FIELD_VALUES (theOStream, theNodeIndex);
+
+    Bnd_Box aBndBox = BVH::ToBndBox (MinPoint (theNodeIndex), MaxPoint (theNodeIndex));
+    DUMP_FIELD_VALUES_SUBCLASS (theOStream, &aBndBox);
+
+    DUMP_FIELD_VALUES (theOStream, BegPrimitive (theNodeIndex));
+    DUMP_FIELD_VALUES (theOStream, EndPrimitive (theNodeIndex));
+    DUMP_FIELD_VALUES (theOStream, Level (theNodeIndex));
+    DUMP_FIELD_VALUES (theOStream, IsOuter (theNodeIndex));
+  }
+
 public: //! @name protected fields
 
   //! Array of node data records.
index 6cbf7ae9161392911dcf42480158ad959bc06323..fcbc66bca195ab65cdba56281f01b6a83993c3a1 100644 (file)
 
 #include <vector>
 
+#include <Bnd_Box.hxx>
 #include <NCollection_Mat4.hxx>
 #include <NCollection_Vec2.hxx>
 #include <NCollection_Vec3.hxx>
 #include <NCollection_Vector.hxx>
+#include <Standard_OStream.hxx>
 #include <Standard_Type.hxx>
 
 // GCC supports shrink function only in C++11 mode
@@ -57,6 +59,32 @@ namespace BVH
     typedef NCollection_Vec3<T> Type;
   };
 
+  template<class T> Bnd_Box ToBndBox (const T& theType1, const T& theType2)
+  {
+    return Bnd_Box (theType1, 0., 0., theType2, 0., 0.);
+  }
+
+  template<class T> Bnd_Box ToBndBox (const NCollection_Vec2<T>& theType1,
+                                      const NCollection_Vec2<T>& theType2)
+  {
+    return Bnd_Box (theType1.x(), theType1.y(), 0.,
+                    theType2.x(), theType2.y(), 0.);
+  }
+
+  template<class T> Bnd_Box ToBndBox (const NCollection_Vec3<T>& theType1,
+                                      const NCollection_Vec3<T>& theType2)
+  {
+    return Bnd_Box (theType1.x(), theType1.y(), theType1.z(),
+                    theType2.x(), theType2.y(), theType2.z());
+  }
+
+  template<class T> Bnd_Box ToBndBox (const NCollection_Vec4<T>& theType1,
+                                      const NCollection_Vec4<T>& theType2)
+  {
+    return Bnd_Box (theType1.x(), theType1.y(), theType1.z(),
+                    theType2.x(), theType2.y(), theType2.z());
+  }
+
   template<class T> struct VectorType<T, 4>
   {
     typedef NCollection_Vec4<T> Type;
index 1b4ab44b530d1152a35ee2fd363e223955fb7ee0..e82f372171248783232d9e9fbfdfeb1adf93dd66 100644 (file)
@@ -21,6 +21,7 @@
 #include <gp_Pnt.hxx>
 #include <gp_Trsf.hxx>
 #include <Standard_ConstructionError.hxx>
+#include <Standard_Dump.hxx>
 
 // set the flag to one
 #define ClearVoidFlag() ( Flags &= ~VoidMask )
@@ -43,6 +44,19 @@ Bnd_Box::Bnd_Box()
   SetVoid();
 }
 
+//=======================================================================
+//function : Bnd_Box
+//purpose  : 
+//=======================================================================
+Bnd_Box::Bnd_Box (const Standard_Real theXmin, const Standard_Real theYmin, const Standard_Real theZmin,
+                  const Standard_Real theXmax, const Standard_Real theYmax, const Standard_Real theZmax)
+: Gap (0.0)
+{
+  SetVoid();
+  Update (theXmin, theYmin, theZmin, theXmax, theYmax, theZmax);
+}
+
+
 //=======================================================================
 //function : Set
 //purpose  : 
@@ -957,3 +971,21 @@ void Bnd_Box::Dump () const
   std::cout << "\n Gap : " << Gap;
   std::cout << "\n";
 }
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void Bnd_Box::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Bnd_Box));
+
+  DUMP_FIELD_VALUES (theOStream, Xmin);
+  DUMP_FIELD_VALUES (theOStream, Ymin);
+  DUMP_FIELD_VALUES (theOStream, Zmin);
+  DUMP_FIELD_VALUES (theOStream, Xmax);
+  DUMP_FIELD_VALUES (theOStream, Ymax);
+  DUMP_FIELD_VALUES (theOStream, Zmax);
+  DUMP_FIELD_VALUES (theOStream, Gap);
+  DUMP_FIELD_VALUES (theOStream, Flags);
+}
index 834338f5bf66aaa4f7ca76376d2b404a484dbaef..3e0ec9724b80d74bc850332c0db310842f3461bc 100644 (file)
@@ -69,6 +69,13 @@ public:
   //! The constructed box is qualified Void. Its gap is null.
   Standard_EXPORT Bnd_Box();
 
+  //! Creates a bounding box, it contains:
+  //! -   interval [ aXmin,aXmax ] in the "X Direction",
+  //! -   interval [ aYmin,aYmax ] in the "Y Direction",
+  //! -   interval [ aZmin,aZmax ] in the "Z Direction";
+  //! The constructed box is qualified Void. Its gap is null.
+  Standard_EXPORT Bnd_Box (const Standard_Real aXmin, const Standard_Real aYmin, const Standard_Real aZmin,
+                           const Standard_Real aXmax, const Standard_Real aYmax, const Standard_Real aZmax);
   //! Sets this bounding box so that it  covers the whole of 3D space.
   //! It is infinitely  long in all directions.
   void SetWhole() { Flags = WholeMask; }
@@ -296,6 +303,9 @@ public:
          && Xmax >= Xmin;
   }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 protected:
 
   //! Bit flags.
index 0120cfe1de589db772b0d35981ec9941a0f2ab99..fd9805706c54fa92852baad90b9b601dc5dcc65b 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <NCollection_Array1.hxx>
 #include <Precision.hxx>
+#include <Standard_Dump.hxx>
 #include <TColStd_Array1OfReal.hxx>
 
 //! Auxiliary class to select from the points stored in
@@ -992,3 +993,21 @@ void Bnd_OBB::Add(const Bnd_OBB& theOther)
   ReBuild(TColgp_Array1OfPnt(aList[0], 0, 15));
 }
 
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void Bnd_OBB::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Bnd_OBB));
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myCenter);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &XDirection());
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &YDirection());
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &ZDirection());
+
+  DUMP_FIELD_VALUES (theOStream, XHSize());
+  DUMP_FIELD_VALUES (theOStream, YHSize());
+  DUMP_FIELD_VALUES (theOStream, ZHSize());
+  DUMP_FIELD_VALUES (theOStream, myIsAABox);
+}
index ffed615cca06f6e208b5c3aa8b95708c55bafd82..de3c0e533c2e6f40a4f0ae8953928cd3c4acb068 100644 (file)
@@ -20,6 +20,7 @@
 #include <Standard_Handle.hxx>
 #include <Standard_Real.hxx>
 #include <Standard_Boolean.hxx>
+#include <Standard_OStream.hxx>
 
 #include <Bnd_Box.hxx>
 #include <gp_Ax3.hxx>
@@ -281,6 +282,9 @@ public:
   //! (which it was created from) and theP.
   Standard_EXPORT void Add(const gp_Pnt& theP);
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 protected:
 
     void ProcessOnePoint(const gp_Pnt& theP)
index 63d0961343971e3b10963f5bfbe4020547473493..f5bdc81da99fb8ed73d725478821bc4abb412613 100644 (file)
@@ -15,6 +15,7 @@
 
 
 #include <Bnd_Range.hxx>
+#include <Standard_Dump.hxx>
 
 //=======================================================================
 //function : Common
@@ -174,4 +175,15 @@ void Bnd_Range::Split(const Standard_Real theVal,
   {
     theList.Append(Bnd_Range(aValPrev, myLast));
   }
-}
\ No newline at end of file
+}
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Bnd_Range::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Bnd_Range));
+
+  DUMP_FIELD_VALUES (theOStream, myFirst);
+  DUMP_FIELD_VALUES (theOStream, myLast);
+}
index 0c006d27d9ca771c26c7727098ed68b26e5a1c9f..cf07eef1fd3aa95f392f9bba5a6295bc77fd9255 100644 (file)
@@ -256,6 +256,9 @@ public:
     return ((myFirst == theOther.myFirst) && (myLast == theOther.myLast));
   }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 private:
 
   Standard_Real myFirst; //!< Start of range
index 1a2c358d6759c8d2c6cfea7be6dc5394191789d2..31fb75226d73442672b3b4585b6a08dc482ad45c 100755 (executable)
@@ -112,6 +112,7 @@ Graphic3d_NameOfTexture2D.hxx
 Graphic3d_NameOfTextureEnv.hxx
 Graphic3d_NameOfTexturePlane.hxx
 Graphic3d_NMapOfTransient.hxx
+Graphic3d_PolygonOffset.cxx
 Graphic3d_PolygonOffset.hxx
 Graphic3d_PriorityDefinitionError.hxx
 Graphic3d_RenderingMode.hxx
index b8d12a4937c914ad60e56f163176c877bdd368be..a3dc1e5f0d40858149aa4e0b2128cd3a82b461cc 100644 (file)
@@ -12,6 +12,7 @@
 // commercial license or contractual agreement.
 
 #include <Graphic3d_Aspects.hxx>
+#include <Standard_Dump.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(Graphic3d_Aspects, Standard_Transient)
 
@@ -60,3 +61,52 @@ void Graphic3d_Aspects::SetTextureMap (const Handle(Graphic3d_TextureMap)& theTe
 
   myTextureSet = new Graphic3d_TextureSet (theTexture);
 }
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void Graphic3d_Aspects::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Graphic3d_Aspects));
+
+  /*Handle(Graphic3d_ShaderProgram)  myProgram;
+  Handle(Graphic3d_TextureSet)     myTextureSet;
+  Handle(Graphic3d_MarkerImage)    myMarkerImage;
+  Handle(Graphic3d_HatchStyle)     myHatchStyle;
+  Handle(TCollection_HAsciiString) myTextFont;
+  Graphic3d_MaterialAspect         myFrontMaterial;
+  Graphic3d_MaterialAspect         myBackMaterial;
+  */
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myInteriorColor);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myBackInteriorColor);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myEdgeColor);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myPolygonOffset);
+
+
+  /*Aspect_InteriorStyle         myInteriorStyle;
+  Graphic3d_TypeOfShadingModel myShadingModel;
+  Graphic3d_AlphaMode          myAlphaMode;
+  Standard_ShortReal           myAlphaCutoff;
+
+  Aspect_TypeOfLine            myLineType;
+  Standard_ShortReal           myLineWidth;
+
+  Aspect_TypeOfMarker          myMarkerType;
+  Standard_ShortReal           myMarkerScale;
+
+  Aspect_TypeOfStyleText   myTextStyle;
+  Aspect_TypeOfDisplayText myTextDisplayType;
+  Font_FontAspect          myTextFontAspect;
+  Standard_ShortReal       myTextAngle;
+  */
+
+  DUMP_FIELD_VALUES (theOStream, myToSkipFirstEdge);
+  DUMP_FIELD_VALUES (theOStream, myToDistinguishMaterials);
+  DUMP_FIELD_VALUES (theOStream, myToDrawEdges);
+  DUMP_FIELD_VALUES (theOStream, myToDrawSilhouette);
+  DUMP_FIELD_VALUES (theOStream, myToSuppressBackFaces);
+  DUMP_FIELD_VALUES (theOStream, myToMapTexture);
+  DUMP_FIELD_VALUES (theOStream, myIsTextZoomable);
+}
index 70aa6a2779e874163b36161fa985e8128e0fd3ce..6bdb6e17a2238f2d389bff8783f29e39db685bd5 100644 (file)
@@ -477,6 +477,9 @@ public:
         && myIsTextZoomable == theOther.myIsTextZoomable;
   }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 protected:
 
   Handle(Graphic3d_ShaderProgram)  myProgram;
index 4e7966d60b744a577cb60f78a4a40bf2029cb650..7f09e556b38717955acd52a4de59440634f4fce5 100644 (file)
@@ -447,3 +447,18 @@ void Graphic3d_Group::AddText (const Handle(Graphic3d_Text)& theTextParams,
 
   Update();
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Graphic3d_Group::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Graphic3d_Group));
+
+  //Graphic3d_Structure* myStructure;     //!< pointer to the parent structure
+  //Graphic3d_BndBox4f   myBounds;        //!< bounding box
+
+  DUMP_FIELD_VALUES (theOStream, myIsClosed);
+  DUMP_FIELD_VALUES (theOStream, myContainsFacet);
+}
index 289e0139e80e52c9f814874d70e20ca29a7f0715..edf18ad6ed29e33cfd209639a88785db38ad1894 100644 (file)
@@ -280,6 +280,9 @@ public:
                                      const Standard_Boolean                  theHasOwnAnchor = Standard_True);
 
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const;
+
 protected:
 
   //! Creates a group in the structure <AStructure>.
diff --git a/src/Graphic3d/Graphic3d_PolygonOffset.cxx b/src/Graphic3d/Graphic3d_PolygonOffset.cxx
new file mode 100644 (file)
index 0000000..555134c
--- /dev/null
@@ -0,0 +1,29 @@
+// Copyright (c) 2016 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 <Graphic3d_PolygonOffset.hxx>
+
+#include <Standard_Dump.hxx>
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void Graphic3d_PolygonOffset::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Graphic3d_PolygonOffset));
+
+  DUMP_FIELD_VALUES (theOStream, Mode);
+  DUMP_FIELD_VALUES (theOStream, Factor);
+  DUMP_FIELD_VALUES (theOStream, Units);
+}
index 6bc5d092974c5f7a98e3ece52554d1db59caf6ed..1e4bda9d2c2020324f7be0c036ec1ebda7228b53 100644 (file)
@@ -15,6 +15,7 @@
 #define _Graphic3d_PolygonOffset_HeaderFile
 
 #include <Aspect_PolygonOffsetMode.hxx>
+#include <Standard_OStream.hxx>
 
 //! Polygon offset parameters.
 struct Graphic3d_PolygonOffset
@@ -33,6 +34,10 @@ struct Graphic3d_PolygonOffset
         && Factor == theOther.Factor
         && Units == theOther.Units;
   }
+
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 };
 
 #endif // _Graphic3d_PolygonOffset_HeaderFile
index 13cf99027953a30e9b7dfbe1ad2923418da81bd9..a678aa9ae6a63482e369bf0eacf5cf2dd9e0efca 100644 (file)
@@ -114,3 +114,19 @@ void OpenGl_Aspects::Release (OpenGl_Context* theContext)
   myResSprite.Release (theContext);
   myResProgram.Release (theContext);
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void OpenGl_Aspects::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (OpenGl_Aspects));
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myAspect);
+  DUMP_FIELD_VALUES (theOStream, myShadingModel);
+
+  //mutable OpenGl_AspectsProgram    myResProgram;
+  //mutable OpenGl_AspectsTextureSet myResTextureSet;
+  //mutable OpenGl_AspectsSprite     myResSprite;
+}
index 9e881dfebc46928ab0f9dd4a21466f0672fb44c2..a5c98131184c6cfd7220f059530b0eff8a7a5b23 100644 (file)
@@ -89,6 +89,9 @@ public:
   //! Update presentation aspects parameters after their modification.
   virtual void SynchronizeAspects() Standard_OVERRIDE { SetAspect (myAspect); }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 protected:
 
   //! OpenGl resources
index 1a9a3e9011036cfb5be99b932afc07d68b51a0e6..038b98abd012d7e78634a0dfc436b23558978e89 100644 (file)
@@ -353,3 +353,21 @@ void OpenGl_Group::Release (const Handle(OpenGl_Context)& theGlCtx)
 
   OpenGl_Element::Destroy (theGlCtx.get(), myAspects);
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void OpenGl_Group::Dump (Standard_OStream& theOStream) const
+{ 
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (OpenGl_Group));
+
+  DUMP_FIELD_VALUES_PARENT (theOStream, Graphic3d_Group);
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myAspects);
+  //OpenGl_CappingPlaneResource* myAspectFillCapping;
+  //OpenGl_ElementNode* myFirst;
+  //OpenGl_ElementNode* myLast;
+
+  DUMP_FIELD_VALUES (theOStream, myIsRaytracable);
+}
index 4f03f02b4b4b61a7328070bc6e84d16093f10bde..b50db2d82d604578fa4376820965484b6924b7a3 100644 (file)
@@ -111,6 +111,9 @@ public:
   //! Returns OpenGL capping filling aspect.
   const OpenGl_CappingPlaneResource* AspectFillCapping() const { return myAspectFillCapping; }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 protected:
 
   Standard_EXPORT virtual ~OpenGl_Group();
index dcd3b0204cc9d39a15a0e30b67afdbf0796569b5..a7471716d01e8a6b1b516175cc4c9a6bb4c2904b 100644 (file)
@@ -15,6 +15,7 @@
 #include <Prs3d_ArrowAspect.hxx>
 
 #include <Prs3d_InvalidAngle.hxx>
+#include <Standard_Dump.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_ArrowAspect, Prs3d_BasicAspect)
 
@@ -65,3 +66,17 @@ void Prs3d_ArrowAspect::SetAngle (const Standard_Real theAngle)
                             || theAngle >= M_PI / 2.0, "Prs3d_ArrowAspect::SetAngle() - angle out of range");
   myAngle = theAngle;
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Prs3d_ArrowAspect::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Prs3d_ArrowAspect));
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myArrowAspect);
+
+  DUMP_FIELD_VALUES (theOStream, myAngle);
+  DUMP_FIELD_VALUES (theOStream, myLength);
+}
index 6489b5a0dbe723a87f3efd3a532733105c728076..d060ff18dabc256b87f435dbb9d796e0221fd804 100644 (file)
@@ -57,6 +57,9 @@ public:
   
   void SetAspect (const Handle(Graphic3d_AspectLine3d)& theAspect) { myArrowAspect = theAspect; }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 protected:
 
   Handle(Graphic3d_AspectLine3d) myArrowAspect;
index 7578c71a2077a987fab854d50054743fb6c28be5..19c5541a2c3be9ea3f06f35278143cd2f2724139 100644 (file)
@@ -17,6 +17,7 @@
 #define _Prs3d_BasicAspect_HeaderFile
 
 #include <Standard.hxx>
+#include <Standard_OStream.hxx>
 #include <Standard_Type.hxx>
 #include <Standard_Transient.hxx>
 
 class Prs3d_BasicAspect : public Standard_Transient
 {
   DEFINE_STANDARD_RTTIEXT(Prs3d_BasicAspect, Standard_Transient)
+
+  //! Dumps the content of me into the stream
+  virtual void Dump (Standard_OStream& theOStream) const = 0;
+
 };
 
 DEFINE_STANDARD_HANDLE(Prs3d_BasicAspect, Standard_Transient)
index 5afab0e8d72b863aa8d7aae0dff993baa3488fe1..398e96e467f31db082beca01b7f346739800eb7a 100644 (file)
@@ -14,6 +14,8 @@
 
 #include <Prs3d_DatumAspect.hxx>
 
+#include <Standard_Dump.hxx>
+
 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_DatumAspect, Prs3d_BasicAspect)
 
 // =======================================================================
@@ -167,3 +169,25 @@ Prs3d_DatumParts Prs3d_DatumAspect::ArrowPartForAxis (Prs3d_DatumParts thePart)
   }
   return Prs3d_DP_None;
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Prs3d_DatumAspect::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Prs3d_DatumAspect));
+
+  DUMP_FIELD_VALUES (theOStream, myAxes);
+  DUMP_FIELD_VALUES (theOStream, myToDrawLabels);
+  DUMP_FIELD_VALUES (theOStream, myToDrawArrows);
+
+  //NCollection_DataMap<Prs3d_DatumAttribute, Standard_Real> myAttributes;
+  //NCollection_DataMap<Prs3d_DatumParts, Handle(Prs3d_ShadingAspect)> myShadedAspects;
+  //NCollection_DataMap<Prs3d_DatumParts, Handle(Prs3d_LineAspect)> myLineAspects;
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myTextAspect);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myPointAspect);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myArrowAspect);
+}
+
index 69bb3c2ced3e54d150474e773991ebe23675ca4f..53a5a4ba1a985928ec3dddcdc2d3c49623859bdd 100644 (file)
@@ -153,6 +153,9 @@ public:
   //! Returns type of arrow for a type of axis
   Standard_EXPORT Prs3d_DatumParts ArrowPartForAxis (Prs3d_DatumParts thePart) const;
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 private:
   Prs3d_DatumAxes myAxes;
   Standard_Boolean myToDrawLabels;
index 6e1141f9cd4a425fb70e060423cb5737b8ba9a17..7b1b54a9e4cb4bc8300238e3c6e3681313330343 100755 (executable)
@@ -16,6 +16,7 @@
 
 #include <Aspect_TypeOfLine.hxx>
 #include <Graphic3d_AspectText3d.hxx>
+#include <Standard_Dump.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_DimensionAspect, Prs3d_BasicAspect)
 
@@ -59,3 +60,27 @@ void Prs3d_DimensionAspect::SetCommonColor (const Quantity_Color& theColor)
   myTextAspect->SetColor (theColor);
   myArrowAspect->SetColor (theColor);
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Prs3d_DimensionAspect::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Prs3d_DimensionAspect));
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myLineAspect);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myTextAspect);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myArrowAspect);
+
+  DUMP_FIELD_VALUES (theOStream, myValueStringFormat);
+  DUMP_FIELD_VALUES (theOStream, myExtensionSize);
+  DUMP_FIELD_VALUES (theOStream, myArrowTailSize);
+  DUMP_FIELD_VALUES (theOStream, myArrowOrientation);
+  DUMP_FIELD_VALUES (theOStream, myTextHPosition);
+  DUMP_FIELD_VALUES (theOStream, myTextVPosition);
+  DUMP_FIELD_VALUES (theOStream, myToDisplayUnits);
+  DUMP_FIELD_VALUES (theOStream, myIsText3d);
+  DUMP_FIELD_VALUES (theOStream, myIsTextShaded);
+  DUMP_FIELD_VALUES (theOStream, myIsArrows3d);
+}
+
index c6b80ac0998232c5205e945f3870b323286a947e..ceb8177edd67ae103f5a77ce014ea4adc5f073d8 100644 (file)
@@ -115,6 +115,9 @@ public:
   //! Returns format.
   const TCollection_AsciiString& ValueStringFormat() const { return myValueStringFormat; }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 protected:
 
   Handle(Prs3d_LineAspect)  myLineAspect;
index dc1d3f810d7b139d621ea0fa82e01f40b140270c..08d2375aca7c489961da623a8c2139050dd9a42a 100644 (file)
@@ -27,6 +27,7 @@
 #include <Prs3d_PointAspect.hxx>
 #include <Prs3d_ShadingAspect.hxx>
 #include <Prs3d_TextAspect.hxx>
+#include <Standard_Dump.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_Drawer, Graphic3d_PresentationAttributes)
 
@@ -1433,3 +1434,14 @@ bool Prs3d_Drawer::SetShadingModel (Graphic3d_TypeOfShadingModel theModel,
 
   return isUpdateNeeded;
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Prs3d_Drawer::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Prs3d_Drawer));
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myShadingAspect);
+}
index 274dd4de5342099404bda44927ba180b39a1d2b4..87498f6fe43ed4065ee03a69d4e4884bbf04979f 100644 (file)
@@ -902,6 +902,9 @@ public:
   Standard_EXPORT bool SetShadingModel (Graphic3d_TypeOfShadingModel theModel,
                                         bool theToOverrideDefaults = false);
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 protected:
 
   Handle(Prs3d_Drawer)          myLink;
index b648b1026a697fc0ed113ab1b5c8947a707e3d1e..6bc1c94175fb1e43827eeb39696520a1c9206c48 100644 (file)
@@ -14,6 +14,8 @@
 
 #include <Prs3d_LineAspect.hxx>
 
+#include <Standard_Dump.hxx>
+
 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_LineAspect, Prs3d_BasicAspect)
 
 // =======================================================================
@@ -27,3 +29,14 @@ Prs3d_LineAspect::Prs3d_LineAspect (const Quantity_Color& theColor,
 {
   //
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Prs3d_LineAspect::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Prs3d_LineAspect));
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myAspect);
+}
+
index cb20cfb64720e3e96c282635b40adc57f7108647..665821ac1d2b000ed48f3c92bede56ddc184a68f 100644 (file)
@@ -63,6 +63,9 @@ public:
   
   void SetAspect (const Handle(Graphic3d_AspectLine3d)& theAspect) { myAspect = theAspect; }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 protected:
 
   Handle(Graphic3d_AspectLine3d) myAspect;
index 8d71bb33bce4e22c59fe95c2d911d154de0daa28..69cc3bf35a45ef9ec283e94b60cc045438ff245f 100644 (file)
@@ -14,6 +14,8 @@
 
 #include <Prs3d_PlaneAspect.hxx>
 
+#include <Standard_Dump.hxx>
+
 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_PlaneAspect, Prs3d_BasicAspect)
 
 // =======================================================================
@@ -37,3 +39,27 @@ Prs3d_PlaneAspect::Prs3d_PlaneAspect()
 {
   //
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Prs3d_PlaneAspect::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Prs3d_PlaneAspect));
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myEdgesAspect);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myIsoAspect);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myArrowAspect);
+
+  DUMP_FIELD_VALUES (theOStream, myArrowsLength);
+  DUMP_FIELD_VALUES (theOStream, myArrowsSize);
+  DUMP_FIELD_VALUES (theOStream, myArrowsAngle);
+  DUMP_FIELD_VALUES (theOStream, myPlaneXLength);
+  DUMP_FIELD_VALUES (theOStream, myPlaneYLength);
+  DUMP_FIELD_VALUES (theOStream, myIsoDistance);
+  DUMP_FIELD_VALUES (theOStream, myDrawCenterArrow);
+  DUMP_FIELD_VALUES (theOStream, myDrawEdgesArrows);
+  DUMP_FIELD_VALUES (theOStream, myDrawEdges);
+  DUMP_FIELD_VALUES (theOStream, myDrawIso);
+}
+
index 4833059bc7aac44ef5051f4a0d3a194dd4ae48c8..481613135d10f0e57f801cfff68ded2bae60112f 100644 (file)
@@ -96,6 +96,9 @@ public:
   //! Returns the distance between isoparameters used in the display of planes.
   Standard_Real IsoDistance() const { return myIsoDistance; }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 protected:
 
   Handle(Prs3d_LineAspect) myEdgesAspect;
index b69b01689fc7163dee2a1f479f0663dbde62736a..9a630ef9562fdf79023a6951d32265782f3b6872 100644 (file)
@@ -14,6 +14,8 @@
 
 #include <Prs3d_PointAspect.hxx>
 
+#include <Standard_Dump.hxx>
+
 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_PointAspect, Prs3d_BasicAspect)
 
 // =======================================================================
@@ -40,3 +42,14 @@ Prs3d_PointAspect::Prs3d_PointAspect (const Quantity_Color& theColor,
 {
   //
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Prs3d_PointAspect::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Prs3d_PointAspect));
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myAspect);
+}
+
index 7c2fcd3c70d8428dd672fdea325cbb54d4650291..16e35038ec85398d5021cc1504bf1565fd68100a 100644 (file)
@@ -61,6 +61,9 @@ public:
   //! Returns marker's texture.
   const Handle(Graphic3d_MarkerImage)& GetTexture() const { return myAspect->GetMarkerImage(); }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 protected:
 
   Handle(Graphic3d_AspectMarker3d) myAspect;
index 102deb416ad13fb0cc5f24af17213bde86bcfd17..a35cf375eac88a7702556ff09230404d87ca6bc9 100644 (file)
@@ -18,6 +18,7 @@
 #include <Graphic3d_MaterialAspect.hxx>
 #include <Quantity_Color.hxx>
 #include <Standard_Type.hxx>
+#include <Standard_Dump.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_ShadingAspect, Prs3d_BasicAspect)
 
@@ -164,3 +165,15 @@ Standard_Real Prs3d_ShadingAspect::Transparency (const Aspect_TypeOfFacingModel
   }
   return 0.0;
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Prs3d_ShadingAspect::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Prs3d_ShadingAspect), this);
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myAspect);
+}
+
index 8510621a3161fea778681686dc25996222c548f1..4192321d132251b7109e141f86d2b159399020da 100644 (file)
@@ -62,6 +62,9 @@ public:
 
   void SetAspect (const Handle(Graphic3d_AspectFillArea3d)& theAspect) { myAspect = theAspect; }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 protected:
 
   Handle(Graphic3d_AspectFillArea3d) myAspect;
index d194818103ddf2cd075fccb3f18895923adf121e..f50afab7c94bf2894d93bf37ba589d6e5e58fd0f 100644 (file)
@@ -17,6 +17,7 @@
 #include <Prs3d_TextAspect.hxx>
 
 #include <Font_NameOfFont.hxx>
+#include <Standard_Dump.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(Prs3d_TextAspect, Prs3d_BasicAspect)
 
@@ -47,3 +48,21 @@ Prs3d_TextAspect::Prs3d_TextAspect (const Handle(Graphic3d_AspectText3d)& theAsp
 {
   //
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void Prs3d_TextAspect::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Prs3d_TextAspect));
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myTextAspect);
+
+  DUMP_FIELD_VALUES (theOStream, "Height");
+
+  DUMP_FIELD_VALUES (theOStream, "HorizontalJustification");
+  DUMP_FIELD_VALUES (theOStream, "VerticalJustification");
+  DUMP_FIELD_VALUES (theOStream, "Orientation");
+}
+
index cf59e1aefa0d1833ce50ad375f37435a188ccf12..31ffef706aff4df4199e8b0fcf6729fe17aa1d81 100644 (file)
@@ -97,6 +97,9 @@ public:
 
   void SetAspect (const Handle(Graphic3d_AspectText3d)& theAspect) { myTextAspect = theAspect; }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 protected:
 
   Handle(Graphic3d_AspectText3d) myTextAspect;
index b3730f08d803155a1e878fb7cc2a24ea436ae324..aba0dffea9c4e662abf5a5ce1185d17248f3d6d5 100644 (file)
@@ -837,3 +837,39 @@ void PrsMgr_PresentableObject::PolygonOffsets (Standard_Integer&   theMode,
     myDrawer->ShadingAspect()->Aspect()->PolygonOffsets (theMode, theFactor, theUnits);
   }
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void PrsMgr_PresentableObject::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (PrsMgr_PresentableObject));
+
+  DUMP_FIELD_VALUES (theOStream, myParent);
+
+  DUMP_FIELD_VALUES (theOStream, myOwnWidth);
+  DUMP_FIELD_VALUES (theOStream, hasOwnColor);
+  DUMP_FIELD_VALUES (theOStream, hasOwnMaterial);
+
+  DUMP_FIELD_VALUES (theOStream, myInfiniteState);
+  DUMP_FIELD_VALUES (theOStream, myIsMutable);
+  DUMP_FIELD_VALUES (theOStream, myHasOwnPresentations);
+
+/*
+  PrsMgr_Presentations                   myPresentations;           //!< list of presentations
+  Handle(Graphic3d_SequenceOfHClipPlane) myClipPlanes;              //!< sequence of object-specific clipping planes
+  Handle(Prs3d_Drawer)                   myDrawer;                  //!< main presentation attributes
+  Handle(Prs3d_Drawer)                   myHilightDrawer;           //!< (optional) custom presentation attributes for highlighting selected object
+  Handle(Prs3d_Drawer)                   myDynHilightDrawer;        //!< (optional) custom presentation attributes for highlighting detected object
+  Handle(Graphic3d_TransformPers)        myTransformPersistence;    //!< transformation persistence
+  Handle(Geom_Transformation)            myLocalTransformation;     //!< local transformation relative to parent object
+  Handle(Geom_Transformation)            myTransformation;          //!< absolute transformation of this object (combined parents + local transformations)
+  Handle(Geom_Transformation)            myCombinedParentTransform; //!< transformation of parent object (combined for all parents)
+  PrsMgr_ListOfPresentableObjects        myChildren;                //!< list of children
+  gp_GTrsf                               myInvTransformation;       //!< inversion of absolute transformation (combined parents + local transformations)
+  PrsMgr_TypeOfPresentation3d            myTypeOfPresentation3d;    //!< presentation type
+
+  Aspect_TypeOfFacingModel               myCurrentFacingModel;      //!< current facing model
+*/
+}
index 39676b151ed3872db5eef009c4804f5286f783f3..e7775838070e52b030cc1216465ee48e33a69a5b 100644 (file)
@@ -479,6 +479,9 @@ public: //! @name simplified presentation properties API
   //! Clears settings provided by the drawing tool aDrawer.
   Standard_EXPORT virtual void UnsetAttributes();
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const;
+
 public: //! @name deprecated methods
 
   //! gives the list of modes which are flagged "to be updated".
index ae29401215b62a149f37fbf3d329f5a1aa341008..b22e857bb091cc3a24e0dd4c7c9b3895439b93c9 100644 (file)
@@ -19,6 +19,7 @@
 #include <Quantity_ColorRGBA.hxx>
 #include <Standard_ErrorHandler.hxx>
 #include <Standard_OutOfRange.hxx>
+#include <Standard_Dump.hxx>
 #include <TCollection_AsciiString.hxx>
 
 #include <string.h>
@@ -3924,3 +3925,16 @@ void call_rgbhls (float r, float g, float b, float& h, float& l, float& s)
           if (h < 0.0) h += 360.0;
        }
 }
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void Quantity_Color::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Quantity_Color));
+
+  DUMP_FIELD_VALUES (theOStream, MyRed);
+  DUMP_FIELD_VALUES (theOStream, MyGreen);
+  DUMP_FIELD_VALUES (theOStream, MyBlue);
+}
index 07ce584ec6123624139b9a85f8d6552ff1fa8f61..404ddedccc1f8f4451fb34cb0dedd841e099f099 100644 (file)
@@ -264,6 +264,9 @@ Standard_Boolean operator == (const Quantity_Color& Other) const
   //! Internal test
   Standard_EXPORT static void Test();
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 private:
 
   //! Converts HLS components into RGB ones.
index b7ade567a5a82adb7a65ae0e9f0848ba7667b90a..5737bfbf021b7da510c33d8cbc7449074c9de682 100644 (file)
@@ -16,6 +16,7 @@
 #include <Quantity_ColorRGBA.hxx>
 
 #include <Graphic3d_Vec4.hxx>
+#include <Standard_Dump.hxx>
 
 #include <algorithm>
 
@@ -198,3 +199,15 @@ bool Quantity_ColorRGBA::ColorFromHex (const char* const   theHexColorString,
   const ColorInteger aColorComponentBase = isShort ? THE_HEX_COLOR_COMPONENT_SHORT_BASE : THE_HEX_COLOR_COMPONENT_BASE;
   return convertIntegerToColorRGBA (aHexColorInteger, aColorComponentBase, hasAlphaComponent, theColor);
 }
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void Quantity_ColorRGBA::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (Quantity_ColorRGBA));
+
+  DUMP_FIELD_VALUES (theOStream, myAlpha);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myRgb);
+}
index c67cd524890249c6c1f4f06dde8e20cd17ba22b5..a236100953be6ba01c0caf12af8fe4b5847c0718 100644 (file)
@@ -121,6 +121,9 @@ public:
                                             Quantity_ColorRGBA& theColor,
                                             const bool          theAlphaComponentIsOff = false);
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 private:
 
   static void myTestSize3() { Standard_STATIC_ASSERT (sizeof(float) * 3 == sizeof(Quantity_Color)); }
index f01a825c0eea7ff06ff6a543256c5ca0f2096cd9..8a98b3ae84918c2439558ac35ec0be5ce8c9cbf3 100644 (file)
 
 #include <SelectMgr_BaseFrustum.hxx>
 
+#include <Message.hxx>
+
+#include <Standard_Dump.hxx>
+
 IMPLEMENT_STANDARD_RTTIEXT(SelectMgr_BaseFrustum,Standard_Transient)
 
 //=======================================================================
@@ -245,3 +249,17 @@ gp_Pnt SelectMgr_BaseFrustum::DetectedPoint (const Standard_Real /*theDepth*/) c
 {
   return gp_Pnt (RealLast(), RealLast(), RealLast());
 }
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void SelectMgr_BaseFrustum::Dump(Standard_OStream& theOStream)const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (SelectMgr_BaseFrustum));
+
+  DUMP_FIELD_VALUES (theOStream, myPixelTolerance);
+  DUMP_FIELD_VALUES (theOStream, myIsOrthographic);
+  DUMP_FIELD_VALUES_POINTER (theOStream, myBuilder);
+  DUMP_FIELD_VALUES_POINTER (theOStream, myCamera);
+}
index 95062200c2b7efcea597c719c79cd75e8f604c5d..56556e0b6ffc2e8c2bbba8fd43be360b0cb93cef 100644 (file)
@@ -28,6 +28,8 @@
 #include <TColgp_Array1OfPnt.hxx>
 #include <TColgp_Array1OfPnt2d.hxx>
 
+#include <Standard_OStream.hxx>
+
 //! This class is an interface for different types of selecting frustums,
 //! defining different selection types, like point, box or polyline
 //! selection. It contains signatures of functions for detection of
@@ -171,6 +173,9 @@ public:
     return;
   }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const;
+
   DEFINE_STANDARD_RTTIEXT(SelectMgr_BaseFrustum,Standard_Transient)
 
 protected:
index d537c01dd67f9aa3935d67bc53b344a3759eea60..9b6dc83e7fc8ed2f4b9c4c7243271f21c1a90e32 100644 (file)
@@ -82,3 +82,17 @@ void SelectMgr_EntityOwner::HilightWithColor (const Handle(PrsMgr_PresentationMa
     mySelectable->HilightOwnerWithColor (thePM, theStyle, this);
   }
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void SelectMgr_EntityOwner::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (SelectMgr_EntityOwner));
+
+  DUMP_FIELD_VALUES_POINTER (theOStream, mySelectable);
+  DUMP_FIELD_VALUES (theOStream, mypriority);
+  DUMP_FIELD_VALUES (theOStream, myIsSelected);
+  DUMP_FIELD_VALUES (theOStream, myFromDecomposition);
+}
index 3e96e0f51a1d15e6ee16e63482a49e86b4020602..8eaa8b26d887fe09d564cf7c9257d956ef9d25db 100644 (file)
@@ -187,6 +187,9 @@ public:
   //! Sets flag indicating this owner points to a part of object (TRUE) or to entire object (FALSE).
   void SetComesFromDecomposition (const Standard_Boolean theIsFromDecomposition) { myFromDecomposition = theIsFromDecomposition; }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const;
+
 public:
 
   //! Sets the selectable object.
index 4980ecf7b6b73232c40cb429e6d5395e33f35ea1..e388801aa3910f0a4d6de1883c611801be4916ba 100644 (file)
@@ -548,3 +548,24 @@ const Handle(SelectMgr_EntityOwner)& SelectMgr_SelectableObject::GetAssemblyOwne
 {
   return THE_NULL_ENTITYOWNER;
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void SelectMgr_SelectableObject::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (SelectMgr_SelectableObject));
+
+  DUMP_FIELD_VALUES_PARENT (theOStream, PrsMgr_PresentableObject);
+
+  DUMP_FIELD_VALUES (theOStream, myGlobalSelMode);
+  //DUMP_FIELD_VALUES (theOStream, "mycurrent", mycurrent);
+  DUMP_FIELD_VALUES (theOStream, myAutoHilight);
+
+/*
+  SelectMgr_SequenceOfSelection myselections;    //!< list of selections
+  Handle(Prs3d_Presentation)    mySelectionPrs;  //!< optional presentation for highlighting selected object
+  Handle(Prs3d_Presentation)    myHilightPrs;    //!< optional presentation for highlighting detected object
+*/
+}
index 2da46a41202ad5c490f1a2d6124f1497f59af063..7eb75fe41e7542a62608878de29f18fd57e3d79f 100644 (file)
@@ -169,6 +169,9 @@ public:
   //! Returns common entity owner if the object is an assembly
   Standard_EXPORT virtual const Handle(SelectMgr_EntityOwner)& GetAssemblyOwner() const;
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT virtual void Dump (Standard_OStream& theOStream) const Standard_OVERRIDE;
+
 public:
 
   //! Begins the iteration scanning for sensitive primitives.
index d820ecd080a49811182fd1ad08f907403b2e4ee8..b60de4788117761b99cdb8e61ebcacc7860b73b3 100644 (file)
@@ -102,3 +102,18 @@ void SelectMgr_ViewClipRange::AddClippingPlanes (const Graphic3d_SequenceOfHClip
     }
   }
 }
+
+// =======================================================================
+// function : Dump
+// purpose  :
+// =======================================================================
+void SelectMgr_ViewClipRange::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (SelectMgr_ViewClipRange));
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myUnclipRange);
+  for (size_t aRangeIter = 0; aRangeIter < myClipRanges.size(); ++aRangeIter)
+  {
+    DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myClipRanges[aRangeIter]);
+  }
+}
index b2f012474b521f87233da25055aacef3e393dcdb..509d0f775fa52378d8804adc4337563d6799958e 100644 (file)
@@ -18,6 +18,8 @@
 
 #include <Bnd_Range.hxx>
 #include <Standard_TypeDef.hxx>
+#include <Standard_OStream.hxx>
+#include <Standard_Dump.hxx>
 
 #include <vector>
 
@@ -117,6 +119,9 @@ public:
   //! Adds a clipping sub-range (for clipping chains).
   void AddClipSubRange (const Bnd_Range& theRange) { myClipRanges.push_back (theRange); }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 private:
 
   std::vector<Bnd_Range> myClipRanges;
index 9e467d2df607f4800dc1e1167ec6d8e753b7fc28..1e933ea09c525fe692fc5eb291f360dd42e4b87c 100644 (file)
@@ -1046,3 +1046,27 @@ void SelectMgr_ViewerSelector::AllowOverlapDetection (const Standard_Boolean the
 {
   mySelectingVolumeMgr.AllowOverlapDetection (theIsToAllow);
 }
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void SelectMgr_ViewerSelector::Dump(Standard_OStream& theOStream)const 
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (SelectMgr_ViewerSelector));
+
+  DUMP_FIELD_VALUES (theOStream, preferclosest);
+  DUMP_FIELD_VALUES (theOStream, myToUpdateTolerance);
+  DUMP_FIELD_VALUES (theOStream, mystored.Extent());
+  //DUMP_FIELD_VALUES (theOStream, mySelectingVolumeMgr);
+
+  Standard_Integer aNbOfSelected = 0;
+  for (SelectMgr_SelectableObjectSet::Iterator aSelectableIt (mySelectableObjects); aSelectableIt.More(); aSelectableIt.Next())
+  {
+    aNbOfSelected++;
+  }
+  DUMP_FIELD_VALUES (theOStream, aNbOfSelected);
+  DUMP_FIELD_VALUES (theOStream, myTolerances.Tolerance());
+  DUMP_FIELD_VALUES (theOStream, myTolerances.CustomTolerance());
+  DUMP_FIELD_VALUES (theOStream, myZLayerOrderMap.Size());
+}
index 70b032cd1c3b077ff5198975c946d5b72b1f26f9..2887823e2d5612ac4da065f3e612f95262f58eab 100644 (file)
@@ -209,6 +209,9 @@ public:
   //! mark both included and overlapped entities as matched
   Standard_EXPORT void AllowOverlapDetection (const Standard_Boolean theIsToAllow);
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 public:
 
   //! Begins an iteration scanning for the owners detected at a position in the view.
index 01ca8000eed48bbb500425ccac0ae221135290b6..84ad0eccd4a71a0e054fef6e1a283c4599ae447b 100755 (executable)
@@ -24,6 +24,8 @@ Standard_DimensionError.hxx
 Standard_DimensionMismatch.hxx
 Standard_DivideByZero.hxx
 Standard_DomainError.hxx
+Standard_Dump.cxx
+Standard_Dump.hxx
 Standard_ErrorHandler.cxx
 Standard_ErrorHandler.hxx
 Standard_ExtCharacter.hxx
diff --git a/src/Standard/Standard_Dump.cxx b/src/Standard/Standard_Dump.cxx
new file mode 100644 (file)
index 0000000..291538d
--- /dev/null
@@ -0,0 +1,298 @@
+// Copyright (c) 2019 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 <Standard_Dump.hxx>
+
+// =======================================================================
+// function : Sentry constructor
+// purpose :
+// =======================================================================
+Standard_Dump::Sentry::Sentry (Standard_OStream& theOStream,
+                               const TCollection_AsciiString& theClassName,
+                               const void* thePointer)
+: myOStream (&theOStream), myClassName (theClassName)
+{
+  (*myOStream) << startKey (myClassName);
+  if (thePointer)
+  {
+    TCollection_AsciiString Pointer = Standard_Dump::GetPointerInfo (thePointer);
+    DUMP_FIELD_VALUES(theOStream, Pointer)
+  }
+}
+
+// =======================================================================
+// function : GetPointerInfo
+// purpose :
+// =======================================================================
+TCollection_AsciiString Standard_Dump::GetPointerInfo (const Handle(Standard_Transient)& thePointer,
+                                                       const bool isShortInfo)
+{
+  if (thePointer.IsNull())
+    return TCollection_AsciiString();
+
+  return GetPointerInfo (thePointer.get(), isShortInfo);
+}
+
+// =======================================================================
+// function : GetPointerInfo
+// purpose :
+// =======================================================================
+TCollection_AsciiString Standard_Dump::GetPointerInfo (const void* thePointer, const bool isShortInfo)
+{
+  std::ostringstream aPtrStr;
+  aPtrStr << thePointer;
+  if (!isShortInfo)
+    return aPtrStr.str().c_str();
+
+  TCollection_AsciiString anInfoPtr (aPtrStr.str().c_str());
+  for (int aSymbolId = 1; aSymbolId < anInfoPtr.Length(); aSymbolId++)
+  {
+    if (anInfoPtr.Value(aSymbolId) != '0')
+    {
+      anInfoPtr = anInfoPtr.SubString (aSymbolId, anInfoPtr.Length());
+      anInfoPtr.Prepend (GetPointerPrefix());
+      return anInfoPtr;
+    }
+  }
+  return aPtrStr.str().c_str();
+}
+
+// ----------------------------------------------------------------------------
+// Split
+// ----------------------------------------------------------------------------
+void Standard_Dump::Split (const Standard_SStream& theStream,
+                           NCollection_IndexedDataMap<TCollection_AsciiString, TCollection_AsciiString>& theValues,
+                           TCollection_AsciiString& theStreamKey)
+{
+  TCollection_AsciiString aStreamStr (theStream.str().c_str());
+
+  split (aStreamStr, theValues, theStreamKey);
+}
+
+// ----------------------------------------------------------------------------
+// split
+// ----------------------------------------------------------------------------
+void Standard_Dump::split (const TCollection_AsciiString& theStreamStr,
+                           NCollection_IndexedDataMap<TCollection_AsciiString, TCollection_AsciiString>& theValues,
+                           TCollection_AsciiString& theStreamKey)
+{
+  TCollection_AsciiString aStreamStr = theStreamStr;
+
+  TCollection_AsciiString aSplitValue, aTailValue, aKey;
+  if (splitDumped (aStreamStr, aSplitValue, aTailValue, aKey))
+  {
+    if (aTailValue.IsEmpty())
+    {
+      theStreamKey = aKey;
+      splitKey (aSplitValue, aStreamStr, aKey);
+    }
+  }
+
+  NCollection_List<TCollection_AsciiString> aValues;
+  splitValue (aStreamStr, DumpSeparator(), aValues);
+
+  for (NCollection_List<TCollection_AsciiString>::Iterator anIterator (aValues); anIterator.More(); anIterator.Next())
+  {
+    TCollection_AsciiString aKey = anIterator.Value();
+    anIterator.Next();
+    if (!anIterator.More())
+      break;
+    theValues.Add (aKey, anIterator.Value());
+  }
+}
+
+// ----------------------------------------------------------------------------
+// splitValue
+// ----------------------------------------------------------------------------
+void Standard_Dump::splitValue (const TCollection_AsciiString& theValue,
+                                const TCollection_AsciiString& theSeparator,
+                                NCollection_List<TCollection_AsciiString>& theValues)
+{
+  TCollection_AsciiString aCurrentString = theValue;
+
+  TCollection_AsciiString aSplitValue, aTailValue, aKey;
+  while (!aCurrentString.IsEmpty())
+  {
+    TCollection_AsciiString aValueString = aCurrentString;
+    if (splitDumped (aValueString, aSplitValue, aTailValue, aKey))
+    {
+      aValueString = aSplitValue;
+      aCurrentString = aTailValue;
+    }
+    else
+    {
+      Standard_Integer aPosition = aValueString.Search (theSeparator);
+      if (aPosition < 0 )
+        break;
+      aCurrentString = aValueString.Split (aPosition - 1);
+    }
+    theValues.Append (aValueString);
+    if (aCurrentString.IsEmpty())
+      break;
+
+    aCurrentString = aCurrentString.Split (theSeparator.Length());
+  }
+}
+
+// ----------------------------------------------------------------------------
+// DumpFieldToName
+// ----------------------------------------------------------------------------
+void Standard_Dump::DumpFieldToName (const char* theField, const char*& theName)
+{
+  theName = theField;
+
+  if (theName[0] == '&')
+  {
+    theName = theName + 1;
+  }
+  if (::LowerCase (theName[0]) == 'm' && theName[1] == 'y')
+  {
+    theName = theName + 2;
+  }
+}
+
+// ----------------------------------------------------------------------------
+// ToString
+// ----------------------------------------------------------------------------
+TCollection_AsciiString Standard_Dump::ToDumpString (const Standard_SStream& theStream)
+{
+  return TCollection_AsciiString (theStream.str().c_str());
+}
+
+// ----------------------------------------------------------------------------
+// ConvertDumpToText
+// ----------------------------------------------------------------------------
+TCollection_AsciiString Standard_Dump::ConvertDumpToText (const Standard_SStream& theStream)
+{
+  TCollection_AsciiString aText;
+
+  Standard_Integer aLevel = 0;
+  convertDumpToText (ToDumpString (theStream), aLevel, aText);
+
+  return aText;
+}
+
+TCollection_AsciiString getLevelIndent (const int theLevel)
+{
+  TCollection_AsciiString aLevelIndent;
+  for (int i = 0; i < theLevel; i++)
+    aLevelIndent += " ";
+  return aLevelIndent;
+}
+
+// ----------------------------------------------------------------------------
+// convertDumpToText
+// ----------------------------------------------------------------------------
+void Standard_Dump::convertDumpToText (const TCollection_AsciiString& theStreamStr,
+                                       const Standard_Integer theLevel,
+                                       TCollection_AsciiString& theText)
+{
+
+  NCollection_IndexedDataMap<TCollection_AsciiString, TCollection_AsciiString> aSplitValues;
+  TCollection_AsciiString aStreamKey;
+  split (theStreamStr, aSplitValues, aStreamKey);
+  Standard_Integer aLevel = theLevel;
+  //if (!aStreamKey.IsEmpty())
+  //{
+  //  theText += getLevelIndent (aLevel) + aStreamKey + "\n";
+  //  aLevel++;
+  //}
+
+  for (Standard_Integer anIndex = 1; anIndex <= aSplitValues.Size(); anIndex++)
+  {
+    TCollection_AsciiString aValue = aSplitValues.FindFromIndex (anIndex);
+    TCollection_AsciiString aKey = aSplitValues.FindKey (anIndex);
+
+    if (Standard_Dump::HasBracketKey (aValue))
+    {
+      theText += getLevelIndent (aLevel + 1) + aKey + "\n";
+      convertDumpToText (aValue, aLevel + 2, theText);
+    }
+    else
+    {
+      theText += getLevelIndent (aLevel + 1) + aKey + " = " + aValue + "\n";
+    }
+  }
+}
+
+// ----------------------------------------------------------------------------
+// splitDumped
+// ----------------------------------------------------------------------------
+Standard_Boolean Standard_Dump::splitDumped (const TCollection_AsciiString& theSourceValue,
+                                             TCollection_AsciiString& theSplitValue,
+                                             TCollection_AsciiString& theTailValue,
+                                             TCollection_AsciiString& theKey)
+{
+  Standard_Integer aBracketPosition = theSourceValue.Search (XMLBracketOpen());
+  // the first symbol is bracket
+  if (aBracketPosition != 1 || aBracketPosition >= theSourceValue.Length())
+    return Standard_False;
+
+  TCollection_AsciiString aValue = theSourceValue.SubString (aBracketPosition + 1, theSourceValue.Length());
+
+  aBracketPosition = aValue.Search (XMLBracketClose());
+  if (aBracketPosition <= 1 || aBracketPosition >= theSourceValue.Length())
+    return Standard_False;
+
+  theKey = aValue;
+
+  TCollection_AsciiString aTailValue = theKey.Split (aBracketPosition - 1);
+  aTailValue = aTailValue.SubString (2, aTailValue.Length()); // remove close bracket
+  TCollection_AsciiString aStopKey = stopKey (theKey);
+
+  aBracketPosition = theSourceValue.Search (aStopKey);
+
+  Standard_Integer aStopKeyLastPosition = aBracketPosition + aStopKey.Length() - 1;
+
+  if (aBracketPosition <= 1 || aStopKeyLastPosition  > theSourceValue.Length())
+    return Standard_False;
+
+  theSplitValue = theSourceValue;
+  theTailValue = theSplitValue.Split (aStopKeyLastPosition);
+
+  return Standard_True;
+}
+
+// ----------------------------------------------------------------------------
+// splitKey
+// ----------------------------------------------------------------------------
+Standard_Boolean Standard_Dump::splitKey (const TCollection_AsciiString& theSourceValue,
+                                          TCollection_AsciiString& theSplitValue,
+                                          TCollection_AsciiString& theKey)
+{
+  Standard_Integer aBracketPosition = theSourceValue.Search (XMLBracketOpen());
+  // the first symbol is bracket
+  if (aBracketPosition != 1 || aBracketPosition >= theSourceValue.Length())
+    return Standard_False;
+
+  TCollection_AsciiString aValue = theSourceValue.SubString (aBracketPosition + 1, theSourceValue.Length());
+
+  aBracketPosition = aValue.Search (XMLBracketClose());
+  if (aBracketPosition <= 1 || aBracketPosition >= theSourceValue.Length())
+    return Standard_False;
+
+  theKey = aValue;
+
+  TCollection_AsciiString aTailValue = theKey.Split (aBracketPosition - 1);
+  aTailValue = aTailValue.SubString (2, aTailValue.Length()); // remove close bracket
+  TCollection_AsciiString aStopKey = stopKey (theKey);
+
+  aBracketPosition = aTailValue.Search (aStopKey);
+  if (aBracketPosition <= 1 || aBracketPosition  >= aTailValue.Length())
+    return Standard_False;
+
+  theSplitValue = aTailValue;
+  aTailValue = theSplitValue.Split (aBracketPosition - 1);
+
+  return Standard_True;
+}
diff --git a/src/Standard/Standard_Dump.hxx b/src/Standard/Standard_Dump.hxx
new file mode 100644 (file)
index 0000000..e36cf0c
--- /dev/null
@@ -0,0 +1,210 @@
+// Copyright (c) 2019 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.
+
+#ifndef _Standard_Dump_HeaderFile
+#define _Standard_Dump_HeaderFile
+
+#include <NCollection_IndexedDataMap.hxx>
+#include <NCollection_IndexedMap.hxx>
+#include <NCollection_List.hxx>
+#include <NCollection_Vector.hxx>
+
+#include <Standard_SStream.hxx>
+#include <TCollection_AsciiString.hxx>
+
+
+//! The interface to prepare and parse an object Dump.
+class Standard_Dump
+{
+public:
+  /**
+    * @brief Simple sentry class providing convenient interface to dump.
+    * 
+    * Appends start and last rows in dump with class name key
+    *
+    * Create instance of that class in the first row of Dump.
+    */
+  class Sentry
+  {
+    public:
+      //! Constructor - add parameters of start class name definition in the stream
+      Standard_EXPORT Sentry (Standard_OStream& theOStream, const TCollection_AsciiString& theClassName, const void* thePointer = NULL);
+
+      //! Destructor - add parameters of stop class name definition in the stream
+      ~Sentry() { (*myOStream) << stopKey (myClassName); }
+
+    private:
+      Standard_OStream* myOStream;
+      TCollection_AsciiString myClassName;
+  };
+
+  //! Returns separator symbol of Dump information
+  static Standard_Character DumpSeparator() { return '\\'; }
+
+  //! Returns separator symbol of class name prefix
+  static Standard_CString ClassNameSeparator() { return " ,"; }
+
+  //! Returns default prefix added for each pointer info string
+  Standard_EXPORT static TCollection_AsciiString GetPointerPrefix() { return "0x"; }
+
+  //! Convert handle pointer to string value
+  //! @param thePointer a pointer
+  //! @param isShortInfo if true, all '0' symbols in the beginning of the pointer are skipped
+  //! @return the string value
+  Standard_EXPORT static TCollection_AsciiString GetPointerInfo (const Handle(Standard_Transient)& thePointer,
+                                                                 const bool isShortInfo = true);
+
+  //! Convert pointer to string value
+  //! @param thePointer a pointer
+  //! @param isShortInfo if true, all '0' symbols in the beginning of the pointer are skipped
+  //! @return the string value
+  Standard_EXPORT static TCollection_AsciiString GetPointerInfo (const void* thePointer,
+                                                                 const bool isShortInfo = true);
+
+  //! Converts stream into map of values. Values are not empty if the stream contains at least two values.
+  //!
+  //! The one level stream example: <class_name>key_1\value_1\key_2\value_2</class_name>
+  //! In output: theStreamKey equals class_name, theValues contains key_1, value_1, key_2, and value_2.
+  //!
+  //! Two level stream example: <class_name>key_1\value_1\key_2\value_2\key_3<subclass_name>subclass_key_1\subclass_value1</subclass_name></class_name>
+  //! In output: theStreamKey equals class_name, theValues contains key_1, value_1, key_2, and value_2, key_3 and
+  //! <subclass_name>subclass_key_1\subclass_value1</subclass_name>.
+  //! The last value might be processed later using the same method.
+  //!
+  //! @param theStream stream value
+  //! @param theValues [out] container of split values
+  Standard_EXPORT static void Split (const Standard_SStream& theStream,
+                                     NCollection_IndexedDataMap<TCollection_AsciiString, TCollection_AsciiString>& theValues,
+                                     TCollection_AsciiString& theStreamKey);
+
+  //! Unites list of string into one string using the separator
+  Standard_EXPORT static TCollection_AsciiString Join (const NCollection_List<TCollection_AsciiString>& theValues,
+                                                       const TCollection_AsciiString& theSeparator);
+
+  //! Convert field name into dump text value, removes "&" and "my" prefixes
+  //! @param theField a source value 
+  //! @param theName [out] an updated name 
+  Standard_EXPORT static void DumpFieldToName (const char* theField, const char*& theName);
+
+  //! Converts stream value to string value
+  Standard_EXPORT static TCollection_AsciiString ToDumpString (const Standard_SStream& theStream);
+
+  //! Converts stream value to string value
+  Standard_EXPORT static TCollection_AsciiString ConvertDumpToText (const Standard_SStream& theStream);
+
+  //! Returns true if the value has bracket key
+  static Standard_Boolean HasBracketKey (const TCollection_AsciiString& theSourceValue)
+    { return theSourceValue.Search (XMLBracketOpen()) >= 0; }
+
+private:
+  //! Converts stream value to string value
+  static TCollection_AsciiString startKey (const TCollection_AsciiString& theValue)
+    { return XMLBracketOpen() + theValue + XMLBracketClose(); }
+
+  //! Converts stream value to string value
+  static TCollection_AsciiString stopKey (const TCollection_AsciiString& theValue)
+    { return XMLBracketOpen() + XMLFinishKey() + theValue + XMLBracketClose(); }
+
+  //! Converts stream text into map of values.
+  //! @param theStream stream value
+  //! @param theValues [out] container of split values
+  Standard_EXPORT static void split (const TCollection_AsciiString& theStreamStr,
+                                     NCollection_IndexedDataMap<TCollection_AsciiString, TCollection_AsciiString>& theValues,
+                                     TCollection_AsciiString& theStreamKey);
+
+  //! Splits value into container of value using separator.
+  //! It is not recursive, do not split sub class values.
+  //!
+  //! Two level stream example: key_1\value_1\key_2\value_2\key_3<subclass_name>subclass_key_1\subclass_value1</subclass_name>
+  //!  In out, theValues contains: key_1, value_1, key_2, and value_2, key_3 and <subclass_name>subclass_key_1\subclass_value1</subclass_name>.
+  //!
+  //! @param theValue source stream value
+  //! @param theSeparator split separator
+  //! @param theValues [out] container of split values
+  Standard_EXPORT static void splitValue (const TCollection_AsciiString& theValue,
+                                          const TCollection_AsciiString& theSeparator,
+                                          NCollection_List<TCollection_AsciiString>& theValues);
+
+  //! Splits value into two sub-strings using Dump keys.
+  //! Example:
+  //! aString contains "<key>abc</key>defg"
+  //! splitDumped(aString) gives theSplitValue = "abc", theTailValue = "defg", theKey = "key"
+  //! @param theSourceValue source stream value to split
+  //! @param theSplitValue [out] split value
+  //! @param theTailValue [out] value out of the key on the left
+  //! @param theKey [out] key of split value
+  Standard_EXPORT static Standard_Boolean splitDumped (const TCollection_AsciiString& theSourceValue,
+                                                       TCollection_AsciiString& theSplitValue,
+                                                       TCollection_AsciiString& theTailValue,
+                                                       TCollection_AsciiString& theKey);
+
+  //! Splits value that contains a key in form: <key>value</key>. In this case the values are:
+  //! theSplitValue = value, theKey = key.
+  //! @param theSourceValue source stream value to split
+  //! @param theSplitValue [out] split value
+  //! @param theKey [out] key of split value
+  Standard_EXPORT static Standard_Boolean splitKey (const TCollection_AsciiString& theSourceValue,
+                                                    TCollection_AsciiString& theSplitValue,
+                                                    TCollection_AsciiString& theKey);
+
+  //! Converts stream value to string value
+  static void convertDumpToText (const TCollection_AsciiString& theStreamStr,
+                                 const Standard_Integer theLevel,
+                                 TCollection_AsciiString& theText);
+
+  //! Stream value open key separator
+  static TCollection_AsciiString XMLBracketOpen() { return TCollection_AsciiString ("<"); }
+
+  //! Stream value close key separator
+  static TCollection_AsciiString XMLBracketClose() { return TCollection_AsciiString (">"); }
+
+  //! Stream value finish key separator
+  static TCollection_AsciiString XMLFinishKey() { return TCollection_AsciiString ("\\"); }
+
+};
+
+#define CLASS_NAME(theClass) #theClass
+
+#define DUMP_FIELD_VALUES(theOStream, theField) \
+{ \
+  const char* aName = NULL; \
+  Standard_Dump::DumpFieldToName (#theField, aName); \
+  theOStream << aName << Standard_Dump::DumpSeparator() << theField << Standard_Dump::DumpSeparator(); \
+}
+
+#define DUMP_FIELD_VALUES_POINTER(theOStream, theField) \
+{ \
+  const char* aName = NULL; \
+  Standard_Dump::DumpFieldToName (#theField, aName); \
+  theOStream << aName << Standard_Dump::DumpSeparator() << Standard_Dump::GetPointerInfo (theField) << Standard_Dump::DumpSeparator(); \
+}
+
+#define DUMP_FIELD_VALUES_SUBCLASS(theOStream, theField) \
+{ \
+  Standard_SStream aFieldStream; \
+  if (theField) (theField)->Dump (aFieldStream); \
+  const char* aName = NULL; \
+  Standard_Dump::DumpFieldToName (#theField, aName); \
+  theOStream << aName << Standard_Dump::DumpSeparator() << Standard_Dump::ToDumpString (aFieldStream) << Standard_Dump::DumpSeparator(); \
+}
+
+#define DUMP_FIELD_VALUES_PARENT(theOStream, theField) \
+{ \
+  Standard_SStream aTmpStream; \
+  theField::Dump (aTmpStream); \
+  const char* aName = NULL; \
+  Standard_Dump::DumpFieldToName (#theField, aName); \
+  theOStream << aName << Standard_Dump::DumpSeparator() << Standard_Dump::ToDumpString (aTmpStream) << Standard_Dump::DumpSeparator(); \
+}
+
+#endif // _Standard_Dump_HeaderFile
index 03984f7161e0a8acb0b86204d49619a62bb414d0..835d7d0579ff4150362d67d5c14ca8d1b1fa6e74 100644 (file)
@@ -19,6 +19,7 @@
 #include <Standard_ConstructionError.hxx>
 #include <Standard_Stream.hxx>
 #include <Standard_Type.hxx>
+#include <Standard_Dump.hxx>
 #include <TopLoc_Datum3D.hxx>
 
 IMPLEMENT_STANDARD_RTTIEXT(TopLoc_Datum3D,Standard_Transient)
@@ -41,6 +42,17 @@ TopLoc_Datum3D::TopLoc_Datum3D (const gp_Trsf& T) :
 {
 }
 
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void TopLoc_Datum3D::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (TopLoc_Datum3D));
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myTrsf);
+}
+
 //=======================================================================
 //function : ShallowDump
 //purpose  : 
index b1f589d20126d80d33eade3e746b6d6ab998cd87..b7f7d0670f2480eb748331aefa7d40194a78c621 100644 (file)
@@ -53,6 +53,9 @@ public:
     const gp_Trsf& Transformation() const;
   
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
   //! Writes the contents of this Datum3D to the stream S.
   Standard_EXPORT void ShallowDump (Standard_OStream& S) const;
 
index c994bbd36af548ddaff3c3cdb322b47fee019b48..0460206f431350be9abaf4ab97346755701195c5 100644 (file)
@@ -16,6 +16,7 @@
 
 
 #include <TopLoc_Datum3D.hxx>
+#include <Standard_Dump.hxx>
 #include <TopLoc_ItemLocation.hxx>
 #include <TopLoc_Location.hxx>
 #include <TopLoc_SListOfItemLocation.hxx>
@@ -32,3 +33,16 @@ TopLoc_ItemLocation::TopLoc_ItemLocation
   myTrsf (D->Transformation().Powered (P))
 {
 }
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void TopLoc_ItemLocation::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (TopLoc_ItemLocation));
+
+  DUMP_FIELD_VALUES (theOStream, myPower);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myTrsf);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myDatum);
+}
index f2e117b3903239601df7f830018ab9f99ff9f932..073548054408061ebbbac9d305d39bbc2c696eea 100644 (file)
@@ -22,6 +22,7 @@
 #include <Standard_Handle.hxx>
 
 #include <Standard_Integer.hxx>
+#include <Standard_OStream.hxx>
 #include <gp_Trsf.hxx>
 class TopLoc_Datum3D;
 class TopLoc_Location;
@@ -49,6 +50,9 @@ public:
   //! Sets the exponent to <P>
   Standard_EXPORT TopLoc_ItemLocation(const Handle(TopLoc_Datum3D)& D, const Standard_Integer P);
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 
 friend class TopLoc_Location;
 friend class TopLoc_SListOfItemLocation;
index 21c9f81e709f00452372397adae9a74b27352ea0..2814f3cc806731e0b8fc94da7e78fede611d1601 100644 (file)
@@ -20,6 +20,7 @@
 #include <gp_Trsf.hxx>
 #include <Standard_ConstructionError.hxx>
 #include <Standard_NoSuchObject.hxx>
+#include <Standard_Dump.hxx>
 #include <TopLoc_Datum3D.hxx>
 #include <TopLoc_ItemLocation.hxx>
 #include <TopLoc_Location.hxx>
@@ -230,6 +231,28 @@ Standard_Boolean TopLoc_Location::IsDifferent
   return !IsEqual(Other);
 }
 
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void TopLoc_Location::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (TopLoc_Location));
+
+  DUMP_FIELD_VALUES (theOStream, IsIdentity());
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &Transformation());
+
+  /*TopLoc_SListOfItemLocation items = myItems;
+  if (!items.IsEmpty())
+  {
+    while (items.More())
+    {
+      DUMP_FIELD_VALUES_SUBCLASS (theOStream, &items.Value());
+      items.Next();
+    }
+  }*/
+}
+
 //=======================================================================
 //function : ShallowDump
 //purpose  : 
index 0eec93b46b9c318759d3b002f7974cfbc54aa8db..736091a806bc06f4b5d7138e3eee666fac77a3c6 100644 (file)
@@ -142,6 +142,9 @@ Standard_Boolean operator != (const TopLoc_Location& Other) const
   return IsDifferent(Other);
 }
   
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
   //! Prints the contents of <me> on the stream <s>.
   Standard_EXPORT void ShallowDump (Standard_OStream& S) const;
 
index 513703947c7fe770c703da26042d7eb96a9b78d8..df1815110265d431721d9972c17f34cea1aeb2ca 100644 (file)
@@ -19,6 +19,7 @@
 #include <Standard_DomainError.hxx>
 #include <Standard_NullObject.hxx>
 #include <Standard_TypeMismatch.hxx>
+#include <Standard_Dump.hxx>
 #include <TopLoc_Location.hxx>
 #include <TopoDS_TShape.hxx>
 
@@ -33,3 +34,16 @@ Standard_Integer TopoDS_Shape::HashCode (const Standard_Integer theUpperBound) c
   const Standard_Integer aHL = myLocation.HashCode (theUpperBound);
   return ::HashCode (aHS ^ aHL, theUpperBound);
 }
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void TopoDS_Shape::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (TopoDS_Shape));
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, myTShape);
+  DUMP_FIELD_VALUES (theOStream, myOrient);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myLocation);
+}
index ea05cb600f27760b33ddb0257fd5b5ee4cdb0b70..dd947013f165cd9b5d9eb303185b6c752b6074f7 100644 (file)
@@ -280,6 +280,9 @@ public:
 
   void TShape (const Handle(TopoDS_TShape)& theTShape) { myTShape = theTShape; }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 private:
 
   Handle(TopoDS_TShape) myTShape;
index 01ecb142e3631ab13bd4a371c43c65f24fc16da7..fa44bd29fe99cfa1d0fad377f989d43e99a0a592 100644 (file)
 #include <TopoDS_TShape.hxx>
 #include <TopoDS_Shape.hxx>
 
+#include <Standard_Dump.hxx>
+
 IMPLEMENT_STANDARD_RTTIEXT(TopoDS_TShape,Standard_Transient)
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void TopoDS_TShape::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (TopoDS_TShape), this);
+
+  DUMP_FIELD_VALUES (theOStream, myFlags);
+  //TopoDS_ListOfShape myShapes;
+}
index 27932d635b25f263beb517e68e6072a3e624e30d..1421347db02deef05be385244576a6293991bd5b 100644 (file)
@@ -126,6 +126,9 @@ public:
   //! @sa TopoDS_Iterator for accessing sub-shapes
   Standard_Integer NbChildren() const { return myShapes.Size(); }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 friend class TopoDS_Iterator;
 friend class TopoDS_Builder;
 
index 100d63efda4d349a968ddec13a4521388fcaa40d..2f37196499e9483fbe8df00e68186b49781d4454 100644 (file)
@@ -2288,7 +2288,7 @@ struct ViewerTest_AspectsChangeSet
 //function : VAspects
 //purpose  :
 //==============================================================================
-static Standard_Integer VAspects (Draw_Interpretor& /*theDI*/,
+static Standard_Integer VAspects (Draw_Interpretor& theDI,
                                   Standard_Integer  theArgNb,
                                   const char**      theArgVec)
 {
@@ -2339,6 +2339,7 @@ static Standard_Integer VAspects (Draw_Interpretor& /*theDI*/,
 
   // parse syntax of legacy commands
   bool toParseAliasArgs = false;
+  Standard_Boolean toDump = false;
   if (aCmdName == "vsetwidth")
   {
     if (aNames.IsEmpty()
@@ -3282,6 +3283,10 @@ static Standard_Integer VAspects (Draw_Interpretor& /*theDI*/,
       aChangeSet->ToSetTypeOfEdge = -1;
       aChangeSet->TypeOfEdge = Aspect_TOL_SOLID;
     }
+    else if (anArg == "-dump")
+    {
+      toDump = Standard_True;
+    }
     else
     {
       std::cout << "Error: wrong syntax at " << anArg << "\n";
@@ -3342,6 +3347,13 @@ static Standard_Integer VAspects (Draw_Interpretor& /*theDI*/,
         aCtx->Redisplay (aPrs, Standard_False);
       }
     }
+    if (toDump)
+    {
+      Standard_SStream aStream;
+      aDrawer->Dump (aStream);
+
+      theDI << Standard_Dump::ConvertDumpToText (aStream);
+    }
     return 0;
   }
 
@@ -3495,6 +3507,16 @@ static Standard_Integer VAspects (Draw_Interpretor& /*theDI*/,
       {
         aPrs->SynchronizeAspects();
       }
+
+      if (toDump)
+      {
+        Standard_SStream aStream;
+        aDrawer->Dump (aStream);
+
+        theDI << aName << ": \n";
+        theDI << Standard_Dump::ConvertDumpToText (aStream);
+        theDI << "\n";
+      }
     }
   }
   return 0;
@@ -6617,6 +6639,7 @@ void ViewerTest::Commands(Draw_Interpretor& theCommands)
       "\n\t\t:          [-setDrawEdges {0|1}] [-setEdgeType LineType] [-setEdgeColor R G B] [-setQuadEdges {0|1}]"
       "\n\t\t:          [-setDrawSilhouette {0|1}]"
       "\n\t\t:          [-setAlphaMode {opaque|mask|blend|blendauto} [alphaCutOff=0.5]]"
+      "\n\t\t:          [-dump]"
       "\n\t\t: Manage presentation properties of all, selected or named objects."
       "\n\t\t: When -subshapes is specified than following properties will be"
       "\n\t\t: assigned to specified sub-shapes."
index 0a0c52f93365711ae0e57d3ef3f3987988ae461d..cd4961d680b48c470b1994ff5cb04fab714058f9 100644 (file)
@@ -15,6 +15,8 @@
 
 #include <XCAFPrs_Style.hxx>
 
+#include <Standard_Dump.hxx>
+
 //=======================================================================
 //function : XCAFPrs_Style
 //purpose  :
@@ -67,3 +69,19 @@ void XCAFPrs_Style::UnSetColorCurv()
   myHasColorCurv = Standard_False;
   myColorCurv.SetValues (Quantity_NOC_YELLOW);
 }
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void XCAFPrs_Style::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (XCAFPrs_Style));
+
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myColorSurf);
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &myColorCurv);
+
+  DUMP_FIELD_VALUES (theOStream, myHasColorSurf);
+  DUMP_FIELD_VALUES (theOStream, myHasColorCurv);
+  DUMP_FIELD_VALUES (theOStream, myIsVisible);
+}
index 214a0bdcfaaee593af6c7f9e82a782e875ae01db..9885ef06d11dd6e73a2dcde457678817bf971704 100644 (file)
@@ -121,6 +121,9 @@ public:
     return theS1.IsEqual (theS2);
   }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 protected:
 
   Quantity_ColorRGBA myColorSurf;
index cb106686fc8d86c931217dfc58d544bcf98d0cca..88f357267626974a5540363aa3ff3276e31d35a0 100644 (file)
@@ -26,6 +26,7 @@
 #include <gp_XYZ.hxx>
 #include <Standard_ConstructionError.hxx>
 #include <Standard_OutOfRange.hxx>
+#include <Standard_Dump.hxx>
 
 #define M00 ((Standard_Real*)M)[0]
 #define M01 ((Standard_Real*)M)[1]
@@ -268,3 +269,19 @@ void gp_Mat::Power (const Standard_Integer N)
   }
 }
 
+void gp_Mat::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (gp_Mat));
+
+  DUMP_FIELD_VALUES (theOStream, Mat00);
+  DUMP_FIELD_VALUES (theOStream, Mat01);
+  DUMP_FIELD_VALUES (theOStream, Mat02);
+
+  DUMP_FIELD_VALUES (theOStream, Mat10);
+  DUMP_FIELD_VALUES (theOStream, Mat11);
+  DUMP_FIELD_VALUES (theOStream, Mat12);
+
+  DUMP_FIELD_VALUES (theOStream, Mat20);
+  DUMP_FIELD_VALUES (theOStream, Mat21);
+  DUMP_FIELD_VALUES (theOStream, Mat22);
+}
index 16fc2f2144719c108d519aaaf5096a50ed4d6131..81c1054ca172a60e8945b65300290a76b1d1a06b 100644 (file)
@@ -255,6 +255,9 @@ public:
   //! Transposes the matrix. A(j, i) -> A (i, j)
     Standard_NODISCARD gp_Mat Transposed() const;
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 
 friend class gp_XYZ;
 friend class gp_Trsf;
index 64014935752759b02cb8081418da2f72b7f7eec5..5ac9df82b93cdb06f3eca0d97e79b322d81bfa49 100644 (file)
@@ -34,6 +34,7 @@
 #include <gp_XYZ.hxx>
 #include <Standard_ConstructionError.hxx>
 #include <Standard_OutOfRange.hxx>
+#include <Standard_Dump.hxx>
 
 //=======================================================================
 //function : gp_Trsf
@@ -849,3 +850,18 @@ void gp_Trsf::Orthogonalize()
 
   matrix = aTM;
 }
+
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void gp_Trsf::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (gp_Trsf));
+
+  DUMP_FIELD_VALUES (theOStream, Form());
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &TranslationPart());
+  DUMP_FIELD_VALUES (theOStream, ScaleFactor());
+  DUMP_FIELD_VALUES (theOStream, ScaleFactor());
+  DUMP_FIELD_VALUES_SUBCLASS (theOStream, &HVectorialPart());
+}
index ebb05bfbd3c4508f59324466ece81a50e0b672bd..6a56fc96904d3edf55a474f09f8fbd2d3960e8a7 100644 (file)
@@ -24,6 +24,7 @@
 #include <Standard_DefineAlloc.hxx>
 #include <Standard_Integer.hxx>
 #include <Standard_Handle.hxx>
+#include <Standard_OStream.hxx>
 #include <Standard_Real.hxx>
 
 class Standard_ConstructionError;
@@ -349,6 +350,9 @@ void operator *= (const gp_Trsf& T)
     theMat.SetValue (3, 3, static_cast<T> (1));
   }
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
+
 friend class gp_GTrsf;
 
 protected:
index 7bf550dcec417cf78011912014c1c2309bc1c958..30d64312dbb2cca6151864a451cb4dc802012009 100644 (file)
 
 #include <gp_Mat.hxx>
 #include <gp_XYZ.hxx>
+#include <NCollection_List.hxx>
 #include <Standard_ConstructionError.hxx>
 #include <Standard_OutOfRange.hxx>
+#include <Standard_Dump.hxx>
+#include <TCollection_AsciiString.hxx>
+
+#include <TCollection_AsciiString.hxx>
 
 Standard_Boolean gp_XYZ::IsEqual (const gp_XYZ& Other,
                                  const Standard_Real Tolerance) const {
@@ -33,3 +38,15 @@ Standard_Boolean gp_XYZ::IsEqual (const gp_XYZ& Other,
   return Standard_True;
 }
 
+//=======================================================================
+//function : Dump
+//purpose  : 
+//=======================================================================
+void gp_XYZ::Dump (Standard_OStream& theOStream) const
+{
+  Standard_Dump::Sentry aSentry (theOStream, CLASS_NAME (gp_XYZ));
+
+  DUMP_FIELD_VALUES (theOStream, x);
+  DUMP_FIELD_VALUES (theOStream, y);
+  DUMP_FIELD_VALUES (theOStream, z);
+}
index 1ecb7d2605cf90fb223344d6c4cbf46756a132ec..90581a277511b021469f8430cd15e260f318b2bd 100644 (file)
@@ -22,6 +22,9 @@
 #include <Standard_Real.hxx>
 #include <Standard_Integer.hxx>
 #include <Standard_Boolean.hxx>
+
+#include <Standard_OStream.hxx>
+
 class Standard_ConstructionError;
 class Standard_OutOfRange;
 class gp_Mat;
@@ -324,6 +327,8 @@ public:
     void SetLinearForm (const gp_XYZ& XYZ1, const gp_XYZ& XYZ2);
 
 
+  //! Dumps the content of me into the stream
+  Standard_EXPORT void Dump (Standard_OStream& theOStream) const;
 
 
 protected:
index 565a634561f6c40e5dc0cbd91d4a376e1d86f0e8..6d5d0ea7f56dfc80b2b25d50d322e4b79f31e9e4 100644 (file)
@@ -13,7 +13,7 @@ set pz 3
 vertex vv $px $py $pz
 set log [bounding vv -obb -dump]
 
-if {![regexp {Center: +([-0-9.+eE]+) +([-0-9.+eE]+) +([-0-9.+eE]+)} $log full xc yc zc]} {
+if {![regexp {Center\n   x = +([-0-9.+eE]+)\n   y = +([-0-9.+eE]+)\n   z = +([-0-9.+eE]+)} $log full xc yc zc]} {
   puts "Error in Dump."
 }
 
diff --git a/tests/bugs/vis/bug30949 b/tests/bugs/vis/bug30949
new file mode 100644 (file)
index 0000000..e9ecf69
--- /dev/null
@@ -0,0 +1,20 @@
+puts "============="
+puts "0030949: Foundation Classes - Dump improvement for OCCT classes"
+puts "============="
+
+pload VISUALIZATION
+vinit View
+
+set pred 0.329
+set pgreen 0.224
+set pblue 0.027
+
+set log [vaspects -defaults -dump]
+
+if {![regexp {Red = +([-0-9.+eE]+)\n         Green = +([-0-9.+eE]+)\n         Blue = +([-0-9.+eE]+)} $log full cred cgreen cblue]} {
+  puts "Error in Dump."
+}
+
+checkreal "Cred" $cred $pred 1.0e-7 0.0
+checkreal "Cgreen" $cgreen $pgreen 1.0e-7 0.0
+checkreal "Cblue" $cblue $pblue 1.0e-7 0.0