📄 fmstools.h
字号:
#ifndef __FMSTOOLS_H__
#define __FMSTOOLS_H__
typedef struct {
DWORD dwFlag; //
char Location[33];
int Date;
int Time;
float Lat;
float Lon;
float Mag;
float Depth;
float FP1D, FP1A, FP2D, FP2A;
COLORREF PColor;
COLORREF TColor;
int Radius;
int xShift;
int yShift;
float PAXD, PAXA;
int PLength;
float TAXD, TAXA;
int TLength;
} RECORD_FMS_MIF; //存储震源机制解的MIF文件属性
class AFX_EXT_CLASS CFmsTools : public CObject
{
public:
CFmsTools();
~CFmsTools();
//绘制震源机制断层面解图
void DrawFmsCircle(CDC *pDC, int xc, int yc, RECORD_FMS_MIF recFms);
//绘制震源机制解P轴或T轴
void DrawFmsAxis(CDC *pDC, int xc, int yc, RECORD_FMS_MIF recFms, BOOL bAxisP=TRUE);
private:
typedef struct {
double x;
double y;
} LFFPOINT;
LFFPOINT m_pCircle[360]; //圆周上各点的坐标
LFFPOINT m_pPlane[362]; //节面上各点的坐标(前181点为第1个有效节面)
int m_iPlanes; //有效节面数(水平节面与大圆重复,无效)
BOOL m_bThreePolygon;
//LFFPOINT m_pPlane2[181]; //节面2上各点的坐标
int m_piCrossPointNo[6]; //两节面与圆的交点在圆上坐标号、两节面交点在节面上的坐标号
//int m_iPlaneOnCircle11,m_iPlaneOnCircle12; //节面1与圆的交点在圆上坐标号
//int m_iPlaneOnCircle21,m_iPlaneOnCircle22; //节面2与圆的交点在圆上坐标号
//int m_iCrossOnPlane1,m_iCrossOnPlane2; //交点在节面1、节面2上的坐标号
LFFPOINT m_pPolygon[1088]; //多边形节点
POINT m_pPtPolygon[540]; //
int m_iPolygons; //多边形的数目
BOOL m_bOddBegin; //P轴是否对应奇数多边形
POINT m_pPtBegin[5]; //记录多边形起点坐标和点数
//计算圆周点坐标
void GetCircleNodes(double lfRadius);
//计算节面各点坐标
void plotpl(double lfRadius, double lfAngle,double lfDirection, LFFPOINT *pPlane);
//计算节面起点对应圆周点号、节面交点在节面上的点号
void GetCrossPointNo();
//计算节面和圆周所围成的区域(2,3,4个)的坐标
void GetPolygonData();
//计算T或P轴位置
void tpcall(double lfRadius, double ain, double az, double &lfx, double &lfy);
int PtInPolygon(double *ax, double *ay, int nk, double x, double y);
void DrawArrowLine(CDC *pDC, CPoint PointStart, CPoint PointEnd);
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -