⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stmeditordoc.h

📁 电子交通地图
💻 H
字号:
// STMEditorDoc.h : interface of the CSTMEditorDoc class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_STMEDITORDOC_H__43BA84C5_065B_4184_8905_D5805629F048__INCLUDED_)
#define AFX_STMEDITORDOC_H__43BA84C5_065B_4184_8905_D5805629F048__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "afxtempl.h"


typedef struct _pathinfo{
	int		begin_id;
	int		end_id;
}PATHINFO;

typedef struct _bsinfo{
	int		path_id;		//
	POINT	pos;
	char	name[31];//max to 15 GB
}BSINFO;

typedef enum {
	ACT_BROWSE,
	//cross action
	ACT_CROSS_PICK,
	ACT_CROSS_MOVE,
	ACT_CROSS_MOVE_CANCELED,
	//path action
	ACT_PATH_PICK_BEGIN,
	ACT_PATH_PICK_END,
	ACT_PATH_PICK_CENTER,
	ACT_PATH_CANCEL_PICK,
	//bus station action
	ACT_BS_PICK,
	ACT_BS_MOVE,
	//traffic route action
	ACT_TR_PICK_BEGIN,
	ACT_TR_PICK_NEXT,
	//street action
	ACT_STREET_PICK_BEGIN,
	ACT_STREET_PICK_NEXT,
	//address action
	ACT_ADDRESS_PICK,
	ACT_ADDRESS_MOVE,
} ACTIONTYPE;// action type


typedef enum{
	ST_BROWSE,
	ST_CROSS,
	ST_PATH,
	ST_BS,
	ST_TRAFFIC,
	ST_ADDRESS,
	ST_STREET,
}SELTOOL;

typedef enum{
	ET_NULL,
	ET_CROSS,
	ET_BS,
	ET_PATH,
	ET_ADDRESS,
}ELETYPE;		//element type

typedef struct _eleinfo{
	ELETYPE eleType;
	int		index;
}ELEINFO;

typedef struct _crossinfo{
	char name[20];	//cross name ,can be empty
	POINT pos;
}CROSSINFO;

typedef struct _trafficrouteinfo{
	char  name[10];			//traffic route name
	BYTE  type;				//traffic route type
	int	  nStations;		//station and cross number
	ELEINFO *pEI;			//element info
}TRAFFICROUTEINFO;

typedef struct _streetinfo{
	char name[50];			//street name
	int	 nPathes;			//path number
	int	 *pPathID;			//path array
}STREETINFO;

typedef struct _addressinfo{
	char name[50];			//address name
	BYTE type;				//address type
	POINT	pos;			//address position
}ADDRESSINFO;

typedef enum elestate{
	ES_NORMAL,			//normal
	ES_FOCUS,			//focus
	ES_SELECTED,		//selected
}ELESTATE;	//element state

class CSTMEditorDoc : public CDocument
{
protected: // create from serialization only
	CSTMEditorDoc();
	DECLARE_DYNCREATE(CSTMEditorDoc)

// Attributes
public:
	CString m_Name,m_Author,m_Memory,m_bkfilename;
	int		m_Width,m_Height;//
	int		m_Scale;//比例尺
	CPicture	m_Picture;

	ACTIONTYPE	m_activeType;	//action type
	ELEINFO	m_focusEI;	//focus info
	ELEINFO	m_preFocusEI;	//pre focus info
	SELTOOL		m_selTool;		//selected tool
	CArray<ELEINFO,ELEINFO&>m_arrSel;	//select element array

	CArray<CROSSINFO,CROSSINFO&> m_arrCross;
	CArray<BSINFO,BSINFO&> m_arrBS;
	CArray<PATHINFO,PATHINFO&>	m_arrPath;
	CArray<TRAFFICROUTEINFO,TRAFFICROUTEINFO&>	m_arrTR;	//traffic route
	CArray<STREETINFO,STREETINFO&> m_arrStreet;		//street
	CArray<ADDRESSINFO,ADDRESSINFO&> m_arrAddress;	//address
// Operations
public:
	BOOL m_bViewBK,m_bViewCross,m_bViewPath,m_bViewBS,m_bViewAddress;
	RECT CalcCrossRect(POINT pt);
// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CSTMEditorDoc)
	public:
	virtual BOOL OnNewDocument();
	virtual void Serialize(CArchive& ar);
	virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
	//}}AFX_VIRTUAL

// Implementation
public:
	void AddCrossToPath(int index,CROSSINFO ci);
	void MoveAddress(int index,POINT pt);
	BOOL IsPathInTrafficRoute(PATHINFO pi,TRAFFICROUTEINFO tri);
	void RemoveStreet(int index);
	void RemoveAddress(CRgn &effectrgn,int index);
	void CalcAddressRgn(CRgn &addressrgn,int index);
	RECT CalcAddressRect(POINT pt);
	int AddAddress(ADDRESSINFO ai);
	int AddStreet(STREETINFO si);
	void Deselect();
	void SelectAddress(int index);
	void SelectStreet(int index);
	void SelectTraffic(int index);
	void SelectBS(int index);
	void SelectPath(int index);
	void SelectCross(int index);
	void AddSelectedElement(ELEINFO *pEI,int count);
	void RemoveTR(int index);
	int AddTR(TRAFFICROUTEINFO tri);
	BOOL IsPathExisted(PATHINFO pi);
	void SelectElements(ELEINFO *ei,int count);
	ELESTATE GetElementState(ELEINFO ei);
	//get the single element range
	void CalcCrossRgn(CRgn &crossrgn, int index);
	void CalcPathRgn(CRgn &pathrgn, int index);
	void CalcBSRgn(CRgn &bsrgn,int index);
	
	//get the element's range and the elements ranges which attach to 
	void GetCrossEffectRgn(CRgn &effectrgn,int index);
	void GetPathEffectRgn(CRgn& effectrgn,int index);

	BOOL CanHilite(ELETYPE et);
	RECT CalcBSRect(POINT pt);
	BOOL m_bFocusChanged;

	int AddBS(BSINFO bsi);
	int AddPath(PATHINFO pi);
	int  AddCross(CROSSINFO ci);

	BOOL GetFocusInfo(POINT pt);

	void MoveBS(int index,POINT newPt);
	void MoveCross(int index,POINT newPos);

	void RemoveBS(CRgn &effectrgn,int index);
	void RemovePath(CRgn &effectrgn,int index);
	void RemoveCross(CRgn &effectrgn,int index);
	virtual ~CSTMEditorDoc();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:

private:
	BOOL FindMaxSeg(int path_id,TRAFFICROUTEINFO tri,int &begin_index,int &end_index);
	void ClearDataBuffer();
	void RemoveStreetInfo();
	void RemoveTrafficRouteInfo();
	void AddRgn(CRgn &rgnSrc,const CRgn &rgnAdd);
// Generated message map functions
protected:
	//{{AFX_MSG(CSTMEditorDoc)
	afx_msg void OnMapProp();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STMEDITORDOC_H__43BA84C5_065B_4184_8905_D5805629F048__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -