Path: blob/devel/ElmerGUI/netgen/libsrc/csg/spline3d.hpp
3206 views
///1class splinesegment3d2{3///4Point<3> p1, p2, p3;56public:7///8splinesegment3d (const Point<3> & ap1, const Point<3> & ap2,9const Point<3> & ap3);10///11void Evaluate (double t, Point<3> & p) const;12///13void EvaluateTangent (double t, Vec<3> & tang) const;14///15const Point<3> & P1() const { return p1; }16///17const Point<3> & P2() const { return p2; }18///19const Point<3> & P3() const { return p3; }20};2122///23class spline3d24{25///26ARRAY<splinesegment3d *> segments;2728public:29///30spline3d () { };31///32void AddSegment (const Point<3> & ap1, const Point<3> & ap2, const Point<3> & ap3);33///34int GetNumSegments () const { return segments.Size(); }35///36double ProjectToSpline (Point<3> & p) const;37///38double ProjectToSpline (Point<3> & p, double t) const;39///40void Evaluate (double t, Point<3> & p) const;41///42void EvaluateTangent (double t, Vec<3> & tang) const;43///44const Point<3> & P1(int i) const { return segments.Get(i)->P1(); }45///46const Point<3> & P2(int i) const { return segments.Get(i)->P2(); }47///48const Point<3> & P3(int i) const { return segments.Get(i)->P3(); }49};5051///52class splinetube : public Surface53{54///55const spline3d & middlecurve;56///57double r;58/// Vec<3> ex, ey, ez;59Vec<2> e2x, e2y;60///61Point<3> cp;6263public:64///65splinetube (const spline3d & amiddlecurve, double ar);6667///68virtual void DefineTangentialPlane (const Point<3> & ap1, const Point<3> & ap2);69///70virtual void ToPlane (const Point<3> & p, Point<2> & pplain, double h, int & zone) const;71///72virtual void FromPlane (const Point<2> & pplain, Point<3> & p, double h) const;73///74virtual void Project (Point<3> & p) const;7576// virtual int RootInBox (const box3d & box) const { return 0; }77/// 0 .. no, 1 .. yes, 2 .. maybe7879virtual int BoxInSolid (const BoxSphere<3> & box) const;80/// 0 .. no, 1 .. yes, 2 .. maybe8182virtual double CalcFunctionValue (const Point<3> & point) const;83///84virtual void CalcGradient (const Point<3> & point, Vec<3> & grad) const;85///86virtual double HesseNorm () const { return 0.5 / r; }87///88virtual Point<3> GetSurfacePoint () const;89///90virtual void Print (ostream & str) const;91};929394