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/FaultRoseLib/FaultRosesCreator.h

73 lines
2.1 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 <list>
#include <vector>
using namespace std;
class AFX_EXT_CLASS RoseBar
{
public:
RoseBar(void);
float agl[2]; //开始,结束角度[agl0,agl1)
int count; //条数
};
class AFX_EXT_CLASS CFaultRosesCreator
{
public:
CFaultRosesCreator();
~CFaultRosesCreator();
//清空玫瑰图
void Clear();
//读取断层统计数据TargetColumn = 走向列, iRowStart = 第几行开始
bool ReadFile(CString strInput, int TargetColumn,int iRowStart);
void CreateRoseBars(void);
//将玫瑰图写入dfd文件
void WriteDFD(CString strOutput);
//参数设置
public:
float m_fBarInterval; //玫瑰条间隔度数
int m_nBarMaxNumber; //最大条数
int m_nCircleTickInterval; //外框刻标间隔度数
BOOL m_bAutoCalc; //是否自动计算最大条数
double m_dCX; //中心点坐标x
double m_dCY; //中心点坐标y
double m_dR; //玫瑰图半径
COLORREF m_barColor; //玫瑰条颜色
int m_iRotateAngle; //坐标系旋转角度
protected:
void WriteDfdHead(FILE* fw);
void WriteLayers(FILE* fw);
void WriteBorder(FILE* fw); //输出圆框
void WriteTicks(FILE* fw); //输出刻线
void WriteText(FILE* fw); //输出文字
void WriteBars(FILE* fw); //输出花瓣
void WriteColor(FILE* fw,COLORREF clr);
void WriteOneBar(FILE* fw,RoseBar rb,COLORREF clr);
//写出一根刻线angle正北坐标角度factor为长度与半径的比例
void WriteOneTick(FILE* fw, double angle, double fs, double fe);
//写出一组文字 x0,y0为左上角坐标width,height为宽高
void WriteOneText(FILE* fw, CString str,double x0, double y0, double width, double height);
//指定角度(顺时针方向正北为0和半径百分比获取园内部坐标
bool GetCoordiante(double degree, double factor, double& x, double& y);
//由角度和起止比例获取线段
bool GetSegment(double angle, double fstart, double fend, double*x, double* y);
double ConvertAngle(double angle); //坐标转换为正北坐标
double GetRealAngle(double angle); //正北坐标转换为笛卡尔坐标
int AutoCalcMapBarMaxNum(void);//自动计算图显示最大值
list<double> m_data;
vector<RoseBar> m_rosebars;
int m_nRealBarMax; //实际单瓣最大值
CString m_strLayerCircle;
CString m_strLayerTicks;
CString m_strLayerText;
CString m_strLayerBars; //花瓣层
};