Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/csg/brick.hpp
3206 views
1
#ifndef FILE_BRICK
2
#define FILE_BRICK
3
4
5
/**************************************************************************/
6
/* File: brick.hpp */
7
/* Author: Joachim Schoeberl */
8
/* Date: 11. Mar. 98 */
9
/**************************************************************************/
10
11
/*
12
13
brick geometry, has several surfaces
14
15
*/
16
17
18
19
class Parallelogram3d : public Surface
20
{
21
Point<3> p1, p2, p3, p4;
22
Vec<3> v12, v13;
23
Vec<3> n;
24
25
public:
26
Parallelogram3d (Point<3> ap1, Point<3> ap2, Point<3> ap3);
27
virtual ~Parallelogram3d ();
28
29
void SetPoints (Point<3> ap1, Point<3> ap2, Point<3> ap3);
30
31
virtual int IsIdentic (const Surface & s2, int & inv, double eps) const;
32
33
virtual double CalcFunctionValue (const Point<3> & point) const;
34
virtual void CalcGradient (const Point<3> & point, Vec<3> & grad) const;
35
virtual void CalcHesse (const Point<3> & point, Mat<3> & hesse) const;
36
virtual double HesseNorm () const;
37
38
virtual Point<3> GetSurfacePoint () const;
39
virtual void Print (ostream & str) const;
40
41
virtual void GetTriangleApproximation (TriangleApproximation & tas,
42
const Box<3> & boundingbox,
43
double facets) const;
44
45
protected:
46
void CalcData();
47
};
48
49
50
class Brick : public Primitive
51
{
52
Point<3> p1, p2, p3, p4;
53
Vec<3> v12, v13, v14;
54
// ARRAY<OneSurfacePrimitive*> faces;
55
ARRAY<Plane*> faces;
56
57
public:
58
Brick (Point<3> ap1, Point<3> ap2, Point<3> ap3, Point<3> ap4);
59
virtual ~Brick ();
60
static Primitive * CreateDefault ();
61
62
virtual Primitive * Copy () const;
63
virtual void Transform (Transformation<3> & trans);
64
65
66
virtual INSOLID_TYPE BoxInSolid (const BoxSphere<3> & box) const;
67
68
virtual INSOLID_TYPE PointInSolid (const Point<3> & p,
69
double eps) const;
70
virtual INSOLID_TYPE VecInSolid (const Point<3> & p,
71
const Vec<3> & v,
72
double eps) const;
73
virtual INSOLID_TYPE VecInSolid2 (const Point<3> & p,
74
const Vec<3> & v1,
75
const Vec<3> & v2,
76
double eps) const;
77
78
virtual INSOLID_TYPE VecInSolid3 (const Point<3> & p,
79
const Vec<3> & v1,
80
const Vec<3> & v2,
81
double eps) const;
82
83
virtual INSOLID_TYPE VecInSolid4 (const Point<3> & p,
84
const Vec<3> & v,
85
const Vec<3> & v2,
86
const Vec<3> & m,
87
double eps) const;
88
89
90
virtual int GetNSurfaces() const
91
{ return 6; }
92
virtual Surface & GetSurface (int i)
93
{ return *faces[i]; }
94
virtual const Surface & GetSurface (int i) const
95
{ return *faces[i]; }
96
97
98
virtual void GetPrimitiveData (const char *& classname, ARRAY<double> & coeffs) const;
99
virtual void SetPrimitiveData (ARRAY<double> & coeffs);
100
101
virtual void Reduce (const BoxSphere<3> & box);
102
virtual void UnReduce ();
103
104
protected:
105
void CalcData();
106
};
107
108
109
class OrthoBrick : public Brick
110
{
111
protected:
112
Point<3> pmin, pmax;
113
public:
114
OrthoBrick (const Point<3> & ap1, const Point<3> & ap2);
115
116
virtual INSOLID_TYPE BoxInSolid (const BoxSphere<3> & box) const;
117
virtual void Reduce (const BoxSphere<3> & box);
118
};
119
120
#endif
121
122