📄 cogenoctree.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 + -