⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cogenoctree.hxx

📁 Delaunay三角形的网格剖分程序
💻 HXX
字号:
#ifndef cogenoctree_hxx#define cogenoctree_hxx#ifndef cogenerator_hxx#include "cogenerator.hxx"#endifclass CogenOctreeBox{protected:friend class CogenOctree;  wzRegion	region;  wzFloat	min[wzPointDim];  wzFloat	max[wzPointDim];  wzFloat	mino[wzPointDim];  wzFloat	maxo[wzPointDim];  wzIndex	type;  wzIndex	part;  wzFloat	a[wzPointDim];  wzFloat	d;  wzFloat	dorig;};class CogenOctreeFace{protected:friend class CogenOctree;  wzFace	face;  wzFloat	min[wzPointDim];  wzFloat	max[wzPointDim];  wzIndex	type;  wzIndex	part;  wzFloat	a[wzPointDim];  wzFloat	d;};class CogenOctreeRefineItem{protected:friend class CogenOctree;  wzFloat	dist[wzPointDim];  wzIndex	box;};class ibgOctree;typedef wzProxy<ibgOctree> ibgoctree;class CogenOctree  :public Cogenerator,   protected Cogeometry,    public wzChart,   public wzDiagonalMetricSimple,   protected wzTensorGrid{public:  static wzFloat epsilon;  wzSimpleRange	blist;  wzSimpleRange	flist;  wzSimpleRange	rlist;  wzArray<CogenOctreeBox>	box;  wzArray<CogenOctreeFace>	face;  wzArray<CogenOctreeRefineItem> refine;  CogenOctree();  virtual cogenOctree	cogenoctree() const;  cogenerator	generator() const {return (CogenOctree*)this;}  virtual cogeometry	geometry() const {return (CogenOctree*)this;}  virtual wzmetric	refinement() const   {return (wzDiagonalMetricSimple*)(CogenOctree*)this;}  virtual wzchart	chart() const   {return (CogenOctree*)this;}  wzIndex addBox(wzRegion r, wzFloat *xmin, wzFloat *xmax);  wzIndex addBox(wzRegion r,		 wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,		 wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,		 wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty);  wzIndex addWedge(wzRegion r, wzWedge dir, wzFloat *xmin, wzFloat *xmax);  wzIndex addWedge(wzRegion r, wzWedge dir,		 wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,		 wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,		 wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty);  wzIndex refinementInBox(wzFloat dx, wzFloat dy, wzFloat dz, wzIndex b);  wzIndex refinementIsotropicInBox(wzFloat dx, wzIndex b)  {return refinementInBox(dx,dx,dx,b);}  void setBorder(		 wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,		 wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,		 wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty);  void addPlane(wzIndex dir, wzFloat x);  void addPlaneX(wzFloat x) {addPlane(0,x);}  void addPlaneY(wzFloat y) {addPlane(1,y);}  void addPlaneZ(wzFloat z) {addPlane(2,z);}  void addPlanesOfPoint(wzFloat x = 0, wzFloat y = 0, wzFloat z = 0)  {addPlane(0,x);addPlane(1,y);addPlane(2,z);}  void setFaceOfBox(wzFace f, wzIndex box);  void setFaceOfBoxSide(wzFace f, wzIndex box, wzIndex dir);  void setFaceInBox(wzFace f, wzFloat *xmin, wzFloat *xmax);  void setFaceInBox(wzFace f,		    wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,		    wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,		    wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty);  void setFaceOfWedge(wzFace f, wzIndex wedge);		// all sides  void setFaceOfWedgeSide(wzFace f, wzIndex wedge);	// main side  void setFaceOfWedgeSide(wzFace f, wzIndex wedge, wzIndex dir); // other sides  void setFaceInWedge(wzFace f, wzWedge dir, wzFloat *xmin, wzFloat *xmax);  void setFaceInWedge(wzFace f, wzWedge dir,		    wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,		    wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,		    wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty);  void setFaceOnPlaneX(wzFace f, wzFloat x,		    wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,		    wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty)  {setFaceInBox(f,x,x,ymin,ymax,zmin,zmax);}  void setFaceOnPlaneY(wzFace f, wzFloat y,		    wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,		    wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty)  {setFaceInBox(f,xmin,xmax,y,y,zmin,zmax);}  void setFaceOnPlaneZ(wzFace f, wzFloat z,		    wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,		    wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty)  {setFaceInBox(f,xmin,xmax,ymin,ymax,z,z);}  void setRegularRefinementX(wzIndex i) {setRefinement(0,i);}  void setRegularRefinementY(wzIndex i) {setRefinement(1,i);}  void setRegularRefinementZ(wzIndex i) {setRefinement(2,i);}  void setRegularRefinement(wzIndex dir, wzIndex i) {setRefinement(dir,i);}  virtual void endInitialization();  // implementations  virtual wzFloat 	chi(const wzPoint& p) const;  virtual wzIndex	Point(wzPoint& p0) const;  virtual wzIndex	Line (cogFlag1& f, const cogLine& s) const;  virtual void 		setDelta(cogFloat delta=1.e-4);  virtual wzIndex 	BoundaryCondition(cogFlag1& f) const;  virtual wzpoints	generatePoints(cogeometry g,wzmetric r,wzchart c) const;  virtual void 		getMetric(wzMetricData& data, const wzPoint& p) const;  virtual void		getMetric(wzMetricData& data, const cogFlag1& f) const;  // internal calls:protected:friend class ibgOctree;  wzBoolean suppressFaceIntersection[4];  wzIndex boundaryLevel;  wzBoolean inBox(wzIndex b, const wzPoint& p) const;  wzBoolean detectingFlag(cogFlag1 f, wzFloat* F,			  wzFloat* Y0, wzFloat* Y1,			  wzFloat p1, int box) const;  void mark(ibgoctree gg, wzFloat delta) const;  void shift(ibgoctree gg, wzFloat delta) const;  void hideBoundaryNodes(ibgoctree gg) const;  void hideIrregular(ibgoctree gg) const;  void hideForbiddenFaceDirections(ibgoctree gg) const;  void hideLongSideIntersections(ibgoctree gg) const;  void computeWedgeData(wzFloat *a, wzFloat *d, wzWedge dir,			wzFloat *xmin, wzFloat *xmax);  wzIndex RegionNodeRemoval;  wzIndex FaceNodeRemoval;  wzIndex EdgeNodeRemoval;  wzIndex VertexNodeRemoval;  static const wzIndex UnderdogRemoval;  static const wzIndex IrregularRemoval;  static const wzIndex LongSideIntersectionRemoval;  static const wzIndex FullRemoval;public:  // calls which influence the behaviour of the octree algorithm:  // (you should know what you do if you call them!!!)  // see cogenoctree.html#NodeRemoval  void omitFaceComputation()   {boundaryLevel = 0;}  void omitEdgeComputation()   {boundaryLevel = 1;}  void omitVertexComputation() {boundaryLevel = 2;}  void omitFacesInDirection(wzBoolean x, wzBoolean y, wzBoolean z);  void omitRegionNodeRemoval()		{RegionNodeRemoval=0;}  void omitFaceNodeRemoval()		{FaceNodeRemoval  =0;}  void omitEdgeNodeRemoval()		{EdgeNodeRemoval  =0;}  void omitVertexNodeRemoval()		{VertexNodeRemoval=0;}  void enforceRegionNodeRemoval()	{RegionNodeRemoval=FullRemoval;}  void enforceFaceNodeRemoval()		{FaceNodeRemoval  =FullRemoval;}  void enforceEdgeNodeRemoval()		{EdgeNodeRemoval  =FullRemoval;}  void enforceVertexNodeRemoval()	{VertexNodeRemoval=FullRemoval;}  void removeLongSideIntersections(wzBoolean on=wzTrue);  void removeUnderdogs(wzFloat delta=1);  void removeIrregularNodes(wzBoolean on=wzTrue);  void setEpsilon(wzFloat epsilonNew);  static 	wzFloat 	relativeMinimalDistance[3];  static 	wzBoolean  	SimpleBinaryIntersectionForLine;wzObsoleteCode:  wzIndex addRegion(wzRegion r, wzFloat *xmin, wzFloat *xmax)  {return addBox(r,xmin,xmax);}  wzIndex addRegion(wzRegion r,		    wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,		    wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,		    wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty)  {return addBox(r,xmin,xmax,ymin,ymax,zmin,zmax);}  void setBox(	      wzFloat xmin = -wzInfty, wzFloat xmax = wzInfty,	      wzFloat ymin = -wzInfty, wzFloat ymax = wzInfty,	      wzFloat zmin = -wzInfty, wzFloat zmax = wzInfty)  {setBorder(xmin,xmax,ymin,ymax,zmin,zmax);}  void setFaceOfRegion(wzFace f, wzIndex r)  {setFaceOfBox(f,r);}  void setFaceOfRegionSide(wzFace f, wzIndex r, wzIndex dir)  {setFaceOfBoxSide(f,r,dir);}};typedef wzProxy<CogenOctree> cogenOctree;// obsolete:#define cogenBasic cogenOctree#define CogenBasic CogenOctree#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -