00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef _SPLINECURVEINT_H
00034 #define _SPLINECURVEINT_H
00035
00036
00037 #include "ParamCurveInt.h"
00038
00039
00040 namespace Go {
00043
00044
00045
00046 class SplineCurve;
00047
00048
00050
00051 class SplineCurveInt : public ParamCurveInt {
00052 public:
00056 explicit SplineCurveInt(boost::shared_ptr<ParamCurve> curve);
00057
00063 explicit SplineCurveInt(boost::shared_ptr<ParamCurve> curve,
00064 ParamGeomInt *parent);
00065
00067 virtual ~SplineCurveInt(){};
00068
00073 virtual boost::shared_ptr<ParamCurveInt>
00074 makeIntObject(boost::shared_ptr<ParamCurve> curve);
00075
00080 virtual bool hasInnerKnots(int pardir) const;
00081
00086 virtual bool hasCriticalValsOrKnots(int pardir) const;
00087
00092 virtual std::vector<double> getInnerKnotVals(int pardir,
00093 bool sort=false) const;
00094
00099 virtual std::vector<double> getCriticalValsAndKnots(int pardir) const;
00100
00105 virtual int getMeshSize(int dir);
00106
00112 virtual double paramFromMesh(int dir, int idx);
00113
00115 virtual std::vector<double>::iterator getMesh();
00116
00128 virtual int checkPeriodicity(int pardir = 0) const;
00129
00135 virtual int knotIntervalFuzzy(double& t, double tol) const;
00136
00144 virtual double nextSegmentVal(double par, bool forward, double tol) const;
00145
00148 virtual bool isSpline();
00149
00150 virtual const SplineCurve* getSpline()
00151 { return spcv_.get(); }
00152
00160 virtual double getOptimizedConeAngle(Point& axis1, Point& axis2);
00161
00162
00163
00170 virtual RotatedBox getRotatedBox(std::vector<Point>& axis) const;
00171
00172 protected:
00173
00174 boost::shared_ptr<SplineCurve> spcv_;
00175
00176 };
00177
00178
00180 }
00181
00182
00183 #endif // _SPLINECURVEINT_H
00184