#pragma once
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include "BAS_DRAW_FUN.h"
#include <vector>
using namespace std;

class  CBaseLine : public BAS_DRAW_FUN
{
public:
	CBaseLine();
	CBaseLine(int iNJD, double iJDarray[][7], const ACHAR* GH, const ACHAR* JDchr);
	virtual ~CBaseLine();

	//基线属性
	int TJindex;//统计数量属性，为<=0时不统计数量 相同时一起统计
	ACHAR  BianHao[STR_SHORT];         //基线内部编号  供程序使用  不提供给用户
	ACHAR  DesignBianHao[STR_SHORT];//外部编号  提供给用户
	//ACHAR  SJST[STR_SHORT];              //设计时态：既有/新建/预留/在建
	//线位属性
	ACHAR JDGH[STR_SHORT];
	int NJD, tarray;
	ACHAR JDStrArray[MAXJDNUM][STR_SHORT];//交点号数组
	double JDarray[MAXJDNUM][7];  // 1->N,2->E,7.超高
	//double array_pxy[MAXJDNUM][4][5];// QXLRL[100][3];
	vector<double> array_pxy;//array_pxy[NJD][4][5] 临时线元数组//改成一维，方便释放

	double array[4 * MAXJDNUM][10];
	double virtual_array[4 * MAXJDNUM][10];//起终点延长后的虚拟线元数组  用于投影计算
	int virtual_tarray;
	double QXB[MAXJDNUM][9];
	double xl_length;
	double Virtual_XLlen;//起终点延长后的虚拟线路长度 
	double ExtentLen;
	//基线控制范围多边形 顶点记录x-投影里程 y-支距 左负右正 z-0.0
	vector<DPoint3d> V_JDARRAY;
	vector<DPoint3d> PolygonPtArrayScreen;
	int JDTDBZ;
	int IsDrawPolygon;//是否画控制范围 ，默认不画  0-不画 1-画
	//Adesk::Int16 V_num;

	//里程属性
	int NDL, NH, NLC;
	int Chinese_Engbz_type;
	DLBZ DLB[MAXDLNUM];  // 含起点
	DLBZ Virtual_DLB[MAXDLNUM];  //起终点延长后的虚拟断链数组  用于投影计算
	ACHAR LCGH[STR_SHORT];//里程冠号
	double startMileage;/////////////起始里程
	double StartCml, EndCml;
	ACHAR StartCKml[STR_EXTEND];
	ACHAR  EndCKml[STR_EXTEND];
	int JD0;

	double texth;
	int draw_zybz;
	double m_JYLjbk;// 理论路基半宽(m)//既有股道路基半宽
	double m_MinSGkuan;// 拨道傍宽宽度(m)//最小施工宽度
	double m_AllowingWide; // 允许欠宽（m）


	int INIT();
	void setINIT(int nlc, int nh, int Chinese_Engbz, double Texth);
	void SetGDSX(Track TrackData);
	void TrsProjPtToNE(double Cml, double Dist, double& N, double& E);
	BOOL CreateVirtualXYarray();
	bool TrsCkmltoCml(ACHAR Ckml[], double& Cml);
	void TrsCkmlPtToNE(ACHAR Ckml[STR_SHORT], double Dist, double& N, double& E);
	double XLC(double TYLC, ACHAR* GH, int NDL1);
	BOOL getpxy_DATA();// 导线法由导线数据文件求线位 L.SC.S.L.S.C.S.L...  得到线元文件
	void  CreateVirtualDLB();
	BOOL setDLM(int iDL, double BLC, double DL, const ACHAR* BGH, const ACHAR* EGH, int mode = 1);
};