📄 cog.hxx
字号:
/* <<< COG >>> - Contravariant Geometry Description Package */
#ifndef cog_hxx
#define cog_hxx
#include "cogtypes.hxx"
extern "C"{
#include "cog.h"
}
class Cogeometry; // abstract basic class;
// class cogeometry is safe pointer to Cogeometry;
class cogLine;
class cogTriangle;
class cogTetrahedron;
class cogSquare;
class cogCube;
class cogFlag1;
class cogFlag2;
class cogFlag3;
class cogError{};
class cogErrorFaceLost: public cogError{public: cogErrorFaceLost(){;}};
class cogErrorEdgeLost: public cogError{public: cogErrorEdgeLost(){;}};
class Cogeometry: public virtual wzProxyTarget{
public:
virtual cogIndex Point(cogPoint& s) const;
virtual cogIndex Line (cogFlag1& f,
const cogLine& s) const;
virtual cogIndex Triangle(cogFlag2& f, const cogFlag1& o,
const cogTriangle& s) const;
virtual cogIndex Tetrahedron(cogFlag3& f, const cogFlag2& o,
const cogTetrahedron& s) const;
virtual cogIndex BoundaryCondition(cogFlag1& p0) const;
virtual void setDelta(cogFloat delta=1.e-4);
void otherSide(cogFlag1& f, const cogFlag1& o) const;
void otherSide(cogFlag2& f, const cogFlag2& o) const;
void otherSide(cogFlag3& f, const cogFlag3& o) const;
void nextFace (cogFlag2& f, const cogFlag2& o) const;
void nextFace (cogFlag3& f, const cogFlag3& o) const;
void otherLine(cogFlag3& f, const cogFlag3& o) const;
cogIndex Line (cogFlag1& f, const cogFlag1& o,
const cogLine& s) const;
cogIndex Triangle(cogFlag2& f, const cogFlag2& o,
const cogTriangle& s) const;
cogIndex Tetrahedron(cogFlag3& f, const cogFlag3& o,
const cogTetrahedron& s) const;
cogIndex refine(cogFlag1& f,
const cogLine& s) const;
cogIndex refine(cogFlag2& f, const cogFlag1& o,
const cogTriangle& s) const;
cogIndex refine(cogFlag3& f, const cogFlag2& o,
const cogTetrahedron& s) const;
cogIndex Square(cogFlag2& f, const cogFlag1& o,
const cogSquare& s) const;
cogIndex Cube(cogFlag3& f, const cogFlag2& o,
const cogCube& s) const;
Cogeometry(cogFloat delta=1.e-4);
cogFloat Delta;
cogFloat ShiftDelta;
cogIndex maximalSquareIterations;
virtual ~Cogeometry(){;}
const cogPoint* Startpoint;
void setStartpoint(const cogPoint& p) const
{((Cogeometry*)this)->Startpoint = &p;}
wzRegion DefaultRegion;
wzFace DefaultFace;
void setDefaultRegion(wzRegion r) {DefaultRegion = r;}
void setDefaultFace (wzFace f) {DefaultFace = f;}
static wzRegion InitialDefaultRegion;
static wzFace InitialDefaultFace;
private:
cogFloat Delta2D;
cogFloat Delta3D;
cogFloat singleIntersectionLimit2D;
cogIndex specialRefinement;
};
// internal error classes:
struct cogTriangleRoundTripFailed{
cogTriangleRoundTripFailed(){;}
};
struct cogTetrahedronRoundTripFailed{
cogTetrahedronRoundTripFailed(){;}
};
class cogLine{
public:
cogPoint& c0;
cogPoint& c1;
cogLine(cogPoint& p0, cogPoint& p1)
:c1(p1),c0(p0){;}
cogFloat diameter() const;
void barycentre(cogPoint& p) const;
void print() const;
};
class cogTriangle{
public:
cogPoint& c0;
cogPoint& c1;
cogPoint& c2;
cogTriangle(cogPoint& p0, cogPoint& p1, cogPoint& p2)
:c2(p2),c1(p1),c0(p0){;}
cogFloat diameter() const;
void barycentre(cogPoint& p) const;
void print() const;
};
class cogSquare{
public:
cogPoint& c0;
cogPoint& c1;
cogPoint& c2;
cogPoint& c3;
cogSquare(cogPoint& p0, cogPoint& p1, cogPoint& p2, cogPoint& p3)
:c3(p3),c2(p2),c1(p1),c0(p0){;}
void print() const;
//cogFloat diameter() const;
// void barycentre(cogPoint& p) const;
};
class cogCube{
public:
cogPoint& c0;
cogPoint& c1;
cogPoint& c2;
cogPoint& c3;
cogPoint& c4;
cogPoint& c5;
cogPoint& c6;
cogPoint& c7;
cogCube(cogPoint& p0, cogPoint& p1, cogPoint& p2, cogPoint& p3,
cogPoint& p4, cogPoint& p5, cogPoint& p6, cogPoint& p7)
:c7(p7),c6(p6),c5(p5),c4(p4),c3(p3),c2(p2),c1(p1),c0(p0){;}
cogFloat diameter() const;
void barycentre(cogPoint& p) const;
};
class cogTetrahedron{
public:
cogPoint& c0;
cogPoint& c1;
cogPoint& c2;
cogPoint& c3;
cogTetrahedron(cogPoint& p0, cogPoint& p1, cogPoint& p2, cogPoint& p3)
:c3(p3),c2(p2),c1(p1),c0(p0){;}
cogFloat volume() const;
cogFloat diameter() const;
void barycentre(cogPoint& p) const;
void print() const;
};
class cogFlag1{
public:
cogPoint& p1;
cogPoint& p0;
cogPoint& po;
cogFlag1(cogFlag1& f)
:p1(f.p1),p0(f.p0),po(f.po){;}
cogFlag1(cogPoint& i1, cogPoint& i0, cogPoint& io)
:p1(i1),p0(i0),po(io){;}
cogFlag1& operator=(const cogFlag1& i)
{p1=i.p1;p0=i.p0;po=i.po; return *this;}
void print() const;
};
class cogFlag2: public cogFlag1{
public:
cogPoint& p2;
cogFlag2(cogPoint& i2, cogFlag1& f)
:p2(i2), cogFlag1(f){;}
cogFlag2(cogPoint& i2, cogPoint& i1, cogPoint& i0, cogPoint& io)
:p2(i2), cogFlag1(i1,i0,io){;}
cogFlag2& operator=(const cogFlag1& i)
{p1=i.p1;p0=i.p0;po=i.po; return *this;}
cogFlag2& operator=(const cogFlag2& i)
{p2=i.p2;p1=i.p1;p0=i.p0;po=i.po; return *this;}
void print() const;
};
class cogFlag3: public cogFlag2{
public:
cogPoint& p3;
cogFlag3(cogPoint& i3, cogFlag2& f)
:p3(i3), cogFlag2(f){;}
cogFlag3(cogPoint& i3, cogPoint& i2, cogPoint& i1,
cogPoint& i0, cogPoint& io)
:p3(i3), cogFlag2(i2,i1,i0,io){;}
cogFlag3& operator=(const cogFlag1& i)
{p1=i.p1;p0=i.p0;po=i.po; return *this;}
cogFlag3& operator=(const cogFlag2& i)
{p2=i.p2;p1=i.p1;p0=i.p0;po=i.po; return *this;}
cogFlag3& operator=(const cogFlag3& i)
{p3=i.p3;p2=i.p2;p1=i.p1;p0=i.p0;po=i.po; return *this;}
void print() const;
};
typedef wzProxy<Cogeometry> cogeometry;
// <<< possible return values >>>
// for all functions:
const cogIndex cogRCError = 999;
const cogIndex cogRCRegionFound = 998;
const cogIndex cogRCFaceFound = 998;
const cogIndex cogRCFaceNotFound = 0;
const cogIndex cogRCEdgeFound = 998;
const cogIndex cogRCFaceFoundOn01 = 1;
const cogIndex cogRCFaceFoundOn12 = 12;
const cogIndex cogRCFaceFoundOn02 = 2;
const cogIndex cogRCFaceFoundOn23 = 23;
const cogIndex cogRCFaceFoundOn03 = 3;
const cogIndex cogRCVertexFound = 998;
const cogIndex cogRCEdgeFoundOn012 = 12;
const cogIndex cogRCEdgeFoundOn013 = 13;
const cogIndex cogRCEdgeFoundOn023 = 23;
const cogIndex cogRCEdgeFoundOn123 = 123;
const cogIndex cogRCEdgeFoundOn0123 = 123;
const cogIndex cogRCEdgeFoundOn0145 = 145;
const cogIndex cogRCEdgeFoundOn0347 = 347;
const cogIndex cogRCEdgeFoundOn1256 = 1256;
const cogIndex cogRCEdgeFoundOn2367 = 2367;
const cogIndex cogRCEdgeFoundOn4567 = 4567;
const cogIndex cogRCConditionFound = 998;
inline cogFloat cogLine::diameter() const
{return
( ((c1.x()>c0.x())?(c1.x()-c0.x()):(c0.x()-c1.x()))
+((c1.y()>c0.y())?(c1.y()-c0.y()):(c0.y()-c1.y()))
+((c0.spaceDimension()==2)?0:
((c1.z()>c0.z())?(c1.z()-c0.z()):(c0.z()-c1.z()))));
}
inline cogFloat cogTriangle::diameter() const
{return
((c2.x()>c0.x())?
((c1.x()>c2.x())?(c1.x()-c0.x()):
((c1.x()>c0.x())?(c2.x()-c0.x()):(c2.x()-c1.x()))):
((c1.x()>c0.x())?(c1.x()-c2.x()):
((c1.x()>c2.x())?(c0.x()-c2.x()):(c0.x()-c1.x()))))
+ ((c2.y()>c0.y())?
((c1.y()>c2.y())?(c1.y()-c0.y()):
((c1.y()>c0.y())?(c2.y()-c0.y()):(c2.y()-c1.y()))):
((c1.y()>c0.y())?(c1.y()-c2.y()):
((c1.y()>c2.y())?(c0.y()-c2.y()):(c0.y()-c1.y()))))
+ ((c0.spaceDimension()==2)?0:
((c2.z()>c0.z())?
((c1.z()>c2.z())?(c1.z()-c0.z()):
((c1.z()>c0.z())?(c2.z()-c0.z()):(c2.z()-c1.z()))):
((c1.z()>c0.z())?(c1.z()-c2.z()):
((c1.z()>c2.z())?(c0.z()-c2.z()):(c0.z()-c1.z())))));
}
void cogLinkPrintCommands();
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -