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 COREFINE_2D_TOOLS_HH
00025 #define COREFINE_2D_TOOLS_HH
00026
00027 #include <bitset>
00028 #include "general-tools.hh"
00029 #include "edge-intersection.hh"
00030
00031 class DLL_COREFINEMENT CBoundingBox;
00032
00033 namespace GMap3d {
00034
00035 class DLL_COREFINEMENT CCorefine2dTools : public CGeneralTools
00036 {
00037 public:
00038
00039 CCorefine2dTools(CGMapVertex * AMap, TCoordinate AEpsilon = 1E-4);
00040
00041 bool isVectorInSector(const CVertex & AVector,
00042 const CVertex & ASectorVector1,
00043 const CVertex & ASectorVector2);
00044
00045 bool isVectorInSector(const CVertex & AVector, CDart * ASector,
00046 int AVertexDI = -1);
00047
00048 virtual bool areVectorsColinear(const CVertex & AVector1,
00049 const CVertex & AVector2);
00050
00051 virtual TCoordinate pointParameterOnLine(const CVertex & APoint,
00052 const CVertex & ALineVertex1,
00053 const CVertex & ALineVertex2);
00054
00055 virtual CDart * findSectorOfVector(const CVertex & AVector, CDart * AVertex,
00056 int AVertexDI = -1);
00057
00058 std::list<CDart*> * sortVerticesEdges(CDart * AVertex1, CDart * AVertex2,
00059 int AVertexDI = -1);
00060
00061 std::list<CDart*> * sortMultipleVerticesEdges(CDart * AVertex1,
00062 const std::list<CDart*> & AVertices,
00063 int AVertexDI = -1);
00064
00065 virtual CDart * findWellOrientedDart(CDart * AVertex, int AVertexDI = -1);
00066
00067 virtual TPositionOnEdge localizePointOnEdge(const CVertex & APoint,
00068 const CVertex & AVertex1,
00069 const CVertex & AVertex2,
00070 TCoordinate * AParam);
00071
00072 virtual TPositionOnEdge localizeEdgesIntersection(const CVertex & ALinePoint1,
00073 const CVertex & ALinePoint2,
00074 const CVertex & AEdgePoint1,
00075 const CVertex & AEdgePoint2,
00076 TCoordinate * ALineParam,
00077 TCoordinate * AEdgeParam);
00078
00079 CEdgeIntersection findNearestIntersection(const CVertex & AVertex1,
00080 const CVertex & AVertex2,
00081 CDart * AFace,
00082 bool AFaceIsVertex1,
00083 int AVertexDI = -1);
00084
00085 CDart * localizePointInMesh(const CVertex & APoint, CDart * AMesh,
00086 int AVertexDI = -1);
00087
00088 void removeDoubleEdges(CDart *& AMesh1, CDart *& AMesh2, std::bitset<NB_MARKS> ACopyMarks, int AVertexDI = -1);
00089
00090 protected:
00091 };
00092
00093 }
00094
00095 #endif