#pragma once #include "scatteredtracer.h" class CFaciesTracer : public CFaciesRgnTracer { public: CFaciesTracer(); ~CFaciesTracer(); //Attributes public: struct APPENDCONTROLPOINTSPLIT { int iTriangleIndex0[3]; int iTriangleIndex1[3]; }; private: CArray m_AppendControlPointSplitArray;//保存虚拟井加入时对三角形的分割情况 CArray m_OldPointArray;//原始点,三角形的中点 CArray m_NewPointArray;//对应的移动后的点 //Operations public: void TraceStringData(int iPrecision);//用字串数据追踪区域边界 // 追踪线 void TraceStringDataLine(); void TraceStringDataSearchStart(int& iTriangleIndex,BYTE& byteBorderIndex); virtual void Clear(); double GetTriangleStringValueByPointStringValue(double dData0,double dData1,double dData2); void InterpolateValue(); void EnhanceSmooth(); void EnhanceSmooth(CArray& TriangleIndexArray,CArray& BorderIndexArray,BOOL bClose); void CalculateSmoothPoint(CPoint2D& p0,CPoint2D& p1,CPoint2D& p2,CPoint2D& p3,CPoint2D& p4,CPoint2D& pa,CPoint2D& pb,double dFactor0=1.0,double dFactor1=1.0); double CalculateCutPosition(int iTriangleIndex,BYTE byteBorderIndex,BOOL bOutBorder,double& dLeftValue,double& dRightValue); CPoint2D CalculateCutPoint(int iTriangleIndex,BYTE byteBorderInde); void SavePointMoved();//保存编辑痕迹 BOOL AddSavedPointToTriangle(); CPoint2D GetSavedPointFromTriangle(int iTriangleIndex,BYTE byteBorderIndex); double CalculateBorderPositionA(int iTriangleIndex,BYTE byteBorderIndex); void SetFaciesTypeManager(CFaciesTypeMgr* pFaciesTypeManager); CFaciesTypeMgr* GetFaciesTypeManager(); BOOL Prepare(int iPrecision); private: void AddAppendControlPointToTriangleGrid(int index); void RemoveAppendControlPointFromTriangleGrid(int index); };