summaryrefslogtreecommitdiff
path: root/src/GeomToStep/GeomToStep_MakeBoundedCurve.cxx
blob: bdd991ae5fc1a6a82a44be5e186e02a787db55ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// File:	GeomToStep_MakeBoundedCurve.cxx
// Created:	Mon Jun 21 11:35:12 1993
// Author:	Martine LANGLOIS
//		<mla@mastox>

#include <GeomToStep_MakeBoundedCurve.ixx>
#include <StdFail_NotDone.hxx>
#include <StepGeom_BoundedCurve.hxx>
#include <GeomToStep_MakeBoundedCurve.hxx>
#include <Geom_BSplineCurve.hxx>
#include <Geom_BezierCurve.hxx>
#include <Geom2d_BSplineCurve.hxx>
#include <Geom2d_BezierCurve.hxx>
#include <GeomConvert.hxx>
#include <Geom2dConvert.hxx>
#include <GeomToStep_MakeBSplineCurveWithKnots.hxx>
#include <GeomToStep_MakeBSplineCurveWithKnotsAndRationalBSplineCurve.hxx>


//=============================================================================
// Creation d' une BoundedCurve de prostep a partir d' une BoundedCurve de Geom
//=============================================================================

GeomToStep_MakeBoundedCurve::GeomToStep_MakeBoundedCurve ( const Handle(Geom_BoundedCurve)& C)
{
  done = Standard_True;

  if (C->IsKind(STANDARD_TYPE(Geom_BSplineCurve))) {
    Handle(Geom_BSplineCurve) Bspli = Handle(Geom_BSplineCurve)::DownCast(C);
    // UPDATE FMA 1-04-96
    if (C->IsPeriodic()) {
      Handle(Geom_BSplineCurve) newBspli = 
	Handle(Geom_BSplineCurve)::DownCast(Bspli->Copy());
      newBspli->SetNotPeriodic();
      Bspli = newBspli;
    }
    if ( Bspli->IsRational() ) {
      GeomToStep_MakeBSplineCurveWithKnotsAndRationalBSplineCurve MkRatBSplineC(Bspli);
      theBoundedCurve = MkRatBSplineC.Value();
    }
    else {
      GeomToStep_MakeBSplineCurveWithKnots MkBSplineC(Bspli);
      theBoundedCurve = MkBSplineC.Value();
    }
  }
  else if (C->IsKind(STANDARD_TYPE(Geom_BezierCurve))) {
    Handle(Geom_BezierCurve) Cur = Handle(Geom_BezierCurve)::DownCast(C);
    Handle(Geom_BSplineCurve) Bspli = GeomConvert::CurveToBSplineCurve(Cur);
    if ( Bspli->IsRational() ) {
      GeomToStep_MakeBSplineCurveWithKnotsAndRationalBSplineCurve MkRatBSplineC(Bspli);
      theBoundedCurve = MkRatBSplineC.Value();
    }
    else {
      GeomToStep_MakeBSplineCurveWithKnots MkBSplineC(Bspli);
      theBoundedCurve = MkBSplineC.Value();
    }
  }
  else {
#ifdef DEB
    cout<<"MakeBoundedCurve, type : "<<C->DynamicType()->Name()<<" not processed"<<endl;
#endif
    done = Standard_False;
  }
}
	 
//=============================================================================
// Creation d' une BoundedCurve de prostep a partir d' une BoundedCurve de
// Geom2d
//=============================================================================

GeomToStep_MakeBoundedCurve::GeomToStep_MakeBoundedCurve ( const Handle(Geom2d_BoundedCurve)& C)
{
  done = Standard_True;
  if (C->IsKind(STANDARD_TYPE(Geom2d_BSplineCurve)))
    {
      Handle(Geom2d_BSplineCurve) Bspli = 
	Handle(Geom2d_BSplineCurve)::DownCast(C);
      // UPDATE FMA 1-04-96
      if (C->IsPeriodic()) {
	Handle(Geom2d_BSplineCurve) newBspli = 
	  Handle(Geom2d_BSplineCurve)::DownCast(Bspli->Copy());
	newBspli->SetNotPeriodic();
	Bspli = newBspli;
      }
      if ( Bspli->IsRational() ) {
	GeomToStep_MakeBSplineCurveWithKnotsAndRationalBSplineCurve MkRatBSplineC(Bspli);
	theBoundedCurve = MkRatBSplineC.Value();
      }
      else {
	GeomToStep_MakeBSplineCurveWithKnots MkBSplineC(Bspli);
	theBoundedCurve = MkBSplineC.Value();
      }
    }
  else if (C->IsKind(STANDARD_TYPE(Geom2d_BezierCurve))) {
    Handle(Geom2d_BezierCurve) Cur = Handle(Geom2d_BezierCurve)::DownCast(C);
    Handle(Geom2d_BSplineCurve) Bspli = 
      Geom2dConvert::CurveToBSplineCurve(Cur);
    GeomToStep_MakeBSplineCurveWithKnots MkBSplineC(Bspli);
    theBoundedCurve = MkBSplineC.Value();
    }
  else
    done = Standard_False;
  
}

//=============================================================================
// renvoi des valeurs
//=============================================================================

const Handle(StepGeom_BoundedCurve) &
      GeomToStep_MakeBoundedCurve::Value() const
{
  StdFail_NotDone_Raise_if(!done == Standard_True,"");
  return theBoundedCurve;
}