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 + -
显示快捷键?