📄 wzmetric.hxx
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -