]> OCCT Git - occt-copy.git/commitdiff
0032485: More ShallowCopy()+ CR32485_1
authorasuraven <andrey.suravenkov@opencascade.com>
Tue, 27 Jul 2021 15:45:16 +0000 (18:45 +0300)
committerasuraven <andrey.suravenkov@opencascade.com>
Tue, 27 Jul 2021 15:45:16 +0000 (18:45 +0300)
21 files changed:
src/Adaptor3d/Adaptor3d_CurveOnSurface.cxx
src/BRepAdaptor/BRepAdaptor_Curve2d.cxx
src/Geom2dAdaptor/Geom2dAdaptor_Curve.cxx
src/Geom2dEvaluator/Geom2dEvaluator_Curve.hxx
src/Geom2dEvaluator/Geom2dEvaluator_OffsetCurve.cxx
src/Geom2dEvaluator/Geom2dEvaluator_OffsetCurve.hxx
src/GeomAdaptor/GeomAdaptor_Curve.cxx
src/GeomAdaptor/GeomAdaptor_Surface.cxx
src/GeomAdaptor/GeomAdaptor_SurfaceOfLinearExtrusion.cxx
src/GeomAdaptor/GeomAdaptor_SurfaceOfRevolution.cxx
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/GeomLib/GeomLib_CheckCurveOnSurface.cxx

index afabec1d475ba0ada75edba3bf17a1254543bd62..5e36cabf3571e0964f941c8c5585486e0724e7ff 100644 (file)
@@ -732,8 +732,14 @@ Handle(Adaptor3d_Curve) Adaptor3d_CurveOnSurface::ShallowCopy() const
   aCopy->myType      = myType;
   aCopy->myCirc      = myCirc;
   aCopy->myLin       = myLin;
-  aCopy->myFirstSurf = myFirstSurf->ShallowCopy();
-  aCopy->myLastSurf  = myLastSurf->ShallowCopy();
+  if (!myFirstSurf.IsNull())
+  {
+    aCopy->myFirstSurf = myFirstSurf->ShallowCopy();
+  }
+  if (!myLastSurf.IsNull())
+  {
+    aCopy->myLastSurf = myLastSurf->ShallowCopy();
+  }
   aCopy->myIntervals = myIntervals;
   aCopy->myIntCont   = myIntCont;
 
index 941ae240c137ded52e3702727a8c81fa5dde4707..9e44457aa54a9e8a7e08c8754bc3e39e79bb5693 100644 (file)
@@ -58,7 +58,10 @@ Handle(Adaptor2d_Curve2d) BRepAdaptor_Curve2d::ShallowCopy() const
   aCopy->myLast = myLast;
   aCopy->myBSplineCurve = myBSplineCurve;
   aCopy->myCurveCache = myCurveCache;
-  aCopy->myNestedEvaluator = myNestedEvaluator;
+  if (!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
 
   return aCopy;
 }
index a0b630f34c687dd63601793b6a37875c7e02795a..b3ce81771b7ca9e54b8e58e8dfb73032d3ef0ec8 100644 (file)
@@ -79,7 +79,10 @@ Handle(Adaptor2d_Curve2d) Geom2dAdaptor_Curve::ShallowCopy() const
   aCopy->myFirst           = myFirst;
   aCopy->myLast            = myLast;
   aCopy->myBSplineCurve    = myBSplineCurve;
-  aCopy->myNestedEvaluator = myNestedEvaluator;
+  if(!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
 
   return aCopy;
 }
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..1cef81568040824a3b7527c34f859d43b4fd8cee 100644 (file)
@@ -113,6 +113,17 @@ gp_Vec2d Geom2dEvaluator_OffsetCurve::DN(const Standard_Real theU,
   return aDN;
 }
 
+Handle(Geom2dEvaluator_Curve) Geom2dEvaluator_OffsetCurve::ShallowCopy() const
+{
+  Handle(Geom2dEvaluator_OffsetCurve) aCopy = new Geom2dEvaluator_OffsetCurve();
+
+  aCopy->myBaseCurve = myBaseCurve;
+  aCopy->myBaseAdaptor = Handle(Geom2dAdaptor_Curve)::DownCast(myBaseAdaptor->ShallowCopy());
+  aCopy->myOffset = myOffset;
+
+  return aCopy;
+}
+
 
 void Geom2dEvaluator_OffsetCurve::BaseD0(const Standard_Real theU,
                                                gp_Pnt2d& theValue) const
index 356a89e9fc2da9e72aa41044a58a76813f2a8a5c..ca48b412c1f978586909a86c528fca30d82fb46a 100644 (file)
@@ -23,6 +23,8 @@
 class Geom2dEvaluator_OffsetCurve : public Geom2dEvaluator_Curve
 {
 public:
+  Standard_EXPORT Geom2dEvaluator_OffsetCurve() {}
+
   //! Initialize evaluator by curve
   Standard_EXPORT Geom2dEvaluator_OffsetCurve(
       const Handle(Geom2d_Curve)& theBase,
@@ -53,6 +55,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 33fb3cca9c0203efd777ea8b26443d6518ae27bd..7115a0f80f0ba48c37c47af070080f2b775a64f0 100644 (file)
@@ -77,7 +77,10 @@ Handle(Adaptor3d_Curve) GeomAdaptor_Curve::ShallowCopy() const
   aCopy->myFirst           = myFirst;
   aCopy->myLast            = myLast;
   aCopy->myBSplineCurve    = myBSplineCurve;
-  aCopy->myNestedEvaluator = myNestedEvaluator;
+  if (!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
 
   return aCopy;
 }
index 010caba62f38c9851da92ed41966e260ce88190f..3c912b8a61f5a7bdab89103939658d937e90db1c 100644 (file)
@@ -133,7 +133,10 @@ Handle(Adaptor3d_Surface) GeomAdaptor_Surface::ShallowCopy() const
   aCopy->myBSplineSurface  = myBSplineSurface;
 
   aCopy->mySurfaceType     = mySurfaceType;
-  aCopy->myNestedEvaluator = myNestedEvaluator;
+  if (!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
 
   return aCopy;
 }
index cb963d56608f430a453b32446699c0b4fa868ff9..73960a3d1e4c0ee276347338dc785a8924e3e4fb 100644 (file)
@@ -82,7 +82,10 @@ Handle(Adaptor3d_Surface) GeomAdaptor_SurfaceOfLinearExtrusion::ShallowCopy() co
   aCopy->mySurfaceCache = mySurfaceCache;
 
   aCopy->mySurfaceType = mySurfaceType;
-  aCopy->myNestedEvaluator = myNestedEvaluator;
+  if (!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
 
   return aCopy;
 }
index aefd264d7827009007381543d1e63b40e860f32f..a9658116cca4bdd0575e7a160f4d1edc847293b9 100644 (file)
@@ -72,18 +72,21 @@ Handle(Adaptor3d_Surface) GeomAdaptor_SurfaceOfRevolution::ShallowCopy() const
   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->mySurface        = mySurface;
+  aCopy->myUFirst         = myUFirst;
+  aCopy->myULast          = myULast;
+  aCopy->myVFirst         = myVFirst;
+  aCopy->myVLast          = myVLast;
+  aCopy->myTolU           = myTolU;
+  aCopy->myTolV           = myTolV;
   aCopy->myBSplineSurface = myBSplineSurface;
-  aCopy->mySurfaceCache = mySurfaceCache;
+  aCopy->mySurfaceCache   = mySurfaceCache;
 
-  aCopy->mySurfaceType = mySurfaceType;
-  aCopy->myNestedEvaluator = myNestedEvaluator;
+  aCopy->mySurfaceType     = mySurfaceType;
+  if (!myNestedEvaluator.IsNull())
+  {
+    aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+  }
 
   return aCopy;
 }
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..6be9c3df08c1edaf0e64b089ce238d81769a190d 100644 (file)
@@ -117,6 +117,18 @@ gp_Vec GeomEvaluator_OffsetCurve::DN(const Standard_Real theU,
   return aDN;
 }
 
+Handle(GeomEvaluator_Curve) GeomEvaluator_OffsetCurve::ShallowCopy() const
+{
+  Handle(GeomEvaluator_OffsetCurve) aCopy = new GeomEvaluator_OffsetCurve();
+
+  aCopy->myBaseCurve   = myBaseCurve;
+  aCopy->myBaseAdaptor = Handle(GeomAdaptor_Curve)::DownCast(myBaseAdaptor->ShallowCopy());
+  aCopy->myOffset      = myOffset;
+  aCopy->myOffsetDir   = myOffsetDir;
+
+  return aCopy;
+}
+
 
 void GeomEvaluator_OffsetCurve::BaseD0(const Standard_Real theU,
                                              gp_Pnt& theValue) const
index 1e894ce3b03f613f2229f54bea19590f533cb7de..0e0324cb97281f0c4ede41ced06c0fe2b4c932fd 100644 (file)
@@ -24,6 +24,8 @@
 class GeomEvaluator_OffsetCurve : public GeomEvaluator_Curve
 {
 public:
+  Standard_EXPORT GeomEvaluator_OffsetCurve() {}
+
   //! Initialize evaluator by curve
   Standard_EXPORT GeomEvaluator_OffsetCurve(
       const Handle(Geom_Curve)& theBase,
@@ -59,6 +61,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..11ebcbf190f42adef13ff1ffc779f10de29fa49c 100644 (file)
@@ -408,6 +408,17 @@ gp_Vec GeomEvaluator_OffsetSurface::DN(
   }
 }
 
+Handle(GeomEvaluator_Surface) GeomEvaluator_OffsetSurface::ShallowCopy() const
+{
+  Handle(GeomEvaluator_OffsetSurface) aCopy = new GeomEvaluator_OffsetSurface();
+
+  aCopy->myBaseSurf    = myBaseSurf;
+  aCopy->myBaseAdaptor = Handle(GeomAdaptor_Surface)::DownCast(myBaseAdaptor->ShallowCopy());
+  aCopy->myOffset      = myOffset;
+  aCopy->myOscSurf     = myOscSurf;
+
+  return aCopy;
+}
 
 void GeomEvaluator_OffsetSurface::BaseD0(const Standard_Real theU, const Standard_Real theV,
                                          gp_Pnt& theValue) const
index b6e6cb7d9d757cb388a12443eb0188a75b59bcaf..59ba840d94a2b3f191af024e53addc2f4df03fa1 100644 (file)
@@ -24,6 +24,8 @@
 class GeomEvaluator_OffsetSurface : public GeomEvaluator_Surface
 {
 public:
+  Standard_EXPORT GeomEvaluator_OffsetSurface() {}
+
   //! Initialize evaluator by surface
   Standard_EXPORT GeomEvaluator_OffsetSurface(
       const Handle(Geom_Surface)& theBase,
@@ -63,6 +65,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..127276ef94834e57dd083e575dc212dbb7a9e233 100644 (file)
@@ -119,3 +119,14 @@ gp_Vec GeomEvaluator_SurfaceOfExtrusion::DN(
   return aResult;
 }
 
+Handle(GeomEvaluator_Surface) GeomEvaluator_SurfaceOfExtrusion::ShallowCopy() const
+{
+  Handle(GeomEvaluator_SurfaceOfExtrusion) aCopy = new GeomEvaluator_SurfaceOfExtrusion();
+
+  aCopy->myBaseCurve   = myBaseCurve;
+  aCopy->myBaseAdaptor = myBaseAdaptor->ShallowCopy();
+  aCopy->myDirection   = myDirection;
+
+  return aCopy;
+}
+
index 8b2a08c81cb0d8f094acf02fc7e97c1845f03895..99cb29aa14dfb17cfd82214eeabfca3170d9918b 100644 (file)
@@ -24,6 +24,8 @@
 class GeomEvaluator_SurfaceOfExtrusion : public GeomEvaluator_Surface
 {
 public:
+  Standard_EXPORT GeomEvaluator_SurfaceOfExtrusion() {}
+
   //! Initialize evaluator by surface
   Standard_EXPORT GeomEvaluator_SurfaceOfExtrusion(const Handle(Geom_Curve)& theBase,
                                                    const gp_Dir& theExtrusionDir);
@@ -59,6 +61,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..b0815833d7c69acdb1084be69b01105a0a5f6e79 100644 (file)
@@ -203,3 +203,14 @@ gp_Vec GeomEvaluator_SurfaceOfRevolution::DN(
   return aResult;
 }
 
+Handle(GeomEvaluator_Surface) GeomEvaluator_SurfaceOfRevolution::ShallowCopy() const
+{
+  Handle(GeomEvaluator_SurfaceOfRevolution) aCopy = new GeomEvaluator_SurfaceOfRevolution();
+
+  aCopy->myBaseCurve = myBaseCurve;
+  aCopy->myBaseAdaptor = myBaseAdaptor->ShallowCopy();
+  aCopy->myRotAxis = myRotAxis;
+
+  return aCopy;
+}
+
index 97085349a4b74bd907873ef00f7f80e14e3ddb66..d4c511f9dd3a5bfa9c7deda913a2c4081889db18 100644 (file)
@@ -26,6 +26,8 @@
 class GeomEvaluator_SurfaceOfRevolution : public GeomEvaluator_Surface
 {
 public:
+  Standard_EXPORT GeomEvaluator_SurfaceOfRevolution() {}
+
   //! Initialize evaluator by revolved curve, the axis of revolution and the location
   Standard_EXPORT GeomEvaluator_SurfaceOfRevolution(const Handle(Geom_Curve)& theBase,
                                                     const gp_Dir& theRevolDir,
@@ -71,6 +73,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 23d5c07e18d8eb8a785e2e6bf89437be769aa270..6bb4e9f56bf5bd8d7f7698b094211cb724211488 100644 (file)
@@ -238,7 +238,7 @@ class GeomLib_CheckCurveOnSurface_Local
 public:
   GeomLib_CheckCurveOnSurface_Local(
               const Handle(Adaptor3d_Curve) theCurve3D,
-              const Handle(Adaptor3d_Curve)& theCurveOnSurface,
+              const Handle(Adaptor3d_Curve) theCurveOnSurface,
               const TColStd_Array1OfReal& theIntervalsArr,
               const Standard_Real theEpsilonRange,
               const Standard_Integer theNbParticles):
@@ -253,13 +253,13 @@ public:
   }
 
   GeomLib_CheckCurveOnSurface_Local(
-              const Handle(HArray1OfHCurve) theAdaptorArray,
-              const Handle(Adaptor3d_Curve)& theCurveOnSurface,
+              const Handle(HArray1OfHCurve) theCurveArray,
+              const Handle(HArray1OfHCurve) theCurveOnSurfaceArray,
               const TColStd_Array1OfReal& theIntervalsArr,
               const Standard_Real theEpsilonRange,
               const Standard_Integer theNbParticles) :
-  myAdaptorArray(theAdaptorArray),
-  myCurveOnSurface(theCurveOnSurface),
+  myCurveArray(theCurveArray),
+  myCurveOnSurfaceArray(theCurveOnSurfaceArray),
   mySubIntervals(theIntervalsArr),
   myEpsilonRange(theEpsilonRange),
   myNbParticles(theNbParticles),
@@ -293,8 +293,8 @@ public:
 
   void operator()(int theThreadIndex, int theElemIndex) const
   {
-    GeomLib_CheckCurveOnSurface_TargetFunc aFunc(myAdaptorArray->Value(theThreadIndex),
-                                                 myCurveOnSurface,
+    GeomLib_CheckCurveOnSurface_TargetFunc aFunc(myCurveArray->Value(theThreadIndex),
+                                                 myCurveOnSurfaceArray->Value(theThreadIndex),
                                                  mySubIntervals.Value(theElemIndex),
                                                  mySubIntervals.Value(theElemIndex + 1));
 
@@ -331,8 +331,9 @@ public:
 private:
   GeomLib_CheckCurveOnSurface_Local operator=(GeomLib_CheckCurveOnSurface_Local&);
   const Handle(Adaptor3d_Curve) myCurve3D;
-  Handle(HArray1OfHCurve) myAdaptorArray;
-  const Handle(Adaptor3d_Curve)& myCurveOnSurface;
+  const Handle(Adaptor3d_Curve) myCurveOnSurface;
+  Handle(HArray1OfHCurve) myCurveArray;
+  Handle(HArray1OfHCurve) myCurveOnSurfaceArray;
 
   const TColStd_Array1OfReal& mySubIntervals;
   const Standard_Real myEpsilonRange;
@@ -442,12 +443,15 @@ void GeomLib_CheckCurveOnSurface::Perform(const Handle(Adaptor3d_CurveOnSurface)
     {
       const Handle(OSD_ThreadPool)& aThreadPool = OSD_ThreadPool::DefaultPool();
       const int aNbThreads = isMultiThread ? Min(anIntervals.Size(), aThreadPool->NbDefaultThreadsToLaunch()) : 1;
-      Handle(HArray1OfHCurve) anAdaptorArray = new HArray1OfHCurve(0, aNbThreads - 1);
+      Handle(HArray1OfHCurve) aCurveArray = new HArray1OfHCurve(0, aNbThreads - 1);
+      Handle(HArray1OfHCurve) aCurveOnSurfaceArray = new HArray1OfHCurve(0, aNbThreads - 1);
       for (Standard_Integer anI = 0; anI < aNbThreads; ++anI)
       {
-        anAdaptorArray->SetValue(anI, myCurve->ShallowCopy());
+//        Handle(Adaptor3d_Curve) aShallowCurve = myCurve->ShallowCopy();
+        aCurveArray->SetValue(anI, myCurve->ShallowCopy());
+        aCurveOnSurfaceArray->SetValue(anI, theCurveOnSurface->ShallowCopy());
       }
-      GeomLib_CheckCurveOnSurface_Local aComp(anAdaptorArray, theCurveOnSurface, anIntervals,
+      GeomLib_CheckCurveOnSurface_Local aComp(aCurveArray, aCurveOnSurfaceArray, anIntervals,
                                               anEpsilonRange, aNbParticles);
       OSD_ThreadPool::Launcher aLauncher(*aThreadPool, aNbThreads);
       aLauncher.Perform(anIntervals.Lower(), anIntervals.Upper(), aComp);