Path: blob/devel/ElmerGUI/netgen/libsrc/csg/brick.hpp
3206 views
#ifndef FILE_BRICK1#define FILE_BRICK234/**************************************************************************/5/* File: brick.hpp */6/* Author: Joachim Schoeberl */7/* Date: 11. Mar. 98 */8/**************************************************************************/910/*1112brick geometry, has several surfaces1314*/15161718class Parallelogram3d : public Surface19{20Point<3> p1, p2, p3, p4;21Vec<3> v12, v13;22Vec<3> n;2324public:25Parallelogram3d (Point<3> ap1, Point<3> ap2, Point<3> ap3);26virtual ~Parallelogram3d ();2728void SetPoints (Point<3> ap1, Point<3> ap2, Point<3> ap3);2930virtual int IsIdentic (const Surface & s2, int & inv, double eps) const;3132virtual double CalcFunctionValue (const Point<3> & point) const;33virtual void CalcGradient (const Point<3> & point, Vec<3> & grad) const;34virtual void CalcHesse (const Point<3> & point, Mat<3> & hesse) const;35virtual double HesseNorm () const;3637virtual Point<3> GetSurfacePoint () const;38virtual void Print (ostream & str) const;3940virtual void GetTriangleApproximation (TriangleApproximation & tas,41const Box<3> & boundingbox,42double facets) const;4344protected:45void CalcData();46};474849class Brick : public Primitive50{51Point<3> p1, p2, p3, p4;52Vec<3> v12, v13, v14;53// ARRAY<OneSurfacePrimitive*> faces;54ARRAY<Plane*> faces;5556public:57Brick (Point<3> ap1, Point<3> ap2, Point<3> ap3, Point<3> ap4);58virtual ~Brick ();59static Primitive * CreateDefault ();6061virtual Primitive * Copy () const;62virtual void Transform (Transformation<3> & trans);636465virtual INSOLID_TYPE BoxInSolid (const BoxSphere<3> & box) const;6667virtual INSOLID_TYPE PointInSolid (const Point<3> & p,68double eps) const;69virtual INSOLID_TYPE VecInSolid (const Point<3> & p,70const Vec<3> & v,71double eps) const;72virtual INSOLID_TYPE VecInSolid2 (const Point<3> & p,73const Vec<3> & v1,74const Vec<3> & v2,75double eps) const;7677virtual INSOLID_TYPE VecInSolid3 (const Point<3> & p,78const Vec<3> & v1,79const Vec<3> & v2,80double eps) const;8182virtual INSOLID_TYPE VecInSolid4 (const Point<3> & p,83const Vec<3> & v,84const Vec<3> & v2,85const Vec<3> & m,86double eps) const;878889virtual int GetNSurfaces() const90{ return 6; }91virtual Surface & GetSurface (int i)92{ return *faces[i]; }93virtual const Surface & GetSurface (int i) const94{ return *faces[i]; }959697virtual void GetPrimitiveData (const char *& classname, ARRAY<double> & coeffs) const;98virtual void SetPrimitiveData (ARRAY<double> & coeffs);99100virtual void Reduce (const BoxSphere<3> & box);101virtual void UnReduce ();102103protected:104void CalcData();105};106107108class OrthoBrick : public Brick109{110protected:111Point<3> pmin, pmax;112public:113OrthoBrick (const Point<3> & ap1, const Point<3> & ap2);114115virtual INSOLID_TYPE BoxInSolid (const BoxSphere<3> & box) const;116virtual void Reduce (const BoxSphere<3> & box);117};118119#endif120121122