]> OCCT Git - occt.git/commitdiff
0032485: Modeling Algorithms - Add Clone() function for adapters
authorasuraven <asuraven@opencascade.com>
Tue, 20 Jul 2021 15:44:23 +0000 (18:44 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 3 Sep 2021 17:19:56 +0000 (20:19 +0300)
Provide ShallowCopy() functions for adapters & evaluators of curves, 2d curves and surfaces. This will allow using copies of the same adapter in multi-thread calculations.

57 files changed:
src/Adaptor2d/Adaptor2d_Curve2d.cxx
src/Adaptor2d/Adaptor2d_Curve2d.hxx
src/Adaptor2d/Adaptor2d_Line2d.cxx
src/Adaptor2d/Adaptor2d_Line2d.hxx
src/Adaptor2d/Adaptor2d_OffsetCurve.cxx
src/Adaptor2d/Adaptor2d_OffsetCurve.hxx
src/Adaptor3d/Adaptor3d_Curve.cxx
src/Adaptor3d/Adaptor3d_Curve.hxx
src/Adaptor3d/Adaptor3d_CurveOnSurface.cxx
src/Adaptor3d/Adaptor3d_CurveOnSurface.hxx
src/Adaptor3d/Adaptor3d_IsoCurve.cxx
src/Adaptor3d/Adaptor3d_IsoCurve.hxx
src/Adaptor3d/Adaptor3d_Surface.cxx
src/Adaptor3d/Adaptor3d_Surface.hxx
src/BRepAdaptor/BRepAdaptor_CompCurve.cxx
src/BRepAdaptor/BRepAdaptor_CompCurve.hxx
src/BRepAdaptor/BRepAdaptor_Curve.cxx
src/BRepAdaptor/BRepAdaptor_Curve.hxx
src/BRepAdaptor/BRepAdaptor_Curve2d.cxx
src/BRepAdaptor/BRepAdaptor_Curve2d.hxx
src/BRepAdaptor/BRepAdaptor_Surface.cxx
src/BRepAdaptor/BRepAdaptor_Surface.hxx
src/BiTgte/BiTgte_CurveOnEdge.cxx
src/BiTgte/BiTgte_CurveOnEdge.hxx
src/ChFiDS/ChFiDS_ElSpine.cxx
src/ChFiDS/ChFiDS_ElSpine.hxx
src/Geom2dAdaptor/Geom2dAdaptor_Curve.cxx
src/Geom2dAdaptor/Geom2dAdaptor_Curve.hxx
src/Geom2dEvaluator/Geom2dEvaluator_Curve.hxx
src/Geom2dEvaluator/Geom2dEvaluator_OffsetCurve.cxx
src/Geom2dEvaluator/Geom2dEvaluator_OffsetCurve.hxx
src/GeomAdaptor/GeomAdaptor_Curve.cxx
src/GeomAdaptor/GeomAdaptor_Curve.hxx
src/GeomAdaptor/GeomAdaptor_Surface.cxx
src/GeomAdaptor/GeomAdaptor_Surface.hxx
src/GeomAdaptor/GeomAdaptor_SurfaceOfLinearExtrusion.cxx
src/GeomAdaptor/GeomAdaptor_SurfaceOfLinearExtrusion.hxx
src/GeomAdaptor/GeomAdaptor_SurfaceOfRevolution.cxx
src/GeomAdaptor/GeomAdaptor_SurfaceOfRevolution.hxx
src/GeomEvaluator/GeomEvaluator_Curve.hxx
src/GeomEvaluator/GeomEvaluator_OffsetCurve.cxx
src/GeomEvaluator/GeomEvaluator_OffsetCurve.hxx
src/GeomEvaluator/GeomEvaluator_OffsetSurface.cxx
src/GeomEvaluator/GeomEvaluator_OffsetSurface.hxx
src/GeomEvaluator/GeomEvaluator_Surface.hxx
src/GeomEvaluator/GeomEvaluator_SurfaceOfExtrusion.cxx
src/GeomEvaluator/GeomEvaluator_SurfaceOfExtrusion.hxx
src/GeomEvaluator/GeomEvaluator_SurfaceOfRevolution.cxx
src/GeomEvaluator/GeomEvaluator_SurfaceOfRevolution.hxx
src/GeomFill/GeomFill_SnglrFunc.cxx
src/GeomFill/GeomFill_SnglrFunc.hxx
src/ProjLib/ProjLib_CompProjectedCurve.cxx
src/ProjLib/ProjLib_CompProjectedCurve.hxx
src/ProjLib/ProjLib_ProjectOnPlane.cxx
src/ProjLib/ProjLib_ProjectOnPlane.hxx
src/ProjLib/ProjLib_ProjectedCurve.cxx
src/ProjLib/ProjLib_ProjectedCurve.hxx

index 3df4666d44ff19442768a31e14206acd2bef7a67..5bcd2eb872873495a32c36944ae798816b883981 100644 (file)
@@ -40,6 +40,16 @@ Adaptor2d_Curve2d::~Adaptor2d_Curve2d()
 {
 }
 
+//=======================================================================
+//function : ShallowCopy()
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor2d_Curve2d) Adaptor2d_Curve2d::ShallowCopy() const
+{  
+  throw Standard_NotImplemented("Adaptor2d_Curve2d::ShallowCopy");
+}
+
 //=======================================================================
 //function : FirstParameter
 //purpose  : 
index ae14128738da1545b0b66ea57a7b442bbfbfdfa8..1da082692cdbfb041b6a3ee8b01d683c0dba7c37 100644 (file)
@@ -54,6 +54,9 @@ class Adaptor2d_Curve2d : public Standard_Transient
 {
   DEFINE_STANDARD_RTTIEXT(Adaptor2d_Curve2d, Standard_Transient)
 public:
+
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor2d_Curve2d) ShallowCopy() const;
   
   Standard_EXPORT virtual Standard_Real FirstParameter() const;
   
index 7e5cd5deec600d6618f1f86fc5afe05cfe147bcd..16792e654adb9638f3ffed81bb66b759b515801f 100644 (file)
@@ -53,6 +53,22 @@ Adaptor2d_Line2d::Adaptor2d_Line2d()
 {
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+ Handle(Adaptor2d_Curve2d) Adaptor2d_Line2d::ShallowCopy() const
+ {
+   Handle(Adaptor2d_Line2d) aCopy = new Adaptor2d_Line2d();
+
+   aCopy->myUfirst = myUfirst;
+   aCopy->myUlast  = myUlast;
+   aCopy->myAx2d   = myAx2d;
+
+   return aCopy;
+ }
+
 //=======================================================================
 //function : Load
 //purpose  : 
index 3cdb10ef1458462724a716231f988f867884515c..db8ee1a6c0f4ef37022c8d2ac314de4040ac1b60 100644 (file)
@@ -53,7 +53,10 @@ public:
   Standard_EXPORT Adaptor2d_Line2d();
   
   Standard_EXPORT Adaptor2d_Line2d(const gp_Pnt2d& P, const gp_Dir2d& D, const Standard_Real UFirst, const Standard_Real ULast);
-  
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor2d_Curve2d) ShallowCopy() const Standard_OVERRIDE;
+
   Standard_EXPORT void Load (const gp_Lin2d& L);
   
   Standard_EXPORT void Load (const gp_Lin2d& L, const Standard_Real UFirst, const Standard_Real ULast);
index db84f182002aa8b8e589105232a850da7cee74d2..dd1e205e899408f4e6ddfb1f94aeb891c54b26ef 100644 (file)
@@ -90,6 +90,25 @@ Adaptor2d_OffsetCurve::Adaptor2d_OffsetCurve(
 {
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor2d_Curve2d) Adaptor2d_OffsetCurve::ShallowCopy() const
+{
+  Handle(Adaptor2d_OffsetCurve) aCopy = new Adaptor2d_OffsetCurve();
+
+  if (!myCurve.IsNull())
+  {
+    aCopy->myCurve  = myCurve->ShallowCopy();
+  }
+  aCopy->myOffset = myOffset;
+  aCopy->myFirst  = myFirst;
+  aCopy->myLast   = myLast;
+
+  return aCopy;
+}
 //=======================================================================
 //function : Load
 //purpose  : 
index bdfa376dd54a4e099acc3330bd4e183b856422fe..14c5bd838d92f97923bd59c997f3e97ccd508ab8 100644 (file)
@@ -57,6 +57,9 @@ public:
   //! WFirst,WLast define the bounds of the Offset curve.
   Standard_EXPORT Adaptor2d_OffsetCurve(const Handle(Adaptor2d_Curve2d)& C, const Standard_Real Offset, const Standard_Real WFirst, const Standard_Real WLast);
   
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor2d_Curve2d) ShallowCopy() const Standard_OVERRIDE;
+
   //! Changes  the curve.  The Offset is reset to 0.
   Standard_EXPORT void Load (const Handle(Adaptor2d_Curve2d)& S);
   
index d82c14b1b8c249637fdbedd5d3525b3e334efc46..76b13c555733e5c1af9652cb25ec513dbc5d4985 100644 (file)
@@ -41,6 +41,16 @@ Adaptor3d_Curve::~Adaptor3d_Curve()
 {
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Curve) Adaptor3d_Curve::ShallowCopy() const
+{
+  throw Standard_NotImplemented("Adaptor3d_Curve::ShallowCopy");
+}
+
 //=======================================================================
 //function : FirstParameter
 //purpose  : 
index 52897871e47bfaeb4f2782b255ffa5d2786bd3de..78f062eafc67ad28e11708dc94babceb75112705 100644 (file)
@@ -58,6 +58,9 @@ class Adaptor3d_Curve : public Standard_Transient
   DEFINE_STANDARD_RTTIEXT(Adaptor3d_Curve, Standard_Transient)
 public:
 
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const;
+
   Standard_EXPORT virtual Standard_Real FirstParameter() const;
   
   Standard_EXPORT virtual Standard_Real LastParameter() const;
index a0dff90f24f9e145966ea585117b04300bd827d5..8480ace3357dc90b9201e594fc9daf2c2254dca1 100644 (file)
@@ -718,6 +718,40 @@ Adaptor3d_CurveOnSurface::Adaptor3d_CurveOnSurface
   Load(C);
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Curve) Adaptor3d_CurveOnSurface::ShallowCopy() const
+{
+  Handle(Adaptor3d_CurveOnSurface) aCopy = new Adaptor3d_CurveOnSurface();
+
+  if (!mySurface.IsNull())
+  {
+    aCopy->mySurface = mySurface->ShallowCopy();
+  }
+  if (!myCurve.IsNull())
+  {
+    aCopy->myCurve = myCurve->ShallowCopy();
+  }
+  aCopy->myType      = myType;
+  aCopy->myCirc      = myCirc;
+  aCopy->myLin       = myLin;
+  if (!myFirstSurf.IsNull())
+  {
+    aCopy->myFirstSurf = myFirstSurf->ShallowCopy();
+  }
+  if (!myLastSurf.IsNull())
+  {
+    aCopy->myLastSurf = myLastSurf->ShallowCopy();
+  }
+  aCopy->myIntervals = myIntervals;
+  aCopy->myIntCont   = myIntCont;
+
+  return aCopy;
+}
+
 //=======================================================================
 //function : Load
 //purpose  : 
index 96c2309534dbdf6a019452e3d015a44db6fcf62a..554a7edf39f83db16c7b4dbbe5b0d2d79dbabbdd 100644 (file)
@@ -45,6 +45,9 @@ public:
   //! the surface <S>.
   Standard_EXPORT Adaptor3d_CurveOnSurface(const Handle(Adaptor2d_Curve2d)& C, const Handle(Adaptor3d_Surface)& S);
   
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE;
+
   //! Changes the surface.
   Standard_EXPORT void Load (const Handle(Adaptor3d_Surface)& S);
   
index 712d89a8a38f185b5d4a92da0f8b2a2e13114599..7493df89dab1ac774eec91969ecc8012cd317848 100644 (file)
@@ -104,6 +104,27 @@ Adaptor3d_IsoCurve::Adaptor3d_IsoCurve(const Handle(Adaptor3d_Surface)& theS,
   Load(theIso, theParam, theWFirst, theWLast);
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Curve) Adaptor3d_IsoCurve::ShallowCopy() const
+{
+  Handle(Adaptor3d_IsoCurve) aCopy = new Adaptor3d_IsoCurve();
+
+  if (!mySurface.IsNull())
+  {
+    aCopy->mySurface = mySurface->ShallowCopy();
+  }
+  aCopy->myIso       = myIso;
+  aCopy->myFirst     = myFirst;
+  aCopy->myLast      = myLast;
+  aCopy->myParameter = myParameter;
+
+  return aCopy;
+}
+
 //=======================================================================
 //function : Load
 //purpose  : 
index b05da9e2c72a7dd2c00d65ff5e6c84e74fd16048..9fa24f5a9586ba87c49b654d4026bc277746a426 100644 (file)
@@ -49,6 +49,9 @@ public:
   //! iso. WFirst,WLast define the bounds of the iso.
   Standard_EXPORT Adaptor3d_IsoCurve(const Handle(Adaptor3d_Surface)& S, const GeomAbs_IsoType Iso, const Standard_Real Param, const Standard_Real WFirst, const Standard_Real WLast);
   
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE;
+
   //! Changes  the surface.  The  iso  is  reset  to
   //! NoneIso.
   Standard_EXPORT void Load (const Handle(Adaptor3d_Surface)& S);
index 5a52130b5c2cfcde9c7c2a9984de44ee9e536e3b..c48bbc5b429e110dde404bba0c43afd4cc820770 100644 (file)
@@ -43,6 +43,15 @@ Adaptor3d_Surface::~Adaptor3d_Surface()
 {
 }
 
+//=======================================================================
+//function : ShallowCopy()
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Surface) Adaptor3d_Surface::ShallowCopy() const
+{
+  throw Standard_NotImplemented("Adaptor3d_Surface::ShallowCopy");
+}
 //=======================================================================
 //function : FirstUParameter
 //purpose  : 
index a3163f92dada9e20aa6798e9204fd6b868c56551..5972b5ff76f3f1ff79feef665c7ee3ce6080b573 100644 (file)
@@ -59,6 +59,9 @@ class Adaptor3d_Surface : public Standard_Transient
   DEFINE_STANDARD_RTTIEXT(Adaptor3d_Surface, Standard_Transient)
 public:
 
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Surface) ShallowCopy() const;
+
   Standard_EXPORT virtual Standard_Real FirstUParameter() const;
   
   Standard_EXPORT virtual Standard_Real LastUParameter() const;
index 64acb5ee91f9a87bb7d22872b97de16fd3c99b1d..2cf7998f0ad5107afb3d5a075f07b1a88b5ba7ca 100644 (file)
@@ -79,6 +79,34 @@ BRepAdaptor_CompCurve::BRepAdaptor_CompCurve(const TopoDS_Wire& theWire,
   Initialize(theWire, theIsAC, theFirst, theLast, theTolerance);
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Curve) BRepAdaptor_CompCurve::ShallowCopy() const
+{
+  Handle(BRepAdaptor_CompCurve) aCopy = new BRepAdaptor_CompCurve();
+
+  aCopy->myWire   = myWire;
+  aCopy->TFirst   = TFirst;
+  aCopy->TLast    = TLast;
+  aCopy->PTol     = PTol;
+  aCopy->myCurves = new (BRepAdaptor_HArray1OfCurve) (1, myCurves->Size());
+  for (Standard_Integer anI = 1; anI <= myCurves->Size(); ++anI)
+  {
+    const Handle(Adaptor3d_Curve) aCurve = myCurves->Value(anI).ShallowCopy();
+    const BRepAdaptor_Curve& aBrepCurve = *(Handle(BRepAdaptor_Curve)::DownCast(aCurve));
+    aCopy->myCurves->SetValue(anI, aBrepCurve);
+  }
+  aCopy->myKnots  = myKnots;
+  aCopy->CurIndex = CurIndex;
+  aCopy->Forward  = Forward;
+  aCopy->IsbyAC   = IsbyAC;
+
+  return aCopy;
+}
+
  void BRepAdaptor_CompCurve::Initialize(const TopoDS_Wire& W,
                                        const Standard_Boolean AC)
 {
index cf772a41a985061cce076aad0bbbf19cc766858e..9378600ea0fe7027a4c1e7a36a8536058905d9f0 100644 (file)
@@ -74,6 +74,9 @@ public:
   //! <W>.
   Standard_EXPORT BRepAdaptor_CompCurve(const TopoDS_Wire& W, const Standard_Boolean KnotByCurvilinearAbcissa, const Standard_Real First, const Standard_Real Last, const Standard_Real Tol);
   
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE;
+
   //! Sets the  wire <W>.
   Standard_EXPORT void Initialize (const TopoDS_Wire& W, const Standard_Boolean KnotByCurvilinearAbcissa);
   
index f6915be1f67aa4fffecaded24d260d260a812799..1bd9a2f7da08511bdde20003093face2e1098c05 100644 (file)
@@ -73,6 +73,30 @@ BRepAdaptor_Curve::BRepAdaptor_Curve(const TopoDS_Edge& E,
   Initialize(E,F);
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Curve) BRepAdaptor_Curve::ShallowCopy() const
+{
+  Handle(BRepAdaptor_Curve) aCopy = new BRepAdaptor_Curve();
+
+  aCopy->myTrsf  = myTrsf;
+
+  const Handle(Adaptor3d_Curve) aCurve = myCurve.ShallowCopy();
+  const GeomAdaptor_Curve& aGeomCurve = *(Handle(GeomAdaptor_Curve)::DownCast(aCurve));
+  aCopy->myCurve = aGeomCurve;
+
+  if (!myConSurf.IsNull())
+  {
+    aCopy->myConSurf = Handle(Adaptor3d_CurveOnSurface)::DownCast(myConSurf->ShallowCopy());
+  }
+  aCopy->myEdge    = myEdge;
+
+  return aCopy;
+}
+
 //=======================================================================
 //function : Reset
 //purpose  :
index ded2fda66c31cbc670b57e4c2dc93d51fb18341c..b411124337006d63b2d45d5e0bdd00658d642d6a 100644 (file)
@@ -82,6 +82,9 @@ public:
   //! the face.
   Standard_EXPORT BRepAdaptor_Curve(const TopoDS_Edge& E, const TopoDS_Face& F);
 
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE;
+
   //! Reset currently loaded curve (undone Load()).
   Standard_EXPORT void Reset();
 
index 140f4dd97b77b91609d1defddde7a335cedab21a..ceccc9e5b4aea400d246a2d7f23f5d8b3a3bb35f 100644 (file)
@@ -43,6 +43,27 @@ BRepAdaptor_Curve2d::BRepAdaptor_Curve2d(const TopoDS_Edge& E,
   Initialize(E,F);
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor2d_Curve2d) BRepAdaptor_Curve2d::ShallowCopy() const
+{
+  Handle(BRepAdaptor_Curve2d) aCopy = new BRepAdaptor_Curve2d();
+
+  aCopy->myCurve = myCurve;
+  aCopy->myTypeCurve = myTypeCurve;
+  aCopy->myFirst = myFirst;
+  aCopy->myLast = myLast;
+  aCopy->myBSplineCurve = myBSplineCurve;
+  if (!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
+
+  return aCopy;
+}
 
 //=======================================================================
 //function : Initialize
index f19157649d8db5d28ef0a4ba52db70c28edb8c4f..a78e3c987a1ea990d267c05a2e4cbee08caef7c2 100644 (file)
@@ -49,6 +49,9 @@ public:
   
   //! Creates with the pcurve of <E> on <F>.
   Standard_EXPORT BRepAdaptor_Curve2d(const TopoDS_Edge& E, const TopoDS_Face& F);
+
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor2d_Curve2d) ShallowCopy() const Standard_OVERRIDE;
   
   //! Initialize with the pcurve of <E> on <F>.
   Standard_EXPORT void Initialize (const TopoDS_Edge& E, const TopoDS_Face& F);
index 1eda58f4feb523315f141b05ab2298b8970ce8a2..98acaaba9014d4763f2bc665c3d9c054d2c28891 100644 (file)
@@ -63,6 +63,24 @@ BRepAdaptor_Surface::BRepAdaptor_Surface(const TopoDS_Face& F,
 }
 
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Surface) BRepAdaptor_Surface::ShallowCopy() const
+{
+  Handle(BRepAdaptor_Surface) aCopy = new BRepAdaptor_Surface();
+
+  const Handle(Adaptor3d_Surface) aSurface = mySurf.ShallowCopy();
+  const GeomAdaptor_Surface& aGeomSurface = *(Handle(GeomAdaptor_Surface)::DownCast(aSurface));
+  aCopy->mySurf = aGeomSurface;
+
+  aCopy->myTrsf = myTrsf;
+  aCopy->myFace = myFace;
+
+  return aCopy;
+}
 //=======================================================================
 //function : Initialize
 //purpose  : 
index ffd8648d35d0dc7b6601266fbf54a4b80972bb48..ed067dc619f83970bede0a8c989ee3c0350d67fc 100644 (file)
@@ -68,6 +68,9 @@ public:
   //! the  parameter  range  in   the  UV space  of  the
   //! restriction.
   Standard_EXPORT BRepAdaptor_Surface(const TopoDS_Face& F, const Standard_Boolean R = Standard_True);
+
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Surface) ShallowCopy() const Standard_OVERRIDE;
   
   //! Sets the surface to the geometry of <F>.
   Standard_EXPORT void Initialize (const TopoDS_Face& F, const Standard_Boolean Restriction = Standard_True);
index d3dc87b5524818cd042ff3716e0beca3e2402514..a94b3a6091035963f5f2ed5bc4b68fb780f01336 100644 (file)
@@ -64,7 +64,24 @@ BiTgte_CurveOnEdge::BiTgte_CurveOnEdge(const TopoDS_Edge& theEonF,
   Init(theEonF, theEdge);
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
 
+Handle(Adaptor3d_Curve) BiTgte_CurveOnEdge::ShallowCopy() const
+{
+  Handle(BiTgte_CurveOnEdge) aCopy = new BiTgte_CurveOnEdge();
+
+  aCopy->myEdge = myEdge;
+  aCopy->myEonF = myEonF;
+  aCopy->myCurv = myCurv;
+  aCopy->myConF = myConF;
+  aCopy->myType = myType;
+  aCopy->myCirc = myCirc;
+
+  return aCopy;
+}
 //=======================================================================
 //function : Init
 //purpose  : 
index 1c2c0c8793f5894e4e76eda7561812720857b617..d1b3142fc69e5f5b372f953d972a2c7bcc647afb 100644 (file)
@@ -57,6 +57,9 @@ public:
   Standard_EXPORT BiTgte_CurveOnEdge();
   
   Standard_EXPORT BiTgte_CurveOnEdge(const TopoDS_Edge& EonF, const TopoDS_Edge& Edge);
+
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE;
   
   Standard_EXPORT void Init (const TopoDS_Edge& EonF, const TopoDS_Edge& Edge);
   
index a2866fffa956b273025a271e0304581fdf950985..8e4635022557fec7bbe2a8c72e14c49416e035c5 100644 (file)
@@ -51,6 +51,34 @@ ChFiDS_ElSpine::ChFiDS_ElSpine()
 {
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+Handle(Adaptor3d_Curve) ChFiDS_ElSpine::ShallowCopy() const
+{
+  Handle(ChFiDS_ElSpine) aCopy = new ChFiDS_ElSpine();
+
+  const Handle(Adaptor3d_Curve) aCurve = curve.ShallowCopy();
+  const GeomAdaptor_Curve& aGeomCurve = *(Handle(GeomAdaptor_Curve)::DownCast(aCurve));
+  aCopy->curve = aGeomCurve;
+
+  aCopy->ptfirst              = ptfirst;
+  aCopy->ptlast               = ptlast;
+  aCopy->tgfirst              = tgfirst;
+  aCopy->tglast               = tglast;
+  aCopy->VerticesWithTangents = VerticesWithTangents;
+  aCopy->previous             = previous;
+  aCopy->next                 = next;
+  aCopy->pfirst               = pfirst;
+  aCopy->plast                = plast;
+  aCopy->period               = period;
+  aCopy->periodic             = periodic;
+  aCopy->pfirstsav            = pfirstsav;
+  aCopy->plastsav             = plastsav;
+
+  return aCopy;
+}
 
 //=======================================================================
 //function : FirstParameter
@@ -449,7 +477,7 @@ Handle(ChFiDS_SurfData)& ChFiDS_ElSpine::ChangeNext()
 
 gp_Lin ChFiDS_ElSpine::Line() const 
 {
- return curve.Line();  
+ return curve.Line();
 }
 
 //=======================================================================
@@ -479,7 +507,7 @@ gp_Elips ChFiDS_ElSpine::Ellipse() const
 
 gp_Hypr ChFiDS_ElSpine::Hyperbola() const 
 {
-  return curve.Hyperbola();  
+  return curve.Hyperbola();
 }
 
 //=======================================================================
index 9dfc5a014629a0a367b8c93730dfddc454353d9a..374eeead395261251b89f1686104a887649129e0 100644 (file)
@@ -57,6 +57,9 @@ class ChFiDS_ElSpine  : public Adaptor3d_Curve
 public:
 
   Standard_EXPORT ChFiDS_ElSpine();
+
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE;
   
   Standard_EXPORT virtual Standard_Real FirstParameter() const Standard_OVERRIDE;
   
index 2220bb3c65c8b32e3b15613cb81471f32587efe2..b3ce81771b7ca9e54b8e58e8dfb73032d3ef0ec8 100644 (file)
@@ -65,6 +65,28 @@ static const Standard_Real PosTol = Precision::PConfusion() / 2;
 
 IMPLEMENT_STANDARD_RTTIEXT(Geom2dAdaptor_Curve, Adaptor2d_Curve2d)
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor2d_Curve2d) Geom2dAdaptor_Curve::ShallowCopy() const
+{
+  Handle(Geom2dAdaptor_Curve) aCopy = new Geom2dAdaptor_Curve();
+
+  aCopy->myCurve           = myCurve;
+  aCopy->myTypeCurve       = myTypeCurve;
+  aCopy->myFirst           = myFirst;
+  aCopy->myLast            = myLast;
+  aCopy->myBSplineCurve    = myBSplineCurve;
+  if(!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
+
+  return aCopy;
+}
+
 //=======================================================================
 //function : LocalContinuity
 //purpose  : Computes the Continuity of a BSplineCurve 
index 0c668ec6d4e7d47a28a933b97bc741ef18c13e10..accca173afd8bebdf5d8ed9768e16b6a9fa5dc6c 100644 (file)
@@ -58,6 +58,9 @@ public:
   //! Standard_ConstructionError is raised if Ufirst>Ulast
   Standard_EXPORT Geom2dAdaptor_Curve(const Handle(Geom2d_Curve)& C, const Standard_Real UFirst, const Standard_Real ULast);
 
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor2d_Curve2d) ShallowCopy() const Standard_OVERRIDE;
+
   //! Reset currently loaded curve (undone Load()).
   Standard_EXPORT void Reset();
 
@@ -183,7 +186,7 @@ private:
   //! \param theParameter the value on the knot axis which identifies the caching span
   void RebuildCache (const Standard_Real theParameter) const;
 
-private:
+protected:
 
   Handle(Geom2d_Curve) myCurve;
   GeomAbs_CurveType myTypeCurve;
index 4c99991a8e70f36f5cfaeb51c175af75988c5f1a..9a82007b1b76fb3cdced0b29ccbea5cb3cb91fb1 100644 (file)
@@ -44,6 +44,8 @@ public:
   virtual gp_Vec2d DN(const Standard_Real theU,
                       const Standard_Integer theDerU) const = 0;
 
+  virtual Handle(Geom2dEvaluator_Curve) ShallowCopy() const = 0;
+
   DEFINE_STANDARD_RTTI_INLINE(Geom2dEvaluator_Curve,Standard_Transient)
 };
 
index 88e34214844c4a1b58cb856f4ecacc6d9c514b47..6cbe24e2f4b66b872d2784308788e1c533c55c95 100644 (file)
@@ -113,6 +113,22 @@ gp_Vec2d Geom2dEvaluator_OffsetCurve::DN(const Standard_Real theU,
   return aDN;
 }
 
+Handle(Geom2dEvaluator_Curve) Geom2dEvaluator_OffsetCurve::ShallowCopy() const
+{
+  Handle(Geom2dEvaluator_OffsetCurve) aCopy;
+  if (!myBaseAdaptor.IsNull())
+  {
+    aCopy = new Geom2dEvaluator_OffsetCurve(Handle(Geom2dAdaptor_Curve)::DownCast(myBaseAdaptor->ShallowCopy()),
+                                            myOffset);
+  }
+  else
+  {
+    aCopy = new Geom2dEvaluator_OffsetCurve(myBaseCurve, myOffset);
+  }
+
+  return aCopy;
+}
+
 
 void Geom2dEvaluator_OffsetCurve::BaseD0(const Standard_Real theU,
                                                gp_Pnt2d& theValue) const
index 356a89e9fc2da9e72aa41044a58a76813f2a8a5c..209255983adb8bb2f7bf12c09faab713989b3001 100644 (file)
@@ -53,6 +53,8 @@ public:
   Standard_EXPORT gp_Vec2d DN(const Standard_Real theU,
                               const Standard_Integer theDeriv) const Standard_OVERRIDE;
 
+  Standard_EXPORT Handle(Geom2dEvaluator_Curve) ShallowCopy() const Standard_OVERRIDE;
+
   DEFINE_STANDARD_RTTIEXT(Geom2dEvaluator_OffsetCurve,Geom2dEvaluator_Curve)
 
 private:
index 6d8bfae8122096f354047b8a8e558cd12f1c5137..7115a0f80f0ba48c37c47af070080f2b775a64f0 100644 (file)
@@ -63,6 +63,28 @@ static const Standard_Real PosTol = Precision::PConfusion() / 2;
 
 IMPLEMENT_STANDARD_RTTIEXT(GeomAdaptor_Curve, Adaptor3d_Curve)
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Curve) GeomAdaptor_Curve::ShallowCopy() const
+{
+  Handle(GeomAdaptor_Curve) aCopy = new GeomAdaptor_Curve();
+
+  aCopy->myCurve           = myCurve;
+  aCopy->myTypeCurve       = myTypeCurve;
+  aCopy->myFirst           = myFirst;
+  aCopy->myLast            = myLast;
+  aCopy->myBSplineCurve    = myBSplineCurve;
+  if (!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
+
+  return aCopy;
+}
+
 //=======================================================================
 //function : LocalContinuity
 //purpose  : Computes the Continuity of a BSplineCurve 
index 894623beba08de68bd24f0efb73e328f6c679588..4c2fe32d8c0a17983ab70e1df59aaca1016d9e79 100644 (file)
@@ -54,6 +54,9 @@ public:
     Load (theCurve, theUFirst, theULast);
   }
 
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE;
+
   //! Reset currently loaded curve (undone Load()).
   Standard_EXPORT void Reset();
 
index 27d058aefcf6712378faa6d31494063d87edf629..3c912b8a61f5a7bdab89103939658d937e90db1c 100644 (file)
@@ -114,6 +114,33 @@ GeomAbs_Shape LocalContinuity(Standard_Integer         Degree,
   return GeomAbs_CN;
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Surface) GeomAdaptor_Surface::ShallowCopy() const
+{
+  Handle(GeomAdaptor_Surface) aCopy = new GeomAdaptor_Surface();
+
+  aCopy->mySurface         = mySurface;
+  aCopy->myUFirst          = myUFirst;
+  aCopy->myULast           = myULast;
+  aCopy->myVFirst          = myVFirst;
+  aCopy->myVLast           = myVLast;
+  aCopy->myTolU            = myTolU;
+  aCopy->myTolV            = myTolV;
+  aCopy->myBSplineSurface  = myBSplineSurface;
+
+  aCopy->mySurfaceType     = mySurfaceType;
+  if (!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
+
+  return aCopy;
+}
+
 //=======================================================================
 //function : Load
 //purpose  : 
index 725bcfb6b5ca7e1a08032a7b21298290c863c127..49efc819325e12a1e6f6162ffc8b1f67f2970f3f 100644 (file)
@@ -61,6 +61,9 @@ public:
     Load (theSurf, theUFirst, theULast, theVFirst, theVLast, theTolU, theTolV);
   }
 
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Surface) ShallowCopy() const Standard_OVERRIDE;
+
   void Load (const Handle(Geom_Surface)& theSurf)
   {
     if (theSurf.IsNull()) { throw Standard_NullObject("GeomAdaptor_Surface::Load"); }
@@ -257,7 +260,7 @@ private:
   //! \param theV second parameter to identify the span for caching
   Standard_EXPORT void RebuildCache (const Standard_Real theU, const Standard_Real theV) const;
 
-private:
+  protected:
 
   Handle(Geom_Surface) mySurface;
   Standard_Real myUFirst;
@@ -270,7 +273,6 @@ private:
   Handle(Geom_BSplineSurface) myBSplineSurface; ///< B-spline representation to prevent downcasts
   mutable Handle(BSplSLib_Cache) mySurfaceCache; ///< Cached data for B-spline or Bezier surface
 
-protected:
   GeomAbs_SurfaceType mySurfaceType;
   Handle(GeomEvaluator_Surface) myNestedEvaluator; ///< Calculates values of nested complex surfaces (offset surface, surface of extrusion or revolution)
 };
index d196c8e9081aa40f38ccea45b3ce308949c182ea..55e7e6b098738672b9b6ebe751079a5de6521a52 100644 (file)
@@ -58,6 +58,39 @@ GeomAdaptor_SurfaceOfLinearExtrusion::GeomAdaptor_SurfaceOfLinearExtrusion
   Load(V);
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Surface) GeomAdaptor_SurfaceOfLinearExtrusion::ShallowCopy() const
+{
+  Handle(GeomAdaptor_SurfaceOfLinearExtrusion) aCopy = new GeomAdaptor_SurfaceOfLinearExtrusion();
+
+  if (!myBasisCurve.IsNull())
+  {
+    aCopy->myBasisCurve = myBasisCurve->ShallowCopy();
+  }
+  aCopy->myDirection  = myDirection;
+  aCopy->myHaveDir    = myHaveDir;
+
+  aCopy->mySurface        = mySurface;
+  aCopy->myUFirst         = myUFirst;
+  aCopy->myULast          = myULast;
+  aCopy->myVFirst         = myVFirst;
+  aCopy->myVLast          = myVLast;
+  aCopy->myTolU           = myTolU;
+  aCopy->myTolV           = myTolV;
+  aCopy->myBSplineSurface = myBSplineSurface;
+
+  aCopy->mySurfaceType = mySurfaceType;
+  if (!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
+
+  return aCopy;
+}
 //=======================================================================
 //function : Load
 //purpose  : 
index f5e28e909aa92b06f22d005d6030a6929f4bd9a5..c9b3179e9ededf429252e2a943863fcbb7ac956c 100644 (file)
@@ -57,6 +57,9 @@ public:
   //! Thew Curve and the Direction are loaded.
   Standard_EXPORT GeomAdaptor_SurfaceOfLinearExtrusion(const Handle(Adaptor3d_Curve)& C, const gp_Dir& V);
   
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Surface) ShallowCopy() const Standard_OVERRIDE;
+
   //! Changes the Curve
   Standard_EXPORT void Load (const Handle(Adaptor3d_Curve)& C);
   
index b2bc4336c22a08e454bdfcff9fe89b4b436d51c3..eea5ae45c90f17ce07b3e407da4dfffd631cd413 100644 (file)
@@ -58,6 +58,41 @@ GeomAdaptor_SurfaceOfRevolution::GeomAdaptor_SurfaceOfRevolution(
   Load(V);
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Surface) GeomAdaptor_SurfaceOfRevolution::ShallowCopy() const
+{
+  Handle(GeomAdaptor_SurfaceOfRevolution) aCopy = new GeomAdaptor_SurfaceOfRevolution();
+
+  if (!myBasisCurve.IsNull())
+  {
+    aCopy->myBasisCurve = myBasisCurve->ShallowCopy();
+  }
+  aCopy->myAxis       = myAxis;
+  aCopy->myHaveAxis   = myHaveAxis;
+  aCopy->myAxeRev     = myAxeRev;
+
+  aCopy->mySurface        = mySurface;
+  aCopy->myUFirst         = myUFirst;
+  aCopy->myULast          = myULast;
+  aCopy->myVFirst         = myVFirst;
+  aCopy->myVLast          = myVLast;
+  aCopy->myTolU           = myTolU;
+  aCopy->myTolV           = myTolV;
+  aCopy->myBSplineSurface = myBSplineSurface;
+
+  aCopy->mySurfaceType     = mySurfaceType;
+  if (!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
+
+  return aCopy;
+}
+
 //=======================================================================
 //function : Load
 //purpose  : 
index a41b151871088eff00bbed44427616f5c50c0946..35485e9fb5c293b03de3dc6bf982bc2a35e96a0d 100644 (file)
@@ -65,6 +65,9 @@ public:
   
   //! The Curve and the Direction are loaded.
   Standard_EXPORT GeomAdaptor_SurfaceOfRevolution(const Handle(Adaptor3d_Curve)& C, const gp_Ax1& V);
+
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Surface) ShallowCopy() const Standard_OVERRIDE;
   
   //! Changes the Curve
   Standard_EXPORT void Load (const Handle(Adaptor3d_Curve)& C);
index 6d57afad8743a8c7c16b674392836a2218fcbe22..4a13acad5025d392ebda5c2cd81ca75630260d59 100644 (file)
@@ -44,6 +44,8 @@ public:
   virtual gp_Vec DN(const Standard_Real theU,
                     const Standard_Integer theDerU) const = 0;
 
+  virtual Handle(GeomEvaluator_Curve) ShallowCopy() const = 0;
+
   DEFINE_STANDARD_RTTI_INLINE(GeomEvaluator_Curve,Standard_Transient)
 };
 
index d01328ba5d69ab685a310a7fde9bc9337e610ecf..641221b9c590b2131d013260e8c28083c8b07150 100644 (file)
@@ -117,6 +117,21 @@ gp_Vec GeomEvaluator_OffsetCurve::DN(const Standard_Real theU,
   return aDN;
 }
 
+Handle(GeomEvaluator_Curve) GeomEvaluator_OffsetCurve::ShallowCopy() const
+{
+  Handle(GeomEvaluator_OffsetCurve) aCopy;
+  if (!myBaseAdaptor.IsNull())
+  {
+    aCopy = new GeomEvaluator_OffsetCurve(Handle(GeomAdaptor_Curve)::DownCast(myBaseAdaptor->ShallowCopy()),
+                                          myOffset, myOffsetDir);
+  }
+  else
+  {
+    aCopy = new GeomEvaluator_OffsetCurve(myBaseCurve, myOffset, myOffsetDir);
+  }
+  return aCopy;
+}
+
 
 void GeomEvaluator_OffsetCurve::BaseD0(const Standard_Real theU,
                                              gp_Pnt& theValue) const
index 1e894ce3b03f613f2229f54bea19590f533cb7de..c16b1d34d566da39483235141c37d86830f2c7e9 100644 (file)
@@ -59,6 +59,8 @@ public:
   Standard_EXPORT gp_Vec DN(const Standard_Real theU,
                             const Standard_Integer theDeriv) const Standard_OVERRIDE;
 
+  Standard_EXPORT virtual Handle(GeomEvaluator_Curve) ShallowCopy() const Standard_OVERRIDE;
+
   DEFINE_STANDARD_RTTIEXT(GeomEvaluator_OffsetCurve,GeomEvaluator_Curve)
 
 private:
index b154668fb159c5ae5cffded11c135e8060ed8f27..6fac3fe0b1d3e055cf5e73617961d1ca5ef75efe 100644 (file)
@@ -408,6 +408,22 @@ gp_Vec GeomEvaluator_OffsetSurface::DN(
   }
 }
 
+Handle(GeomEvaluator_Surface) GeomEvaluator_OffsetSurface::ShallowCopy() const
+{
+  Handle(GeomEvaluator_OffsetSurface) aCopy;
+  if (!myBaseAdaptor.IsNull())
+  {
+    aCopy = new GeomEvaluator_OffsetSurface(Handle(GeomAdaptor_Surface)::DownCast(myBaseAdaptor->ShallowCopy()),
+                                          myOffset, myOscSurf);
+  }
+  else
+  {
+    aCopy = new GeomEvaluator_OffsetSurface(myBaseSurf, myOffset, myOscSurf);
+  }
+
+  return aCopy;
+}
+
 
 void GeomEvaluator_OffsetSurface::BaseD0(const Standard_Real theU, const Standard_Real theV,
                                          gp_Pnt& theValue) const
index b6e6cb7d9d757cb388a12443eb0188a75b59bcaf..e4433e28fa7baed2ae2d4eacbef7528ebbc72bac 100644 (file)
@@ -63,6 +63,8 @@ public:
                             const Standard_Integer theDerU,
                             const Standard_Integer theDerV) const Standard_OVERRIDE;
 
+  Standard_EXPORT Handle(GeomEvaluator_Surface) ShallowCopy() const Standard_OVERRIDE;
+
   DEFINE_STANDARD_RTTIEXT(GeomEvaluator_OffsetSurface,GeomEvaluator_Surface)
 
 private:
index 4ec9aa5dbdae2ebe4a778980329a26586797d75d..23fdcf822778d1bd55ecfb23cc48a68dbbbddd07 100644 (file)
@@ -49,6 +49,8 @@ public:
   virtual gp_Vec DN(const Standard_Real theU, const Standard_Real theV,
                     const Standard_Integer theDerU, const Standard_Integer theDerV) const = 0;
 
+  virtual Handle(GeomEvaluator_Surface) ShallowCopy() const  = 0;
+
   DEFINE_STANDARD_RTTI_INLINE(GeomEvaluator_Surface,Standard_Transient)
 };
 
index b6a65e3e61541a6414611b33756482393edb40df..f84e72c0aa3b1f1529fc5da6d5a47d3230817e46 100644 (file)
@@ -119,3 +119,18 @@ gp_Vec GeomEvaluator_SurfaceOfExtrusion::DN(
   return aResult;
 }
 
+Handle(GeomEvaluator_Surface) GeomEvaluator_SurfaceOfExtrusion::ShallowCopy() const
+{
+  Handle(GeomEvaluator_SurfaceOfExtrusion) aCopy;
+  if (!myBaseAdaptor.IsNull())
+  {
+    aCopy = new GeomEvaluator_SurfaceOfExtrusion(myBaseAdaptor->ShallowCopy(), myDirection);
+  }
+  else
+  {
+    aCopy = new GeomEvaluator_SurfaceOfExtrusion(myBaseCurve, myDirection);
+  }
+
+  return aCopy;
+}
+
index 8b2a08c81cb0d8f094acf02fc7e97c1845f03895..49a48752b6aae89576c46366663d7b843520bd89 100644 (file)
@@ -59,6 +59,8 @@ public:
                             const Standard_Integer theDerU,
                             const Standard_Integer theDerV) const Standard_OVERRIDE;
 
+  Standard_EXPORT Handle(GeomEvaluator_Surface) ShallowCopy() const Standard_OVERRIDE;
+
   DEFINE_STANDARD_RTTIEXT(GeomEvaluator_SurfaceOfExtrusion,GeomEvaluator_Surface)
 
 private:
index fbce3b0a5be1d14fc8c8030f1cca31787ffd3a99..6af64d0bd621bff6f127342f0d2d82fa32a03951 100644 (file)
@@ -203,3 +203,20 @@ gp_Vec GeomEvaluator_SurfaceOfRevolution::DN(
   return aResult;
 }
 
+Handle(GeomEvaluator_Surface) GeomEvaluator_SurfaceOfRevolution::ShallowCopy() const
+{
+  Handle(GeomEvaluator_SurfaceOfRevolution) aCopy;
+  if (!myBaseAdaptor.IsNull())
+  {
+    aCopy = new GeomEvaluator_SurfaceOfRevolution(myBaseAdaptor->ShallowCopy(), 
+                                                  myRotAxis.Direction(), myRotAxis.Location());
+  }
+  else
+  {
+    aCopy = new GeomEvaluator_SurfaceOfRevolution(myBaseCurve, 
+                                                  myRotAxis.Direction(), myRotAxis.Location());
+  }
+
+  return aCopy;
+}
+
index 97085349a4b74bd907873ef00f7f80e14e3ddb66..c2858d0e5f44a0d7d4b4fce209a49fc260ecb56a 100644 (file)
@@ -71,6 +71,8 @@ public:
                             const Standard_Integer theDerU,
                             const Standard_Integer theDerV) const Standard_OVERRIDE;
 
+  Standard_EXPORT Handle(GeomEvaluator_Surface) ShallowCopy() const Standard_OVERRIDE;
+
   DEFINE_STANDARD_RTTIEXT(GeomEvaluator_SurfaceOfRevolution,GeomEvaluator_Surface)
 
 private:
index 825758bff5d31efa110ad9e52a31afba17893454..337f52e50aa098e7727cf2deea7400717aff1547 100644 (file)
@@ -29,6 +29,18 @@ GeomFill_SnglrFunc::GeomFill_SnglrFunc(const Handle(Adaptor3d_Curve)& HC) :
 {
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Curve) GeomFill_SnglrFunc::ShallowCopy() const
+{
+  Handle(GeomFill_SnglrFunc) aCopy = new GeomFill_SnglrFunc(myHCurve->ShallowCopy());
+  aCopy->ratio = ratio;
+  return aCopy;
+}
+
 void GeomFill_SnglrFunc::SetRatio(const Standard_Real Ratio)
 {
   ratio = Ratio;
index 69d9f7df65d5ab1d775793fa41c8142d53962593..8cbfc726e658b96e36da6ed8dae8875aeab87348 100644 (file)
@@ -44,6 +44,9 @@ public:
 
   
   Standard_EXPORT GeomFill_SnglrFunc(const Handle(Adaptor3d_Curve)& HC);
+
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE;
   
   Standard_EXPORT void SetRatio (const Standard_Real Ratio);
   
index 49c15ece7dd70f531bc7ecf766fcb65ea2798530..b13f5ac3c632ccffe29d9c880a12a2bc886ea9b4 100644 (file)
@@ -631,6 +631,36 @@ ProjLib_CompProjectedCurve::ProjLib_CompProjectedCurve
   Init();
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor2d_Curve2d) ProjLib_CompProjectedCurve::ShallowCopy() const
+{
+  Handle(ProjLib_CompProjectedCurve) aCopy = new ProjLib_CompProjectedCurve();
+
+  if (!mySurface.IsNull())
+  {
+    aCopy->mySurface = mySurface->ShallowCopy();
+  }
+  if (!myCurve.IsNull())
+  {
+    aCopy->myCurve = myCurve->ShallowCopy();
+  }
+  aCopy->myNbCurves    = myNbCurves;
+  aCopy->mySequence    = mySequence;
+  aCopy->myTolU        = myTolU;
+  aCopy->myTolV        = myTolV;
+  aCopy->myMaxDist     = myMaxDist;
+  aCopy->myUIso        = myUIso;
+  aCopy->myVIso        = myVIso;
+  aCopy->mySnglPnts    = mySnglPnts;
+  aCopy->myMaxDistance = myMaxDistance;
+
+  return aCopy;
+}
+
 //=======================================================================
 //function : Init
 //purpose  : 
@@ -1274,7 +1304,10 @@ void ProjLib_CompProjectedCurve::D0(const Standard_Real U,gp_Pnt2d& P) const
       break;
     }
   }
-  if (!found) throw Standard_DomainError("ProjLib_CompProjectedCurve::D0");
+  if (!found)
+  {
+    throw Standard_DomainError("ProjLib_CompProjectedCurve::D0");
+  }
 
   Standard_Real U0, V0;
 
index d086f7e6d2b4fb9429992318c44da38f5a521cb6..08386705212c270809e82d45f2217ac3ce6dc36c 100644 (file)
@@ -45,6 +45,9 @@ public:
   //! if MaxDist < 0 then algorithm works as above.
   Standard_EXPORT ProjLib_CompProjectedCurve(const Handle(Adaptor3d_Surface)& S, const Handle(Adaptor3d_Curve)& C, const Standard_Real TolU, const Standard_Real TolV, const Standard_Real MaxDist);
   
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor2d_Curve2d) ShallowCopy() const Standard_OVERRIDE;
+
   //! computes a set of projected point and determine the
   //! continuous parts of the projected  curves. The  points
   //! corresponding to a projection on the bounds of the surface are
index 1496e2848d6a1b7b01c5dd8882d05255dec0cf54..07d32923336b8e15e4d1a6ccb549684dcfe6fbde 100644 (file)
@@ -446,6 +446,35 @@ myIsApprox  (Standard_False)
 //  }
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor3d_Curve) ProjLib_ProjectOnPlane::ShallowCopy() const
+{
+  Handle(ProjLib_ProjectOnPlane) aCopy = new ProjLib_ProjectOnPlane();
+
+  if (!myCurve.IsNull())
+  {
+    aCopy->myCurve = myCurve->ShallowCopy();
+  }
+  aCopy->myPlane = myPlane;
+  aCopy->myDirection = myDirection;
+  aCopy->myKeepParam = myKeepParam;
+  aCopy->myFirstPar = myFirstPar;
+  aCopy->myLastPar = myLastPar;
+  aCopy->myTolerance = myTolerance;
+  aCopy->myType = myType;
+  if (!myResult.IsNull())
+  {
+    aCopy->myResult = Handle(GeomAdaptor_Curve)::DownCast(myResult->ShallowCopy());
+  }
+  aCopy->myIsApprox = myIsApprox;
+
+  return aCopy;
+}
+
 //=======================================================================
 //function : Project
 //purpose  : Returns the projection of a point <Point> on a plane 
index a9fb55bc1576647d9d63e5f17984fc724487979d..1fc5e228dc1bb15a627662589ff98523bc7c0206 100644 (file)
@@ -70,6 +70,9 @@ public:
   //! raises  if the direction  <D>  is parallel  to the
   //! plane <Pl>.
   Standard_EXPORT ProjLib_ProjectOnPlane(const gp_Ax3& Pl, const gp_Dir& D);
+
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE;
   
   //! Sets the  Curve  and perform  the projection.
   //! if <KeepParametrization> is true, the parametrization
index f3617344e817376f9e061a2d30135ce4dd1ce513..875caf9e46bdecdfb50081328dacbbfab3285767 100644 (file)
@@ -371,6 +371,33 @@ ProjLib_ProjectedCurve::ProjLib_ProjectedCurve
   Perform(C);
 }
 
+//=======================================================================
+//function : ShallowCopy
+//purpose  : 
+//=======================================================================
+
+Handle(Adaptor2d_Curve2d) ProjLib_ProjectedCurve::ShallowCopy() const
+{
+  Handle(ProjLib_ProjectedCurve) aCopy = new ProjLib_ProjectedCurve();
+
+  aCopy->myTolerance   = myTolerance;
+  if (!mySurface.IsNull())
+  {
+    aCopy->mySurface = mySurface->ShallowCopy();
+  }
+  if (!myCurve.IsNull())
+  {
+    aCopy->myCurve = myCurve->ShallowCopy();
+  }
+  aCopy->myResult      = myResult;
+  aCopy->myDegMin      = myDegMin;
+  aCopy->myDegMax      = myDegMax;
+  aCopy->myMaxSegments = myMaxSegments;
+  aCopy->myMaxDist     = myMaxDist;
+  aCopy->myBndPnt      = myBndPnt;
+
+  return aCopy;
+}
 
 //=======================================================================
 //function : Load
index 22e447ae5307b5df32bf13163d1594f70e7af73a..61587c468a00c962679fcb87d6db4e39c519d760 100644 (file)
@@ -67,6 +67,9 @@ public:
   //! If projecting uses approximation, 3d tolerance is Tol, default parameters are used, 
   Standard_EXPORT ProjLib_ProjectedCurve(const Handle(Adaptor3d_Surface)& S, const Handle(Adaptor3d_Curve)& C, const Standard_Real Tol);
   
+  //! Shallow copy of adaptor
+  Standard_EXPORT virtual Handle(Adaptor2d_Curve2d) ShallowCopy() const Standard_OVERRIDE;
+
   //! Changes the tolerance used to project
   //! the curve on the surface
   Standard_EXPORT void Load (const Standard_Real Tolerance);