#ifndef AFX_CFOLDLAYPINDLG_H_ #define AFX_CFOLDLAYPINDLG_H_ #if _MSC_VER > 1000 #pragma once #endif //_MSC_VER > 1000 #include "resource.h" #include "afxwin.h" #include "ThunderXData.h" #include "DrawThunder2D.h" #include "ThunderDbReactor.h" #include "FoldPinRelation.h" #include "UIIListCtrl.h" #define GRADENUM 4 #define COLWIDTH 60 #define SPNMIN 1 #define SPNMAX 1000 #define ERR_VALUE 256 // CFoldLayPinDlg 对话框 class CFoldLayPinDlg : public CDialog { DECLARE_DYNAMIC(CFoldLayPinDlg) public: // 构造 CFoldLayPinDlg(const AcDbObjectId& entId = AcDbObjectId::kNull,BOOL bIsModel = FALSE,CWnd* pParent = NULL); virtual ~CFoldLayPinDlg(); enum UpdateStyle { UpdateNone = 0, // 不做更新 UpdateAllTH = 1, // 更新所有字高 UpdateCurTH = 2, // 更新当前字高 UpdateAllSc = 3, // 更新所有图块系数 UpdateCurSc = 4, // 更新当前图块系数 UpdateAllTHAndSc = 5, // 更新所有 字高 和 图块系数 UpdateCurTHAndSc = 6, // 更新当前字高 和 图块系数 }; // 对话框数据 //{{AFX_DATA(CFoldLayPinDlg) enum { IDD = IDD_FOLD_LAYPIN }; CButton m_wndRadShowType; //2D 2D类型切换 CEdit m_edtProHt; CString m_csRadius; // "滚球"半径 ? "折线" CString m_csGroupNo; // 组号 CSpinButtonCtrl m_wndSpnGroupNo; // 组号微调控件 CButton m_wndBtnGroupExp; //?? 组号解释 CEdit m_wndEdtNumber; // 编号控件 CSpinButtonCtrl m_wndSpnNumber; // 编号微调控件 CString m_csTxtHight; // 编号字高 CSpinButtonCtrl m_wndSpnHT; // 编号字高微调控件 CString m_csBlkScale; // 图块系数 CString m_csPinHeight; // 针高 CEdit m_wndEdtHeight; // 针高控件 CButton m_wndBtnTipExp; // 针高解释 CUIIListCtrl m_LstData; // 保护高度表格控件 CButton m_wndBtnUpdate; // 更新 CButton m_wndBtnCancel; // 取消 CStatic m_wndStcNumCue; // 静态文本控件 UpdateStyle m_eUs; // 类型更新 CButton m_wndChkHillSile; // 支持山地坡地计算 2012/3/21 //}}AFX_DATA // 重写 //{{AFX_VIRTUAL(CFoldLayPinDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); virtual void PostNcDestroy(); //}}AFX_VIRTUAL protected: // 消息映射 //{{AFX_MSG(CFoldLayPinDlg) virtual BOOL OnInitDialog(); afx_msg void OnClose(); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg void OnBtnUpdate(); afx_msg void OnBtnCancel(); afx_msg void OnChangeEditNum(); afx_msg void OnLayer2d(); afx_msg void OnLayer3d(); afx_msg void OnThunderHeightTip(); afx_msg void OnDestroy(); afx_msg void OnChangeGroupNo(); afx_msg void OnGroupExplain(); LONG_PTR OnAcadKeepFocus(UINT_PTR, LONG_PTR); afx_msg void OnBnClickedChkHillHillside(); afx_msg void OnAddHeight(); afx_msg void OnRemoveHeight(); //}}AFX_MSG DECLARE_MESSAGE_MAP() public: // 对话框的非模式形式 BOOL DoModeless(); // 添加扩展数据 BOOL SetCurrentExData(const AcDbObjectId& idEnt); // 读取扩展数据 BOOL GetCurrentExData(const AcDbObjectId& idEnt); // 插入避雷针 BOOL InsertFoldThunder(AcDbObjectId& idEnt,const AcGePoint3d& ptIns); // 设置绘画指针 void SetThunderDraw2d(CDrawThunderTools* pThundDraw); // 更新字体高度 和 图块系数 void UpdateTHAndBkSc(UpdateStyle us); // 得到所有避雷针图块 void GetAllInsert(AcDbObjectIdArray& arcId); // 得到指定块参照的属性字的内容 void GetBlkAttrText(AcDbObjectId oid,LPCTSTR pszTag,CString& strBlkTest); // 得到指定块参照的属性字的插入点 void GetBlkAttrPos(AcDbObjectId oid,LPCTSTR pszTag,AcGePoint3d& ptPos); // 更新指定避雷器的字体高度 如果 IsUpdataAll 为 TRUE 更新全部,为 FALSE 更新当前 void UpdateTextHeight(BOOL IsUpdataAll = TRUE); // 修改扩展数据-字体高度 void ModifyTHChanged(const AcDbObjectIdArray& arcId); // 修改扩展数据- 图块系数 void ModifyBlkScaleChanged(const AcDbObjectIdArray& arcId); // 更新指定避雷器缩放比例 如果 IsUpdataAll 为 TRUE 更新全部,为 FALSE 更新当前 void UpdateBlkScale(BOOL IsUpdataAll = TRUE); // 设置指定块参照,指定Tag 的属性字 位置 Acad::ErrorStatus SetAttrPos(AcDbBlockReference* pRef,LPCTSTR pszTag,const AcGePoint3d& pt); void UpdateThunderByProtectHeight(); double GetThunderHeight() const; // 是否响应动态更新 BOOL IsDynamicUpdate() const; //读写设置 void UpdateDlgData(BOOL ReadOrWrite); // 获取数据 BOOL GetDlgData(BOOL bIsUpdate = FALSE); //高亮保护圆 void HighlightSubEnt(double dProheight); void UnHighlightSubEnt(); void SetDbReactorPtr(CThunderDbReactor* pRector); void GetThunderProHeight(AcGeDoubleArray& arPro); double GetThunderRadius() const; void GetCurrentData(CStringArray& arData); void SetBlkName(const CString& sBlkName); //获取图块系数 double GetBlkScale(); //获取组号 CString GetGroupNo(); //获取编号 CString GetNo(); void SetNo(LPCTSTR pszNo); //获取针高 CString GetPinHeight(); //获取字高 double GetTextHeight(); //获取保护高度 void GetDlgProHT(AcGeDoubleArray& arProHTs); private: // 初始化模式对话框 void InitModalDlg(); // 初始化非模式对话框 void InitModalessDlg(); // 显示或隐藏控件 void DisplayOrHideBtn(BOOL bIsHide = FALSE); // 编号错误提示 void PostErrorToCue(CString& strError); // 将圆和避雷针生成组并添加到有名对象字典的组字典中 AcDbObjectId AddCurGroup(const AcDbObjectIdArray& arIds, LPCTSTR pszGroupName); // 避雷针保护高度 BOOL GetProtectHeightFromReg(CStringArray& arProHeight); BOOL SetProtectHeightToReg(const CStringArray& arProHeight); BOOL GetProtectHeightFromObj(const AcDbObjectId& idThunder, CStringArray& arProHeight); BOOL SetProtectHeightToObj(LPCTSTR pszGNo, const CStringArray& arProHeight); BOOL SplitValue(LPCTSTR pszSrc, LPCTSTR pszSplitCh, CStringArray& arValue); BOOL SplitString(CString& sSrc, LPCTSTR pszSplitCh, CString& sValue); CString ConvertToCString(const CStringArray& arValue, LPCTSTR pszSplitCh); CString TrimDoubleString(LPCTSTR pszSrc); BOOL AssertProtectHeight(BOOL bBoxTip = TRUE); AcGePoint3d GetThunderInsertPosition(const AcDbObjectId& id); void SaveDlgData(); void ReadDlgData(); private: AcDbObjectId m_idThunder; // 避雷针ID BOOL m_bIsModel; // 模式显示或者非模式显示 BOOL m_bTipChange; // 提示内容是否改变,用于更改字体颜色 BOOL m_bValid; CDrawThunderTools* m_pDrawThunder; CThunderDbReactor* m_pReactor; CStringArray m_arsXData; // 扩展数据 AcGeDoubleArray m_arProHeight; // 保护高度 CBitmap m_bitTip; AcDbObjectIdArray m_arHlEnt; // 用于高亮显示实体 CString m_sBlkName; //避雷针图块名称 }; #endif // AFX_CFOLDLAYPINDLG_H_