Path: blob/devel/ElmerGUI/netgen/libsrc/meshing/localh.hpp
3206 views
#ifndef LOCALH1#define LOCALH23/**************************************************************************/4/* File: localh.hh */5/* Author: Joachim Schoeberl */6/* Date: 29. Jan. 97 */7/**************************************************************************/89101112/// box for grading13class GradingBox14{15/*16/// xmin17float x1[3];18/// xmax19float x2[3];20*/21/// xmid22float xmid[3];23/// half edgelength24float h2;25///26GradingBox * childs[8];27///28GradingBox * father;29///30double hopt;31///32struct33{34unsigned int cutboundary:1;35unsigned int isinner:1;36unsigned int oldcell:1;37unsigned int pinner:1;38} flags;39public:40///41GradingBox (const double * ax1, const double * ax2);42///43void DeleteChilds();44///45friend class LocalH;464748static BlockAllocator ball;49void * operator new(size_t);50void operator delete (void *);51};52535455/**56Control of 3D mesh grading57*/58class LocalH59{60///61GradingBox * root;62///63double grading;64///65ARRAY<GradingBox*> boxes;66///67Box3d boundingbox;68public:69///70LocalH (const Point3d & pmin, const Point3d & pmax, double grading);71///72~LocalH();73///74void Delete();75///76void SetGrading (double agrading) { grading = agrading; }77///78void SetH (const Point3d & x, double h);79///80double GetH (const Point3d & x) const;81/// minimal h in box (pmin, pmax)82double GetMinH (const Point3d & pmin, const Point3d & pmax) const;8384/// mark boxes intersecting with boundary-box85void CutBoundary (const Point3d & pmin, const Point3d & pmax)86{ CutBoundaryRec (pmin, pmax, root); }8788/// find inner boxes89void FindInnerBoxes ( // int (*sameside)(const Point3d & p1, const Point3d & p2),90class AdFront3 * adfront,91int (*testinner)(const Point3d & p1));9293/// clears all flags94void ClearFlags ()95{ ClearFlagsRec(root); }9697/// widen refinement zone98void WidenRefinement ();99100/// get points in inner elements101void GetInnerPoints (ARRAY<Point3d> & points);102103/// get points in outer closure104void GetOuterPoints (ARRAY<Point3d> & points);105106///107void Convexify ();108///109int GetNBoxes () { return boxes.Size(); }110const Box3d & GetBoundingBox () const111{ return boundingbox; }112///113void PrintMemInfo (ostream & ost) const;114private:115///116double GetMinHRec (const Point3d & pmin, const Point3d & pmax,117const GradingBox * box) const;118///119void CutBoundaryRec (const Point3d & pmin, const Point3d & pmax,120GradingBox * box);121122///123void FindInnerBoxesRec ( int (*inner)(const Point3d & p),124GradingBox * box);125126///127void FindInnerBoxesRec2 (GradingBox * box,128class AdFront3 * adfront,129ARRAY<Box3d> & faceboxes,130ARRAY<int> & finds, int nfinbox);131132133///134void SetInnerBoxesRec (GradingBox * box);135136///137void ClearFlagsRec (GradingBox * box);138139///140void ConvexifyRec (GradingBox * box);141};142143144#endif145146147