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;
aCopy->myLast = myLast;
aCopy->myBSplineCurve = myBSplineCurve;
aCopy->myCurveCache = myCurveCache;
- aCopy->myNestedEvaluator = myNestedEvaluator;
+ if (!myNestedEvaluator.IsNull())
+ {
+ aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+ }
return aCopy;
}
aCopy->myFirst = myFirst;
aCopy->myLast = myLast;
aCopy->myBSplineCurve = myBSplineCurve;
- aCopy->myNestedEvaluator = myNestedEvaluator;
+ if(!myNestedEvaluator.IsNull())
+ {
+ aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+ }
return aCopy;
}
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)
};
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
class Geom2dEvaluator_OffsetCurve : public Geom2dEvaluator_Curve
{
public:
+ Standard_EXPORT Geom2dEvaluator_OffsetCurve() {}
+
//! Initialize evaluator by curve
Standard_EXPORT Geom2dEvaluator_OffsetCurve(
const Handle(Geom2d_Curve)& theBase,
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:
aCopy->myFirst = myFirst;
aCopy->myLast = myLast;
aCopy->myBSplineCurve = myBSplineCurve;
- aCopy->myNestedEvaluator = myNestedEvaluator;
+ if (!myNestedEvaluator.IsNull())
+ {
+ aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+ }
return aCopy;
}
aCopy->myBSplineSurface = myBSplineSurface;
aCopy->mySurfaceType = mySurfaceType;
- aCopy->myNestedEvaluator = myNestedEvaluator;
+ if (!myNestedEvaluator.IsNull())
+ {
+ aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+ }
return aCopy;
}
aCopy->mySurfaceCache = mySurfaceCache;
aCopy->mySurfaceType = mySurfaceType;
- aCopy->myNestedEvaluator = myNestedEvaluator;
+ if (!myNestedEvaluator.IsNull())
+ {
+ aCopy->myNestedEvaluator = myNestedEvaluator->ShallowCopy();
+ }
return aCopy;
}
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;
}
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)
};
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
class GeomEvaluator_OffsetCurve : public GeomEvaluator_Curve
{
public:
+ Standard_EXPORT GeomEvaluator_OffsetCurve() {}
+
//! Initialize evaluator by curve
Standard_EXPORT GeomEvaluator_OffsetCurve(
const Handle(Geom_Curve)& theBase,
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:
}
}
+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
class GeomEvaluator_OffsetSurface : public GeomEvaluator_Surface
{
public:
+ Standard_EXPORT GeomEvaluator_OffsetSurface() {}
+
//! Initialize evaluator by surface
Standard_EXPORT GeomEvaluator_OffsetSurface(
const Handle(Geom_Surface)& theBase,
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:
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)
};
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;
+}
+
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);
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:
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;
+}
+
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,
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:
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):
}
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),
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));
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;
{
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);