// Copyright (c) 2015 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #ifndef _ShapePersistent_Geom2d_Curve_HeaderFile #define _ShapePersistent_Geom2d_Curve_HeaderFile #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class ShapePersistent_Geom2d_Curve : public ShapePersistent_Geom2d { typedef Curve::PersistentBase pBase; typedef pBase pBounded; class pBezier : public pBounded { friend class ShapePersistent_Geom2d_Curve; public: inline void Read (StdObjMgt_ReadData& theReadData) { theReadData >> myRational >> myPoles >> myWeights; } inline void Write (StdObjMgt_WriteData& theWriteData) const { theWriteData << myRational << myPoles << myWeights; } inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const { theChildren.Append(myPoles); theChildren.Append(myWeights); } inline Standard_CString PName() const { return "PGeom2d_BezierCurve"; } virtual Handle(Geom2d_Curve) Import() const; private: Standard_Boolean myRational; Handle(ShapePersistent_HArray1::Pnt2d) myPoles; Handle(StdLPersistent_HArray1::Real) myWeights; }; class pBSpline : public pBounded { friend class ShapePersistent_Geom2d_Curve; public: inline void Read (StdObjMgt_ReadData& theReadData) { theReadData >> myRational >> myPeriodic >> mySpineDegree; theReadData >> myPoles >> myWeights >> myKnots >> myMultiplicities; } inline void Write (StdObjMgt_WriteData& theWriteData) const { theWriteData << myRational << myPeriodic << mySpineDegree; theWriteData << myPoles << myWeights << myKnots << myMultiplicities; } inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const { theChildren.Append(myPoles); theChildren.Append(myWeights); theChildren.Append(myKnots); theChildren.Append(myMultiplicities); } inline Standard_CString PName() const { return "PGeom2d_BSplineCurve"; } virtual Handle(Geom2d_Curve) Import() const; private: Standard_Boolean myRational; Standard_Boolean myPeriodic; Standard_Integer mySpineDegree; Handle(ShapePersistent_HArray1::Pnt2d) myPoles; Handle(StdLPersistent_HArray1::Real) myWeights; Handle(StdLPersistent_HArray1::Real) myKnots; Handle(StdLPersistent_HArray1::Integer) myMultiplicities; }; class pTrimmed : public pBounded { friend class ShapePersistent_Geom2d_Curve; public: inline void Read (StdObjMgt_ReadData& theReadData) { theReadData >> myBasisCurve >> myFirstU >> myLastU; } inline void Write (StdObjMgt_WriteData& theWriteData) const { theWriteData << myBasisCurve << myFirstU << myLastU; } inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const { theChildren.Append(myBasisCurve); } inline Standard_CString PName() const { return "PGeom2d_TrimmedCurve"; } virtual Handle(Geom2d_Curve) Import() const; private: Handle(Curve) myBasisCurve; Standard_Real myFirstU; Standard_Real myLastU; }; class pOffset : public pBase { friend class ShapePersistent_Geom2d_Curve; public: inline void Read (StdObjMgt_ReadData& theReadData) { theReadData >> myBasisCurve >> myOffsetValue; } inline void Write (StdObjMgt_WriteData& theWriteData) const { theWriteData << myBasisCurve << myOffsetValue; } inline void PChildren(StdObjMgt_Persistent::SequenceOfPersistent& theChildren) const { theChildren.Append(myBasisCurve); } inline Standard_CString PName() const { return "PGeom2d_OffsetCurve"; } virtual Handle(Geom2d_Curve) Import() const; private: Handle(Curve) myBasisCurve; Standard_Real myOffsetValue; }; public: typedef instance Line; typedef subBase_gp Conic; typedef instance Circle; typedef instance Ellipse; typedef instance Hyperbola; typedef instance Parabola; typedef subBase_empty Bounded; typedef Delayed Bezier; typedef Delayed BSpline; typedef Delayed Trimmed; typedef Delayed Offset; public: //! Create a persistent object for a line Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom2d_Line)& theCurve, StdObjMgt_TransientPersistentMap& theMap); //! Create a persistent object for a circle Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom2d_Circle)& theCurve, StdObjMgt_TransientPersistentMap& theMap); //! Create a persistent object for a ellipse Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom2d_Ellipse)& theCurve, StdObjMgt_TransientPersistentMap& theMap); //! Create a persistent object for a hyperbola Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom2d_Hyperbola)& theCurve, StdObjMgt_TransientPersistentMap& theMap); //! Create a persistent object for a parabola Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom2d_Parabola)& theCurve, StdObjMgt_TransientPersistentMap& theMap); //! Create a persistent object for a Bezier curve Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom2d_BezierCurve)& theCurve, StdObjMgt_TransientPersistentMap& theMap); //! Create a persistent object for a BSpline curve Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom2d_BSplineCurve)& theCurve, StdObjMgt_TransientPersistentMap& theMap); //! Create a persistent object for a trimmed curve Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom2d_TrimmedCurve)& theCurve, StdObjMgt_TransientPersistentMap& theMap); //! Create a persistent object for an offset curve Standard_EXPORT static Handle(Curve) Translate (const Handle(Geom2d_OffsetCurve)& theCurve, StdObjMgt_TransientPersistentMap& theMap); }; //======================================================================= // Line //======================================================================= template<> Standard_CString ShapePersistent_Geom2d_Curve::instance ::PName() const; template<> void ShapePersistent_Geom2d_Curve::instance ::Write(StdObjMgt_WriteData& theWriteData) const; //======================================================================= // Conic //======================================================================= template<> Standard_CString ShapePersistent_Geom2d_Curve::subBase_gp ::PName() const; //======================================================================= // Circle //======================================================================= template<> Standard_CString ShapePersistent_Geom2d_Curve::instance ::PName() const; template<> void ShapePersistent_Geom2d_Curve::instance ::Write(StdObjMgt_WriteData& theWriteData) const; //======================================================================= // Ellipse //======================================================================= template<> Standard_CString ShapePersistent_Geom2d_Curve::instance ::PName() const; template<> void ShapePersistent_Geom2d_Curve::instance ::Write(StdObjMgt_WriteData& theWriteData) const; //======================================================================= // Hyperbola //======================================================================= template<> Standard_CString ShapePersistent_Geom2d_Curve::instance ::PName() const; template<> void ShapePersistent_Geom2d_Curve::instance ::Write(StdObjMgt_WriteData& theWriteData) const; //======================================================================= // Parabola //======================================================================= template<> Standard_CString ShapePersistent_Geom2d_Curve::instance ::PName() const; template<> void ShapePersistent_Geom2d_Curve::instance ::Write(StdObjMgt_WriteData& theWriteData) const; #endif