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.
kev/Drawer/GVision/FaultAmplitudeLib/FaultAmplitudeCreator.h

133 lines
3.9 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#include <string>
#include <set>
#include <map>
#include "../BaseLib/BaseElements.h"
class GDfdMap;
class GSurface;
//class FAmplitudeInfo;
using namespace std;
class AFX_EXT_CLASS FAmplitudeInfo
{
public:
FAmplitudeInfo();
virtual ~FAmplitudeInfo();
string fltName;
string surveyName;
double x0;
double y0;
double x1;
double y1;
double xMid;
double yMid;
double horizontal_dist; //水平断距
double amplitude; //垂直断距
double angle; // 柱子角度 -pi~pi
};
class AFX_EXT_CLASS CFaultAmplitudeCreator
{
public:
CFaultAmplitudeCreator();
virtual ~CFaultAmplitudeCreator(void);
void Clear(void);
bool ReadDfdMap(const char* strFile); //读取dfd图件
bool ReadDfg(const char* strDfg); //读取背景曲面
bool CreateDfg(int numx, int numy, double x0, double y0, double dx, double dy, double* values);
void SetZRange(double zmin, double zmax);
void SetOutPaths(CString strOutDfd, CString strOutCsv);
void InsertLayer(const string& strLayer);
void InsertElement(GBaseObj* pobj, const string& strLayer, COLORREF color = RGB(0, 0, 0));
//设置其他参数后执行execute
virtual bool Execute();
GDfdMap* GetDfd(void);
GSurface* GetDfg(void);
bool GetFltAmplitudeInfo(GPline* pFlt, GPline* pSvy, FAmplitudeInfo& fmInfo);
//获去经过pt1的直线与断层的第二个交点pt1为断层上测量点angle为角度dstpt为目标交点
bool Get2rdPoint(GPline* pFlt, GPoint3D& pt1, double angle, GPoint3D& dstPt);
double GetAmplitude(const GPoint3D& pt1, const GPoint3D& pt2, GPline* pFlt = nullptr);// pt1 pt2为断点
double GetAmplitude(const GPoint3D& pt, const GPoint3D& ptStart, const GPoint3D& ptEnd);// ptStart ptEnd为断层段
protected:
GDfdMap* m_dfdMap;
GSurface* m_dfg;
CString m_strInputDfd;
CString m_strInputDfg;
CString m_strOutDfd;
CString m_strOutCsv;
//parameters
public:
CString m_strFltLayer; //断层所在层
CString m_strSurveyLayer; //测线所在层
CString m_strFltNameFile; //断层名筛选文件
int m_iCalcMethod; // 0= 等间距 1= 测线
float m_pillarStep; // 柱子步长
float m_thresholdValue; //断距分界值
COLORREF m_clrLow; //小值颜色
COLORREF m_clrHigh; //大值颜色
float m_PillarWidth; //柱子宽度
float m_PillarHeightRatio; //柱子高度比
float m_TextHeight; //文字高度
CString m_strFltNames; // 断层名称列表
bool m_bLocalFltDirect; //柱子与断层局部方向垂直
bool m_bWithIncline; // 是否标注断层倾角
double m_inclineScale; // 倾角比例
COLORREF m_clrIncline; // 断层倾角颜色
protected:
//由测线计算断距
void CalcAmplitudeWithSurvey(void);
//由步长计算断距
void CalcAmplitudeWithStep(void);
void CalcAmplitudeWithStep(GPline* flt,std::vector<FAmplitudeInfo>* dstFAInfo = nullptr);
//写出dfd
virtual bool WriteDfd(void);
//写出csv
virtual bool WriteCsv(void);
//读取指定断层名
void ReadFltNames(void);
//获取候选断层线
void GetCandidateFlts(void);
//获取候选测线
void GetCandidateSurveys(void);
//生成柱子多边形
int CreatePillarPolygons(void);
//由FAmplitudeInfo生成柱子多边形
void CreatePillarPolygon(FAmplitudeInfo& fi, GPline* pline, GPline* plineInc);
void ErasePillarPgns(void);
virtual void WriteLayers(FILE* fw);
void WritePillars(FILE* fw);
virtual void WriteTextPoints(FILE* fw);
//获取测线弧度 0-PI]
double GetSurveyAngle(GPline* psvy);
std::set<string> m_tarFltNames;
std::vector<GPline*> m_candidateFlts; //候选断层线
std::vector<GPline*> m_candidateSurveys; //候选测线
std::vector<FAmplitudeInfo> m_ampResults; //计算结果
std::vector<GPline*> m_pillarPolygons;
std::map<GPline*,GPoint3D> m_pillarTexts; //柱子文字位置
std::vector<GPline*> m_pillarPolygonsInc;
std::map<GPline*, GPoint3D> m_pillarTextsInc; //柱子文字位置
private:
std::vector<GRect8> m_fltRects;
std::vector<GRect8> m_surveyRects;
CString m_strLayerPillarHigh; //层位: 断距柱子\\高值
CString m_strLayerPillarLow; //断距柱子\\低值
CString m_strLayerPillarText; //断距柱子\\文字
CString m_strLayerPillarIncline; // 断层倾角
CString m_strLayerTextIncline; // 断层倾角
double m_surveyAngle; //测线弧度
};