You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.8 KiB
C++

#pragma once
#include "scatteredtracer.h"
class CFaciesTracer : public CFaciesRgnTracer
{
public:
CFaciesTracer();
~CFaciesTracer();
//Attributes
public:
struct APPENDCONTROLPOINTSPLIT
{
int iTriangleIndex0[3];
int iTriangleIndex1[3];
};
private:
CArray<APPENDCONTROLPOINTSPLIT,APPENDCONTROLPOINTSPLIT> m_AppendControlPointSplitArray;//保存虚拟井加入时对三角形的分割情况
CArray<CPoint2D,CPoint2D> m_OldPointArray;//原始点,三角形的中点
CArray<CPoint2D,CPoint2D> 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<int,int>& TriangleIndexArray,CArray<BYTE,BYTE>& 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);
};