wzmetric.hxx

来自「Delaunay三角形的网格剖分程序」· HXX 代码 · 共 96 行

HXX
96
字号
#ifndef wzmetric_hxx#define wzmetric_hxx#include "wzpoint.hxx"#include "cog.hxx"#include "wzsafepointer.hxx"const wzIndex wzMetricDataMaxSize = 20;class wzMetricData{};class wzMetricLocal: public wzMetricData{public:  wzFloat g_ii[wzMetricDataMaxSize];};class wzDiagonalMetricData: public wzMetricData{public:  wzFloat g_ii[wzPointDim];};class wzMetric: public virtual wzProxyTarget{public:  virtual wzIndex size() const {return 0;}  virtual void getMetric(wzMetricData& data, const wzPoint& p) const  {;}  virtual void getMetric(wzMetricData& data, const cogFlag1& f) const  {;}  virtual wzFloat g_ii(const wzMetricData& data, 		       const wzPoint& q, wzIndex i) const  {return 1.0;}  virtual wzFloat g_ii(const wzMetricData& data, 		       const cogFlag1& q, wzIndex i) const  {return 1.0;}  virtual wzFloat distance(const wzMetricData& data, 			   const wzPoint& p,  const wzPoint& q) const;  virtual wzFloat distance(const wzMetricData& data, 			   const cogFlag1& f,  const wzPoint& q) const;  wzBoolean refineBetween(const wzMetricData& data, 			  const wzPoint& p,  const wzPoint& q) const  {return (distance(data,p,q)>1);}  wzBoolean refineBetween(const wzMetricData& data, 			  const cogFlag1& p,  const wzPoint& q) const  {return (distance(data,p,q)>1);}  //obsolete  wzBoolean refineBetween(const wzPoint& p,  const wzPoint& q) const  {wzMetricLocal m; getMetric(m,p); return refineBetween(m,p,q);}  void maximalLengthInRegion(wzFloat* d, const wzPoint& p) const  {*d = wzInfty;}};class wzDiagonalMetricSimple: public wzMetric{protected:  wzFloat G_ii[wzPointDim];  wzFloat f_oo, f_tt;public:  wzIndex size() const {return wzPointDim*sizeof(wzFloat);}  void refinementGlobal(wzFloat dx, wzFloat dy=wzInfty, wzFloat dz=wzInfty);  void faceRefinementGlobal(wzFloat orthogonal, wzFloat tangential);  virtual void getMetric(wzMetricData& data, const wzPoint& p) const;  virtual void getMetric(wzMetricData& data, const cogFlag1& f) const;  virtual wzFloat g_ii(const wzMetricData& data, 		       const wzPoint& q, wzIndex i) const  {return G_ii[i];}  virtual wzFloat g_ii(const wzMetricData& data, 		       const cogFlag1& f, wzIndex i) const;  virtual wzFloat distance(const wzMetricData& data, 			   const wzPoint& p,  const wzPoint& q) const;  virtual wzFloat distance(const wzMetricData& data, 			   const cogFlag1& f,  const wzPoint& q) const;  wzDiagonalMetricSimple(wzFloat dx=wzInfty, 			 wzFloat dy=wzInfty,			 wzFloat dz=wzInfty);};class wzMetricByFunction  : public wzDiagonalMetricSimple{  wzFloat (*Function)(const wzPoint& p);public:  wzMetricByFunction(wzFloat (*f)(const wzPoint& p)):Function(f){}  virtual void getMetric(wzMetricData& data, const wzPoint& p) const;  virtual void getMetric(wzMetricData& data, const cogFlag1& f) const;};typedef wzProxy<wzMetric> wzmetric;// obsolete:#define ibgcriteria wzmetric#define ibgCriteriaSimpleFunction wzMetricByFunction#endif

⌨️ 快捷键说明

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