Path: blob/devel/ElmerGUI/netgen/libsrc/csg/polyhedra.hpp
3206 views
#ifndef FILE_POLYHEDRA1#define FILE_POLYHEDRA234/**************************************************************************/5/* File: polyhedra.hh */6/* Author: Joachim Schoeberl */7/* Date: 19. Mar. 2000 */8/**************************************************************************/910/*1112Polyhedral primitive1314*/1516class Polyhedra : public Primitive17{18class Face {19public:20int pnums[3];21int planenr;2223int inputnr;2425Box<3> bbox;26// Point<3> center;27Vec<3> v1, v2; // edges28Vec<3> w1, w2; // pseudo-inverse29Vec<3> n; // normal to face30Vec<3> nn; // normed normal3132Face () { ; }33Face (int pi1, int pi2, int pi3,34const ARRAY<Point<3> > & points,35int ainputnr);36};3738ARRAY<Point<3> > points;39ARRAY<Face> faces;40ARRAY<Plane*> planes;41Box<3> poly_bbox;4243double eps_base1;4445public:46Polyhedra ();47virtual ~Polyhedra ();48static Primitive * CreateDefault ();4950virtual INSOLID_TYPE BoxInSolid (const BoxSphere<3> & box) const;51virtual INSOLID_TYPE PointInSolid (const Point<3> & p,52double eps) const;53virtual INSOLID_TYPE VecInSolid (const Point<3> & p,54const Vec<3> & v,55double eps) const;5657// checks if lim s->0 lim t->0 p + t(v1 + s v2) in solid58virtual INSOLID_TYPE VecInSolid2 (const Point<3> & p,59const Vec<3> & v1,60const Vec<3> & v2,61double eps) const;6263virtual void GetTangentialSurfaceIndices (const Point<3> & p,64ARRAY<int> & surfind, double eps) const;656667virtual void GetTangentialVecSurfaceIndices2 (const Point<3> & p, const Vec<3> & v1, const Vec<3> & v2,68ARRAY<int> & surfind, double eps) const;6970virtual void CalcSpecialPoints (ARRAY<Point<3> > & pts) const;71virtual void AnalyzeSpecialPoint (const Point<3> & pt,72ARRAY<Point<3> > & specpts) const;73virtual Vec<3> SpecialPointTangentialVector (const Point<3> & p, int s1, int s2) const;7475virtual int GetNSurfaces() const76{ return planes.Size(); }77virtual Surface & GetSurface (int i)78{ return *planes[i]; }79virtual const Surface & GetSurface (int i) const80{ return *planes[i]; }8182virtual void GetPrimitiveData (const char *& classname, ARRAY<double> & coeffs) const;83virtual void SetPrimitiveData (ARRAY<double> & coeffs);8485virtual void Reduce (const BoxSphere<3> & box);86virtual void UnReduce ();8788int AddPoint (const Point<3> & p);89int AddFace (int pi1, int pi2, int pi3, int inputnum);9091void GetPolySurfs(ARRAY < ARRAY<int> * > & polysurfs);9293protected:94int FaceBoxIntersection (int fnr, const BoxSphere<3> & box) const;95// void CalcData();96};9798#endif99100101