#if !defined(AFX_GTZX_H__148D287E_47E1_4023_8291_68868AA7316B__INCLUDED_)
#define AFX_GTZX_H__148D287E_47E1_4023_8291_68868AA7316B__INCLUDED_
#endif
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <stdlib.h>
//#include <dbapserv.h>
#include <string.h>
#include <math.h>
#include <assert.h>
//#include <iostream.h>
#include "STDIO.h"
#include "malloc.h"
#include "time.h"
#include "BAS_DRAW_FUN.H"
#include "BAS_DRAW_FUN1.H"

//#include "TFCal.h"
//#include "BaseLine.h"
//#include "DrawRailCrossSlope.h"
#include <vector>
#define B_X 0
#define R_X 1
#define LEFTLINE -1
#define RIGHTLINE 1
#define 正线 1
#define 到发线 2
#define 其他线 3
#define 次要线 4
#define 驼峰溜放线 5


using namespace std;
//#include "XLDataBase.h"
//#include "triDTM.H"

#define streq(s,t) (_tcscmp((s),(t))==0)
#define AppName  /*MSG1*/"GUADS" 


//		自定义类

//   1、交点定义
//   MNJD 允许的最多交点数（含起、终点），NJD--实际交点数（含起、终点），
//   IJD--第I个交点（起点0，终点NJD-1），JDGH--交点冠号，
//   JDarray[i][7] --交点 序号、N、E、L1、R、L2、超高；JDQXB[i][]--ZH、HZ、T1、T2、L
//   JDPXYINDATA[i][3][5]--交点线元
//   DLB[j]--断链表（含冠号）
//   PDB[k][]--坡度表#pragma once


class ZCGTZX : public BAS_DRAW_FUN//,public triDTM
{
public:
	ACHAR  SJST[STR_SHORT];              //设计时态：既有/新建/预留/在建
	ACHAR  DesignBianHao[STR_SHORT];//外部设计编号  提供给用户
	int isDXGD;			//是否是渡线股道
	int NJD, tarray;
	ChaiChuArray m_ChaiChuArray;//拆除段
	static void Sort_GDTypeArray(vector<ZCGTZX*>& pGTZXArray);
	int XLType;//线路类别（1正线 2到发线 3其他线 4次要线）
	static void Judge_GDType(ZCGTZX* pGD, vector<vector<ZCGTZX*>>& pGDTypeArray);
	static void Sort_GD(vector<ZCGTZX*>& pGDArray);
	void  setINIT(int nlc, int nh, int Chinese_Engbz, double Texth);
	int NDL, NH, NLC; //NDL 断链点数（包括里程冠号改变点，如CK12+235=C1K12+235，为断链值是0的特殊断链点）
	double texth;
	void SetGDSX(Track TrackData);
	ACHAR  DesignJYBianHao[STR_SHORT];//外部既有编号  提供给用户
	ACHAR  DesignCZXBianHao[STR_SHORT];//外部参照线编号   提供给用户
	ACHAR  BianHao[STR_SHORT];         //gudao内部编号  供程序使用  不提供给用户
	ACHAR  CZXBianHao[STR_SHORT];         //参照基线编号
	ACHAR  JLType[STR_SHORT];          //进路类型：客货/客/货
	ACHAR  JLDirection[STR_SHORT];      //进路方向：双向/从左到右/从右到左
	double  UpValidL;		   ///// //上行方向股道有效长
	double  DownValidL;		////// //下行方向股道有效长
	double  Span;			   ///////// //股道全长
	double  TracklayingL;	   //////// //股道铺轨长
	int  ISHWCX;                //是否货物超限：1:是；0否
	double LengthBeforeBZ, LengthAfterBZ;//纵坡变坡点两端坡长，用于标注
	//是否延伸及延伸长度
	int isYanShen;//是否延伸
	double YanShenLength;//长度
	int LCcanzhao;//坡度标里程参照 1为基线 0为本身
	int BPDLCdir;//纵坡设置沿基线里程方向 0从小到大 1从大到小
	int isYLDoHDM;//预留设计横断面
	int IsJiSuanJiZhunXian;
	ACHAR SXYXCQDID[STR_SHORT];
	ACHAR SXYXCZDID[STR_SHORT];
	ACHAR XXYXCQDID[STR_SHORT];
	ACHAR XXYXCZDID[STR_SHORT];
	int SXYXCQDType;//1-信号机  2-警冲标 3-道岔a端 4-车挡  -2,起点  -3终点
	int SXYXCZDType;//1-信号机  2-警冲标 3-道岔a端 4-车挡  
	int XXYXCQDType;//1-信号机  2-警冲标 3-道岔a端 4-车挡  
	int XXYXCZDType;//1-信号机  2-警冲标 3-道岔a端 4-车挡  
	ACHAR SXYXCQDID_YL[STR_SHORT];
	ACHAR SXYXCZDID_YL[STR_SHORT];
	ACHAR XXYXCQDID_YL[STR_SHORT];
	ACHAR XXYXCZDID_YL[STR_SHORT];
	int SXYXCQDType_YL;//1-信号机  2-警冲标 3-道岔a端 4-车挡   -2,起点  -3终点
	int SXYXCZDType_YL;//1-信号机  2-警冲标 3-道岔a端 4-车挡  
	int XXYXCQDType_YL;//1-信号机  2-警冲标 3-道岔a端 4-车挡  
	int XXYXCZDType_YL;//1-信号机  2-警冲标 3-道岔a端 4-车挡  
	int m_IfHasGF;//是否存在轨缝
	double StartCml, EndCml;
	void SetJDQXBHstr(ACHAR In_JDStrArray[MAXJDNUM][STR_SHORT], ACHAR In_QXBHStrArray[MAXJDNUM][STR_SHORT]);
	ACHAR JDStrArray[MAXJDNUM][STR_SHORT];//交点号数组
	ACHAR QXBHStrArray[MAXJDNUM][STR_SHORT];//曲线编号数组
	ACHAR GTZXQDID[STR_SHORT];//起点设备ID
	ACHAR GTZXZDID[STR_SHORT];//终点设备ID
	int GTZXQDType;//1-道岔  2-车挡  
	int GTZXZDType;//1-道岔  2-车挡  
	vector<CString> JYDC;
	int isuserQZD;
	CString mdbname;//本GTZX对应的mdb
    BOOL  setDLM(int iDL, double BLC, double DL, const ACHAR* BGH, const ACHAR* EGH, int mode = 1);
	DLBZ DLB[MAXDLNUM];  // 含起点
	double JDarray[MAXJDNUM][7];  // 1->N,2->E,7.超高
	GGLXArray m_GGLXArray;//底砟边坡
	void SetGGLXArray(GGLXArray InGGLXArray, bool IsAdd);
	bool TrsCmltoNE(double Cml, xlpoint& PZ, int isprinttext = 0) const;
	void SetDefaultGGLXArray();
	double xl_length;
	static CString ConvertXLTypeToCstring(int xltype);
	double array[4 * MAXJDNUM][10];
	void SetDZLXArray(GZLCArray InDZLXArray, bool IsAdd);
	GZLCArray m_GZLCArray;//轨枕里程分段
	void SetHLGLXArray(HLGLXArray InHLGLXArray, bool IsAdd);
	HLGLXArray m_HLGLXArray;//护轮轨
	void SetDefaultHLGLXArray();
	void SetBPDArray(int NPD, vector<PDTAB>BPDArr, bool IsAdd);
	vector<PDTAB> m_BPDArray;
	int m_LJorGM;//0路面坡 1轨面坡
	//小数位
	int m_Xsw;
	int m_DesHXSW;
	vector<int>BPDIndex;
	static CString ConvertXLTypeIntToCstring(int xltype);
	int ISDrawYXC;
	int ISDrawJLF;
	int ISDrawDH;
	int ISDrawQXBH;
	int ISDrawGDBH;
	int ISDrawJYBH;
	int ISDrawLCB;
	int ISDrawCXBZ;
	int ISDrawJZX;
	int ISDrawJDBZ;
	int ISDrawGGLXFD;
	int ISDrawPeiGui;
	int IsDrawPDB;
	int isShowGM_LM; // 是否绘制坡度标上的“轨面”文字
	int isShowPDBML; // 是否绘制坡度标上的里程
	DPoint2d m_BZBHPt;//用于标注股道编号的点，大地坐标
	DPoint2d m_JYBHPt;//用于标注股道编号的点，大地坐标
	DPoint2d m_BZYXCPt;//用于标注有效长的点，大地坐标
	DPoint2d m_BZDHPt;//用于标注电化的点，大地坐标
	DPoint2d m_BZJLFPt;//用于标注进路符的点，大地坐标
	vector<DPoint2d> m_BZQXBHPt;//用于标注曲线编号的点，大地坐标
	vector<DPoint2d> m_BZQXYSPt;//用于标注曲线要素的点，大地坐标
	double BZ_StartCml, BZ_EndCml;//里程标注的起终连续里程，通常等于全线的起终里程，特殊情况下全线只有一段需要标注里程 ， ph2019-6-26
	//有效长属性数据
	DPoint2d SX_Spt, SX_Ept;
	DPoint2d XX_Spt, XX_Ept;
	double SX_QDcml;
	double SX_ZDcml;
	double XX_QDcml;
	double XX_ZDcml;
	double UpValidL_YL;
	double DownValidL_YL;
	double SX_QDcml_YL;
	double SX_ZDcml_YL;
	double XX_QDcml_YL;
	double XX_ZDcml_YL;
	//配轨
	vector<double> PeiGuiArray;
	ACHAR LCGH[STR_SHORT];//里程冠号
	void SetDZLCArray(DZLCArray InDZLCArray, bool IsAdd);
	DZLCArray m_DZLCArray;//道砟里程分段
	void SetDefaultDZLXArray();
	void SetDefaultDHArray();
	void SetDefaultDZLCArray();
	DHArray m_DHArray;//电化里程分段
	void SetLYDArray(LYDArray InLYDArray, bool IsAdd);
	void SetChaiChuArray(ChaiChuArray InChaiChuArray, bool IsAdd);
	LYDArray m_LYDArray;//利用段
	void SetDCDKArray(DCDKArray InDCDKArray, bool IsAdd);
	DCDKArray m_DCDKArray;//道床顶宽
	void SetDefaultDCDKArray();
	BOOL getpxy_DATA();// 导线法由导线数据文件求线位 L.SC.S.L.S.C.S.L...  得到线元文件
	vector<double> array_pxy;//array_pxy[NJD][4][5] 临时线元数组//改成一维，方便释放
	ZCGTZX();
	virtual ~ZCGTZX();
	ZCGTZX(onetrack& PTArray, CString style = L"驼峰溜放线");
	ZCGTZX(vector<DPoint3d> PTArray, CString style = L"驼峰溜放线");
	ZCGTZX(int iNJD, double iJDarray[MAXJDNUM][7], ACHAR iJDStrArray[MAXJDNUM][STR_SHORT], ACHAR* GH, ACHAR* JDchr);
	ZCGTZX(int iNJD, double iJDarray[MAXJDNUM][7], const ACHAR* GH, const ACHAR* JDchr);
	ZCGTZX(CString BIANHAO);
	int GetSJST() const;
	ACHAR JDGH[STR_SHORT];
	double QXB[MAXJDNUM][9]; // 0 ZH, 1 HY, 2 YH, 3 HZ, 4 转角, 5 T1, 6 T2, 7 L, 8 左(-1)右(1)
	vector<double> Angle4Lable;//旋转角
	int isHuiTouQuXian;
	static int ConvertXLTypeToInt(CString xltype);
	double DangQianBanJing;//当前半径
	int JD0; //起始交点号


};