0032485: Modeling Algorithms - Add Clone() function for adapters
[occt.git] / src / BRepAdaptor / BRepAdaptor_CompCurve.cxx
index 64acb5e..2cf7998 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)
 {