Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/csg/extrusion.hpp
3206 views
1
#ifndef _EXTRUSION_HPP
2
#define _EXTRUSION_HPP
3
4
5
class Extrusion;
6
7
class ExtrusionFace : public Surface
8
{
9
private:
10
const SplineSeg<2> * profile;
11
const SplineGeometry<3> * path;
12
Vec<3> glob_z_direction;
13
14
bool deletable;
15
16
ARRAY< const SplineSeg3<3> * > spline3_path;
17
ARRAY< const LineSeg<3> * > line_path;
18
19
mutable ARRAY < Vec<3> > x_dir, y_dir, z_dir, loc_z_dir;
20
mutable ARRAY < Point<3> > p0;
21
22
mutable Vec<3> profile_tangent;
23
mutable double profile_par;
24
25
mutable Vector profile_spline_coeff;
26
27
mutable int latest_seg;
28
mutable double latest_t;
29
mutable Point<2> latest_point2d;
30
mutable Point<3> latest_point3d;
31
32
33
private:
34
void Orthogonalize(const Vec<3> & v1, Vec<3> & v2) const;
35
36
void Init(void);
37
38
public:
39
double CalcProj(const Point<3> & point3d, Point<2> & point2d,
40
const int seg) const;
41
void CalcProj(const Point<3> & point3d, Point<2> & point2d,
42
int & seg, double & t) const;
43
44
public:
45
ExtrusionFace(const SplineSeg<2> * profile_in,
46
const SplineGeometry<3> * path_in,
47
const Vec<3> & z_direction);
48
49
ExtrusionFace(const ARRAY<double> & raw_data);
50
51
52
~ExtrusionFace();
53
54
virtual int IsIdentic (const Surface & s2, int & inv, double eps) const;
55
56
virtual double CalcFunctionValue (const Point<3> & point) const;
57
virtual void CalcGradient (const Point<3> & point, Vec<3> & grad) const;
58
virtual void CalcHesse (const Point<3> & point, Mat<3> & hesse) const;
59
virtual double HesseNorm () const;
60
61
virtual double MaxCurvature () const;
62
//virtual double MaxCurvatureLoc (const Point<3> & /* c */ ,
63
// double /* rad */) const;
64
65
virtual void Project (Point<3> & p) const;
66
67
virtual Point<3> GetSurfacePoint () const;
68
virtual void Print (ostream & str) const;
69
70
virtual void GetTriangleApproximation (TriangleApproximation & tas,
71
const Box<3> & boundingbox,
72
double facets) const;
73
74
const SplineGeometry<3> & GetPath(void) const {return *path;}
75
const SplineSeg<2> & GetProfile(void) const {return *profile;}
76
77
bool BoxIntersectsFace(const Box<3> & box) const;
78
79
void LineIntersections ( const Point<3> & p,
80
const Vec<3> & v,
81
const double eps,
82
int & before,
83
int & after,
84
bool & intersecting ) const;
85
86
INSOLID_TYPE VecInFace ( const Point<3> & p,
87
const Vec<3> & v,
88
const double eps ) const;
89
90
const Vec<3> & GetYDir ( void ) const {return y_dir[latest_seg];}
91
const Vec<3> & GetProfileTangent (void) const {return profile_tangent;}
92
double GetProfilePar(void) const {return profile_par;}
93
94
void GetRawData(ARRAY<double> & data) const;
95
};
96
97
98
99
class Extrusion : public Primitive
100
{
101
private:
102
const SplineGeometry<3> & path;
103
const SplineGeometry<2> & profile;
104
105
const Vec<3> & z_direction;
106
107
ARRAY<ExtrusionFace*> faces;
108
109
mutable int latestfacenum;
110
111
public:
112
Extrusion(const SplineGeometry<3> & path_in,
113
const SplineGeometry<2> & profile_in,
114
const Vec<3> & z_dir);
115
~Extrusion();
116
virtual INSOLID_TYPE BoxInSolid (const BoxSphere<3> & box) const;
117
virtual INSOLID_TYPE PointInSolid (const Point<3> & p,
118
double eps) const;
119
INSOLID_TYPE PointInSolid (const Point<3> & p,
120
double eps,
121
ARRAY<int> * const facenums) const;
122
virtual INSOLID_TYPE VecInSolid (const Point<3> & p,
123
const Vec<3> & v,
124
double eps) const;
125
126
// checks if lim s->0 lim t->0 p + t(v1 + s v2) in solid
127
virtual INSOLID_TYPE VecInSolid2 (const Point<3> & p,
128
const Vec<3> & v1,
129
const Vec<3> & v2,
130
double eps) const;
131
132
133
virtual int GetNSurfaces() const;
134
virtual Surface & GetSurface (int i = 0);
135
virtual const Surface & GetSurface (int i = 0) const;
136
137
138
virtual void Reduce (const BoxSphere<3> & box);
139
virtual void UnReduce ();
140
141
};
142
143
144
#endif //_EXTRUSION_HPP
145
146