Path: blob/devel/ElmerGUI/netgen/libsrc/meshing/adfront2.hpp
3206 views
#ifndef FILE_ADFRONT21#define FILE_ADFRONT223/**************************************************************************/4/* File: adfront2.hpp */5/* Author: Joachim Schoeberl */6/* Date: 01. Okt. 95 */7/**************************************************************************/8910/**1112Advancing front class for surfaces1314*/15class AdFront216{1718///19class FrontPoint220{21/// coordinates22Point<3> p;23/// global node index24PointIndex globalindex;25/// number of front lines connected to point26int nlinetopoint;27/// distance to original boundary28int frontnr;2930bool onsurface;3132public:33///34MultiPointGeomInfo * mgi;3536///37FrontPoint2 ()38{39globalindex = -1;40nlinetopoint = 0;41frontnr = INT_MAX-10; // attention: overflow on calculating INT_MAX + 142mgi = NULL;43onsurface = true;44}4546///47FrontPoint2 (const Point<3> & ap, PointIndex agi,48MultiPointGeomInfo * amgi, bool aonsurface = true);49///50~FrontPoint2 () { ; }5152///53const Point<3> & P () const { return p; }54///55operator const Point<3> & () const { return p; }56///57PointIndex GlobalIndex () const { return globalindex; }5859///60void AddLine () { nlinetopoint++; }61///62void RemoveLine ()63{64nlinetopoint--;65if (nlinetopoint == 0)66nlinetopoint = -1;67}6869///70bool Valid () const71{ return nlinetopoint >= 0; }7273///74bool OnSurface() const75{ return onsurface; }7677///78void DecFrontNr (int afrontnr)79{80if (frontnr > afrontnr) frontnr = afrontnr;81}8283///84int FrontNr () const { return frontnr; }85};868788///89class FrontLine90{91private:92/// Point Indizes93INDEX_2 l;94/// quality class95int lineclass;96/// geometry specific data97PointGeomInfo geominfo[2];98public:99100FrontLine ()101{102lineclass = 1;103}104105///106FrontLine (const INDEX_2 & al)107{108l = al;109lineclass = 1;110}111112113///114const INDEX_2 & L () const115{116return l;117}118119///120int LineClass() const121{122return lineclass;123}124125///126void IncrementClass ()127{128lineclass++;129}130///131void ResetClass ()132{133lineclass = 1;134}135136///137bool Valid () const138{139return l.I1() != -1;140}141///142void Invalidate ()143{144l.I1() = -1;145l.I2() = -1;146lineclass = 1000;147}148149void SetGeomInfo (const PointGeomInfo & gi1, const PointGeomInfo & gi2)150{151geominfo[0] = gi1;152geominfo[1] = gi2;153}154155const PointGeomInfo * GetGeomInfo () const156{ return geominfo; }157158const PointGeomInfo & GetGeomInfo (int endp) const159{ return geominfo[endp-1]; }160161friend class AdFront2;162};163164165166///167ARRAY<FrontPoint2> points; /// front points168ARRAY<FrontLine> lines; /// front lines169170Box3d boundingbox;171Box3dTree linesearchtree; /// search tree for lines172Point3dTree pointsearchtree; /// search tree for points173Point3dTree cpointsearchtree; /// search tree for cone points (not used ???)174175ARRAY<int> delpointl; /// list of deleted front points176ARRAY<int> dellinel; /// list of deleted front lines177178int nfl; /// number of front lines;179INDEX_2_HASHTABLE<int> * allflines; /// all front lines ever have been180181182int minval;183int starti;184185public:186///187// AdFront2 ();188AdFront2 (const Box3d & aboundingbox);189///190~AdFront2 ();191192///193// void GetPoints (ARRAY<Point<3> > & apoints) const;194///195void Print (ostream & ost) const;196197///198bool Empty () const199{200return nfl == 0;201}202///203int GetNFL () const { return nfl; }204///205int SelectBaseLine (Point<3> & p1, Point<3> & p2,206const PointGeomInfo *& geominfo1,207const PointGeomInfo *& geominfo2,208int & qualclass);209210///211int GetLocals (int baseline,212ARRAY<Point3d> & locpoints,213ARRAY<MultiPointGeomInfo> & pgeominfo,214ARRAY<INDEX_2> & loclines, // local index215ARRAY<int> & pindex,216ARRAY<int> & lindex,217double xh);218219///220void DeleteLine (int li);221///222int AddPoint (const Point<3> & p, PointIndex globind,223MultiPointGeomInfo * mgi = NULL,224bool pointonsurface = true);225///226int AddLine (int pi1, int pi2,227const PointGeomInfo & gi1, const PointGeomInfo & gi2);228///229int ExistsLine (int gpi1, int gpi2);230231///232void IncrementClass (int li)233{234lines[li].IncrementClass();235}236237///238void ResetClass (int li)239{240lines[li].ResetClass();241}242243///244const PointGeomInfo & GetLineGeomInfo (int li, int lend) const245{ return lines[li].GetGeomInfo (lend); }246///247248PointIndex GetGlobalIndex (int pi) const249{250return points[pi].GlobalIndex();251}252///253void SetStartFront ();254///255void PrintOpenSegments (ostream & ost) const;256};257258259260#endif261262263264265266