00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef GENERAL_TOOLS_HH
00025 #define GENERAL_TOOLS_HH
00026
00027 #include "g-map-vertex.hh"
00028 #include "tools-win32.hh"
00029
00030 class DLL_TOOLS CPlane;
00031 class DLL_TOOLS CBoundingBox;
00032
00033 namespace GMap3d {
00034
00040 class DLL_TOOLS CGeneralTools
00041 {
00042 public:
00043
00048
00055 CGeneralTools(CGMapVertex * AMap, TCoordinate AEpsilon = 1E-4);
00056
00061 virtual ~CGeneralTools();
00062
00064
00069
00070 CVertex normalizeVector(const CVertex & AVector);
00071
00072 bool isVectorNull(const CVertex & AVector);
00073 bool areVectorsColinear(const CVertex & AVector1, const CVertex & AVector2);
00074
00075 TCoordinate pointParameterOnLine(const CVertex & APoint,
00076 const CVertex & ALineVertex1,
00077 const CVertex & ALineVertex2);
00078
00079 TCoordinate squareDistanceToLine(const CVertex & APoint,
00080 const CVertex & ALineVertex1,
00081 const CVertex & ALineVertex2);
00082 TCoordinate squareDistanceToPlane(const CVertex & APoint,
00083 const CPlane & APlane);
00084 TCoordinate squareDistanceBetweenLines(const CVertex & ALine1Vertex1,
00085 const CVertex & ALine1Vertex2,
00086 const CVertex & ALine2Vertex1,
00087 const CVertex & ALine2Vertex2,
00088 CPlane * AIntersectionPlane = NULL);
00089
00090 bool getLinesIntersection(CVertex ALine1Point1, CVertex ALine1Point2,
00091 CVertex ALine2Point1, CVertex ALine2Point2,
00092 TCoordinate * ALine1Param,
00093 TCoordinate * ALine2Param,
00094 const CPlane & APlane);
00095
00096 virtual bool arePointsEqual(const CVertex & APoint1,
00097 const CVertex & APoint2);
00098 virtual bool isPointOnLine(const CVertex & APoint,
00099 const CVertex & ALineVertex1,
00100 const CVertex & ALineVertex2);
00101 virtual bool isPointOnPlane(const CVertex & APoint, const CPlane & APlane);
00102 virtual bool areLinesCrossing(const CVertex & ALine1Vertex1,
00103 const CVertex & ALine1Vertex2,
00104 const CVertex & ALine2Vertex1,
00105 const CVertex & ALine2Vertex2,
00106 CPlane * AIntersectionPlane = NULL);
00107
00108 CDart * alpha1(CDart * ADart);
00109 CDart * alpha2(CDart * ADart);
00110
00111 CVertex edgeVector(CDart * AEdge, int AVertexDI = -1);
00112 virtual CVertex faceNormalVector(CDart * AFace, int AVertexDI = -1);
00113 virtual CVertex fastFaceNormalVector(CDart * AFace, int AVertexDI = -1);
00114 virtual CVertex vertexNormalVector(CDart * AVertex, int AVertexDI = -1);
00115 virtual CVertex fastVertexNormalVector(CDart * AVertex, int AVertexDI = -1);
00116 virtual CPlane facePlane(CDart * AFace, int AVertexDI = -1);
00117 virtual CBoundingBox orbitBoundingBox(CDart * ADart, TOrbit AOrbit,
00118 int AVertexDI = -1);
00119
00120 virtual CVertex regionNormalVector(CDart * ADart, TOrbit AOrbit,
00121 unsigned int ARegionSize,
00122 int ARegionMark = -1,
00123 int AVertexDI = -1);
00124
00125 void displayEdgeVertices(CDart * ADart, int AVertexDI = -1);
00126 void displayFaceVertices(CDart * ADart, int AVertexDI = -1);
00127
00128 CDart * thickenVolume(CDart * AMesh, TCoordinate AThick = 1.0,
00129 int ABorderSteps = 5, int AVertexDI = -1);
00130
00132
00133 private:
00134 void thickenBorder(CDart * ABorder, int AMark,
00135 TCoordinate AThick, int ASteps,
00136 int ASide1DI, int ASide2DI, int AVertexDI = -1);
00137
00138 protected:
00139
00144
00145 CGMapVertex * FMap;
00146
00147 TCoordinate FEps, FEps2;
00148
00150 };
00151
00152 }
00153
00154 #endif