261 lines
7.1 KiB
C++
261 lines
7.1 KiB
C++
#pragma once
|
|||
|
|
|
||
|
|
#include "resource.h"
|
||
|
|
#include <adui.h>
|
||
|
|
#include <acui.h>
|
||
|
|
#include "afxwin.h"
|
||
|
|
#include "GsPreviewCtrl.h"
|
||
|
|
#include "XMLDOMFile.h"
|
||
|
|
#include <functional>
|
||
|
|
#include <vector>
|
||
|
|
#include <set>
|
||
|
|
|
||
|
|
|
||
|
|
namespace DRAWFRAME
|
||
|
|
{
|
||
|
|
struct STPage
|
||
|
|
{
|
||
|
|
CString _pagename, _grpname;
|
||
|
|
int _width, _length;
|
||
|
|
STPage(LPCTSTR gname, LPCTSTR pname, int w, int l): _pagename(pname), _grpname(gname), _width(w), _length(l){}
|
||
|
|
STPage(): _pagename(_T("")), _grpname(_T("")), _width(0), _length(0){};
|
||
|
|
};
|
||
|
|
|
||
|
|
typedef std::vector < STPage > PAGES ;
|
||
|
|
|
||
|
|
struct STPageGrp
|
||
|
|
{
|
||
|
|
CString _grpname;
|
||
|
|
int _idx, _width;
|
||
|
|
PAGES _pages;
|
||
|
|
STPageGrp(int idx, LPCTSTR name, int width, const PAGES & pages) : _width(width), _grpname(name), _idx(idx), _pages(pages){}
|
||
|
|
STPageGrp() : _grpname(_T("")), _idx(-1), _pages(0), _width(0){}
|
||
|
|
struct _comparePageGrp : public std::binary_function < const STPageGrp&, const STPageGrp&, bool >
|
||
|
|
{
|
||
|
|
bool operator () (const STPageGrp & group1, const STPageGrp & group2) const { return group1._idx < group2._idx; }
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
typedef std::set < STPageGrp, STPageGrp::_comparePageGrp> PAGEGRPS;
|
||
|
|
|
||
|
|
void InitPageGrp();
|
||
|
|
void default_init_func();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
// sg add 100907,保存专版定制软件中,各个子院或所的信息
|
||
|
|
class CSpecialtyOffice
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
CSpecialtyOffice();
|
||
|
|
CSpecialtyOffice(const CSpecialtyOffice& srcSpecialtyOffice);
|
||
|
|
|
||
|
|
public:
|
||
|
|
// 通长标题栏与图幅对应关系信息
|
||
|
|
typedef struct longTitleInfo
|
||
|
|
{
|
||
|
|
// 0表示横式图框,对应竖栏;1表示立式图框,对应横栏
|
||
|
|
int nRow;
|
||
|
|
|
||
|
|
// 图幅
|
||
|
|
CString csBreadth;
|
||
|
|
|
||
|
|
// 通长标题栏图块编号
|
||
|
|
CString csLongTitle;
|
||
|
|
} SLongTitle;
|
||
|
|
|
||
|
|
|
||
|
|
// 对中标志相关信息
|
||
|
|
typedef struct midAlignBlockInfo
|
||
|
|
{
|
||
|
|
// 是否有对中标志,0为否,1为是
|
||
|
|
int m_nHasMidBlock;
|
||
|
|
|
||
|
|
// DWB名
|
||
|
|
CString csDwbName;
|
||
|
|
|
||
|
|
// 图框上部、下部的对中标志,对应的图块名
|
||
|
|
CString csUpDownBlock;
|
||
|
|
|
||
|
|
// 图框左部的对中标志,对应的图块名
|
||
|
|
CString csLeftBlock;
|
||
|
|
|
||
|
|
// 图框右部的对中标志,对应的图块名
|
||
|
|
CString csRightBlock;
|
||
|
|
} SMidBlock;
|
||
|
|
|
||
|
|
public:
|
||
|
|
// 下属设计院名或设计所名称
|
||
|
|
CString m_csName;
|
||
|
|
|
||
|
|
// 保存通长标题栏的图库名,所有图幅和样式下的通长标题栏,肯定都放到一个TK里
|
||
|
|
CString m_csTkName;
|
||
|
|
// 各个图幅以及横式、立式样式下的通长标题栏图块名数组
|
||
|
|
CArray<SLongTitle, SLongTitle&> m_aryLongTitle;
|
||
|
|
|
||
|
|
// 各个位置下的对中标志图块名
|
||
|
|
SMidBlock m_sMidBlock;
|
||
|
|
|
||
|
|
public:
|
||
|
|
// 根据图幅和样式获得通长标题栏图块名
|
||
|
|
CString FindLongTitleBlkName(int nRow, int nBreadth);
|
||
|
|
|
||
|
|
// 判断是否有横栏
|
||
|
|
BOOL HasRANGEFrame();
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
// CDrawingFrameDlg 对话框
|
||
|
|
class CDrawingFrameDlg : public CAcUiDialog
|
||
|
|
{
|
||
|
|
DECLARE_DYNAMIC(CDrawingFrameDlg)
|
||
|
|
|
||
|
|
public:
|
||
|
|
CDrawingFrameDlg(CWnd* pParent = NULL);
|
||
|
|
virtual ~CDrawingFrameDlg();
|
||
|
|
|
||
|
|
// 对话框数据
|
||
|
|
enum { IDD = IDD_DRAWINGFRAME };
|
||
|
|
|
||
|
|
protected:
|
||
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
|
||
|
|
virtual BOOL OnInitDialog();
|
||
|
|
virtual void OnOK();
|
||
|
|
|
||
|
|
protected:
|
||
|
|
DECLARE_MESSAGE_MAP()
|
||
|
|
int m_iStandard;
|
||
|
|
int m_iRow;
|
||
|
|
int m_iLengthen;
|
||
|
|
int m_iCustomSize;
|
||
|
|
CString m_strLength;
|
||
|
|
CString m_strWidth;
|
||
|
|
CString m_strScale;
|
||
|
|
CComboBox m_colLenthen;
|
||
|
|
CComboBox m_colCustomSize;
|
||
|
|
BOOL m_bStandard;
|
||
|
|
BOOL m_bLong;
|
||
|
|
BOOL m_bTicket;
|
||
|
|
BOOL m_bPosition;
|
||
|
|
BOOL m_bAdjunct;
|
||
|
|
BOOL m_bDirect;
|
||
|
|
BOOL m_bSpace;
|
||
|
|
HICON m_hIcon;
|
||
|
|
|
||
|
|
// sg add 100907,与下属设计院名或设计所名称的下拉列表相对应
|
||
|
|
CComboBox m_cmbOffice;
|
||
|
|
|
||
|
|
bool m_bPreview; //add by whl
|
||
|
|
|
||
|
|
protected:
|
||
|
|
void ReadStoreValue();
|
||
|
|
void WriteStoreValue();
|
||
|
|
BOOL GetBlockName(XString &sBlockName);
|
||
|
|
void SetSizeEdit(int type, int curSel = 0);
|
||
|
|
void UpdateLengthen();
|
||
|
|
void UpdateStandard(BOOL bFlag = TRUE);
|
||
|
|
void UpdateSize(BOOL bSaveAndValidate = FALSE);
|
||
|
|
void UpdateTitle();
|
||
|
|
void UpdateSpace();
|
||
|
|
void UpdateDirect();
|
||
|
|
|
||
|
|
protected: // 下列函数,只用在专版软件中
|
||
|
|
// sg add 100907,通过tch.ini文件,判断当前软件是否是专版
|
||
|
|
bool IsSpecialtyVer();
|
||
|
|
|
||
|
|
// sg add 100907,解析TSpecialtyOffice.xml文件,初始化m_lstOfficeInfo列表
|
||
|
|
// 下面几个函数,主要是用于分散代码,对应解析对应部分的XML文件,都只在GetOfficeInfoFromXML函数中调用
|
||
|
|
bool GetOfficeInfoFromXML();
|
||
|
|
void GetLineWidthXML(const CXMLDOMNodePtr &pXMLChildNodePtr); // 图框线宽
|
||
|
|
void GetTicketXML(const CXMLDOMNodePtr &pXMLChildNodePtr); // 会签
|
||
|
|
void GetLongTitleXML(const CXMLDOMNodePtr &pXMLChildNodePtr, CSpecialtyOffice &info); // 通长标题栏
|
||
|
|
void GetMidBlockXML(const CXMLDOMNodePtr &pXMLChildNodePtr, CSpecialtyOffice &info); // 对中标志
|
||
|
|
|
||
|
|
// sg add 100908,根据下属院别的选择以及图幅,获得对应的“通长标题栏”图块名称
|
||
|
|
bool GetLongTitleBlkName();
|
||
|
|
|
||
|
|
// sg add 111102,根据选择的下属院别,获得对中标记图块名称
|
||
|
|
BOOL GetMidAlignBlock(XString &szUpDownBlock, XString &szLeftBlock, XString &szRightBlock);
|
||
|
|
|
||
|
|
public:
|
||
|
|
afx_msg void OnDataChangeAx();
|
||
|
|
afx_msg void OnDataChangeR();
|
||
|
|
afx_msg void OnCbnSelchangeComboLenthength();
|
||
|
|
afx_msg void OnCbnSelchangeComboCustomsize();
|
||
|
|
afx_msg void OnEnKillfocusEditLength();
|
||
|
|
afx_msg void OnEnKillfocusEditWidth();
|
||
|
|
afx_msg void OnEnChangeEditLength();
|
||
|
|
afx_msg void OnEnChangeEditWidth();
|
||
|
|
afx_msg void OnBnClickedCheckTitleStandard();
|
||
|
|
afx_msg void OnBnClickedCheckTitleLong();
|
||
|
|
afx_msg void OnBnClickedCheckTicket();
|
||
|
|
afx_msg void OnBnClickedCheckPosition();
|
||
|
|
afx_msg void OnBnClickedCheckAdjunct();
|
||
|
|
|
||
|
|
afx_msg void OnBnClickedButtonPickadjunct();
|
||
|
|
afx_msg void OnBnClickedButtonPickticket();
|
||
|
|
afx_msg void OnBnClickedButtonPicktitle();
|
||
|
|
afx_msg void OnBnClickedButtonPickdirect();
|
||
|
|
|
||
|
|
afx_msg void OnCbnKillfocusComboScale();
|
||
|
|
afx_msg void OnBnClickedCheckSpace();
|
||
|
|
afx_msg void OnBnClickedCheckDirect();
|
||
|
|
|
||
|
|
// sg add 100908,增加院别选择事件
|
||
|
|
afx_msg void OnCbnSelchangeComboOffice();
|
||
|
|
|
||
|
|
protected:
|
||
|
|
CGsPreviewCtrl m_PreviewCtrl;
|
||
|
|
AcDbDatabase m_PreviewDb;
|
||
|
|
AcDbObjectId m_idOldBlock;
|
||
|
|
|
||
|
|
XString m_strStandard;
|
||
|
|
XString m_strLong;
|
||
|
|
XString m_strTichet;
|
||
|
|
XString m_strAdjunct;
|
||
|
|
XString m_strDirect;
|
||
|
|
|
||
|
|
// sg add 100907,增加院别信息列表
|
||
|
|
TDPtrList<CSpecialtyOffice> m_lstOfficeInfo;
|
||
|
|
|
||
|
|
// sg add 100916,保存用户上次选择的院别
|
||
|
|
static int m_nLastOffice;
|
||
|
|
|
||
|
|
// sg add 111102,根据选择的院别,确定“立式”是否可以选择
|
||
|
|
BOOL m_bRANGE;
|
||
|
|
|
||
|
|
// sg add 111014,从XML中读取是否有会签栏,只有一个且不与用户交互,下属设计院必须统一
|
||
|
|
// m_bTicket默认值的备份,防止经过用户一系列操作后,会签栏不正确的有或者没有了
|
||
|
|
BOOL m_bDefaultTicket;
|
||
|
|
|
||
|
|
// wlw add 130314,从XML中读取是否有附件栏,只有一个且不与用户交互,下属设计院必须统一
|
||
|
|
// m_bAdjunct默认值的备份,防止经过用户一系列操作后,会签栏不正确的有或者没有了
|
||
|
|
BOOL m_bDefaultAdjunct;
|
||
|
|
|
||
|
|
// sg add 111021,在专版中增加图框的线宽可以定制的功能
|
||
|
|
// 该值只有1组,下属设计院必须统一
|
||
|
|
AcGeDoubleArray m_aryFrameWidth;
|
||
|
|
|
||
|
|
//wlw add 130314,从专版XML中读取图幅可选
|
||
|
|
BOOL m_bA0;
|
||
|
|
BOOL m_bA1;
|
||
|
|
BOOL m_bA2;
|
||
|
|
BOOL m_bA3;
|
||
|
|
BOOL m_bA4;
|
||
|
|
|
||
|
|
CString GetSizeDesc();//返回图幅描述字符串
|
||
|
|
void InsertFrame(AcDbBlockTableRecord *pBlockTabRecord, AcGePoint3d ptIns,
|
||
|
|
double &width, double &high);
|
||
|
|
void DrawFrame(AcDbBlockTableRecord *pBlockTabRecord, AcGePoint3d ptIns,
|
||
|
|
double &width, double &high, int flag = 1);
|
||
|
|
void DrawFrameBlock(AcGePoint3d ptIns,double &width, double &high);
|
||
|
|
void DrawInsertPoint(AcDbBlockTableRecord *pBlockTabRecord, AcGePoint3d ptIns);
|
||
|
|
void InsertBlock(AcDbBlockTableRecord *pBlockTabRecord, XString sBlockName,
|
||
|
|
AcGePoint3d ptIns, double angle, AcDbObjectId idLayer);
|
||
|
|
void GetBlockSize(XString sBlockName, double &width, double &high);
|
||
|
|
void UpdatePreview();
|
||
|
|
virtual BOOL DestroyWindow();
|
||
|
|
};
|
||
|
|
|