Path: blob/devel/ElmerGUI/netgen/libsrc/csg/extrusion.hpp
3206 views
#ifndef _EXTRUSION_HPP1#define _EXTRUSION_HPP234class Extrusion;56class ExtrusionFace : public Surface7{8private:9const SplineSeg<2> * profile;10const SplineGeometry<3> * path;11Vec<3> glob_z_direction;1213bool deletable;1415ARRAY< const SplineSeg3<3> * > spline3_path;16ARRAY< const LineSeg<3> * > line_path;1718mutable ARRAY < Vec<3> > x_dir, y_dir, z_dir, loc_z_dir;19mutable ARRAY < Point<3> > p0;2021mutable Vec<3> profile_tangent;22mutable double profile_par;2324mutable Vector profile_spline_coeff;2526mutable int latest_seg;27mutable double latest_t;28mutable Point<2> latest_point2d;29mutable Point<3> latest_point3d;303132private:33void Orthogonalize(const Vec<3> & v1, Vec<3> & v2) const;3435void Init(void);3637public:38double CalcProj(const Point<3> & point3d, Point<2> & point2d,39const int seg) const;40void CalcProj(const Point<3> & point3d, Point<2> & point2d,41int & seg, double & t) const;4243public:44ExtrusionFace(const SplineSeg<2> * profile_in,45const SplineGeometry<3> * path_in,46const Vec<3> & z_direction);4748ExtrusionFace(const ARRAY<double> & raw_data);495051~ExtrusionFace();5253virtual int IsIdentic (const Surface & s2, int & inv, double eps) const;5455virtual double CalcFunctionValue (const Point<3> & point) const;56virtual void CalcGradient (const Point<3> & point, Vec<3> & grad) const;57virtual void CalcHesse (const Point<3> & point, Mat<3> & hesse) const;58virtual double HesseNorm () const;5960virtual double MaxCurvature () const;61//virtual double MaxCurvatureLoc (const Point<3> & /* c */ ,62// double /* rad */) const;6364virtual void Project (Point<3> & p) const;6566virtual Point<3> GetSurfacePoint () const;67virtual void Print (ostream & str) const;6869virtual void GetTriangleApproximation (TriangleApproximation & tas,70const Box<3> & boundingbox,71double facets) const;7273const SplineGeometry<3> & GetPath(void) const {return *path;}74const SplineSeg<2> & GetProfile(void) const {return *profile;}7576bool BoxIntersectsFace(const Box<3> & box) const;7778void LineIntersections ( const Point<3> & p,79const Vec<3> & v,80const double eps,81int & before,82int & after,83bool & intersecting ) const;8485INSOLID_TYPE VecInFace ( const Point<3> & p,86const Vec<3> & v,87const double eps ) const;8889const Vec<3> & GetYDir ( void ) const {return y_dir[latest_seg];}90const Vec<3> & GetProfileTangent (void) const {return profile_tangent;}91double GetProfilePar(void) const {return profile_par;}9293void GetRawData(ARRAY<double> & data) const;94};95969798class Extrusion : public Primitive99{100private:101const SplineGeometry<3> & path;102const SplineGeometry<2> & profile;103104const Vec<3> & z_direction;105106ARRAY<ExtrusionFace*> faces;107108mutable int latestfacenum;109110public:111Extrusion(const SplineGeometry<3> & path_in,112const SplineGeometry<2> & profile_in,113const Vec<3> & z_dir);114~Extrusion();115virtual INSOLID_TYPE BoxInSolid (const BoxSphere<3> & box) const;116virtual INSOLID_TYPE PointInSolid (const Point<3> & p,117double eps) const;118INSOLID_TYPE PointInSolid (const Point<3> & p,119double eps,120ARRAY<int> * const facenums) const;121virtual INSOLID_TYPE VecInSolid (const Point<3> & p,122const Vec<3> & v,123double eps) const;124125// checks if lim s->0 lim t->0 p + t(v1 + s v2) in solid126virtual INSOLID_TYPE VecInSolid2 (const Point<3> & p,127const Vec<3> & v1,128const Vec<3> & v2,129double eps) const;130131132virtual int GetNSurfaces() const;133virtual Surface & GetSurface (int i = 0);134virtual const Surface & GetSurface (int i = 0) const;135136137virtual void Reduce (const BoxSphere<3> & box);138virtual void UnReduce ();139140};141142143#endif //_EXTRUSION_HPP144145146