dwg图纸的预览功能

来源:互联网 发布:linux u盘安装 编辑:程序博客网 时间:2024/04/30 11:05
最近在做dwg图纸的预览功能,学习了一下前辈的代码,这里小结一下,希望能给大家帮助。

1、自定义控件实现的功能及控件的建立

     自定义浏览DWG控件的功能主要实现在自定义控件上预览显示DWG中的图形并实现图形的滚轮缩放、中键平移及左键框选放大功能。自定义控件继承于CStatic类。还需要ZRX GS类库中的ZcGsView 实现图形系统中的视图,用来绘制图形的区域、ZcGsDevice 实现图形系统中的设备驱动,ZcGsModel 用来控制dwg文件的实体对象交互 三个类。


//头文件如下#pragma once #include "acgi.h" #include <math.h> #include "AcGsManager.h" #include "acgs.h" #include "zgs.h" #include "aced.h" #include "dbapserv.h" #include "dbsymtb.h" ////////////////////////////////////////////////////////////////////////////                h文件////////////////////////////////////////////////////////////////////////// // 预览控件类class CGsPreviewCtrl : public CStatic { DECLARE_DYNAMIC(CGsPreviewCtrl) // 支持该类动态创建的宏public: CGsPreviewCtrl() : CStatic(),    m_pDevice(NULL){ }  virtual ~CGsPreviewCtrl(){    clearAll();     // 类析构时要对设备和驱动进行释放} void clearAll();     // 释放 m_pManager、m_pDevice、m_pView、m_pGhostModelvoid init(HMODULE hRes);     // 初始化CStatic控件void ZoomAll(); // 全图放大AcGsView* view(){ return m_pView;} // 返回 view AcGsModel* model(){ return m_pModel;} // 返回 modelAcGsDevice* device(){ return m_pDevice; } // 返回 devicebool GetActiveViewPortInfo(ads_real &height, ads_real &width, AcGePoint3d &target, AcGeVector3d &viewDir, ads_real &viewTwist, bool getViewCenter);  // 获取视口参数protected: DECLARE_MESSAGE_MAP() public: HCURSOR m_hCrossCursor; // 切换十字交叉鼠标指针HCURSOR m_hPanCursor; // 切换平移鼠标指针AcGsDevice *m_pDevice; AcGsModel *m_pGhostModel; bool m_bPanning;// 平移功能 开关bool m_cpScale; // 框选放大 开关ZcGePoint3d m_cpMinPt;// 框选最小点 ZcGePoint3d m_cpMaxPt;// 框选最大点 static CPoint m_StartPt; // 记录鼠标起始点afx_msg void OnMouseMove(UINT nFlags, CPoint point);  // 鼠标移动消息afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);  // 滚轮消息afx_msg void OnPaint();  // 重绘afx_msg void OnMButtonDown(UINT nFlags, CPoint point); afx_msg void OnMButtonUp(UINT nFlags, CPoint point); void OnLButtonDown(UINT nFlags, CPoint point); // 这两个不是消息事件void OnLButtonUp(UINT nFlags, CPoint point);  // 通过消息预处理重新设置 鼠标点击事件virtual BOOL PreTranslateMessage(MSG* pMsg); // 实现消息预处理 处理左键点击是的焦点转换和坐标转换static AcGsManager* m_pManager;  static AcGsClassFactory* m_pFactory; static AcGsModel* m_pModel; static AcGsView *m_pView; static void initGs(); // 初始化GS环境static void removeGs();  // 卸载 GS环境static CPoint getStartPoint(); static void setStartPoint(CPoint startPoint);   // 为了矩形放大 int RectZoomSwitch;//矩形放大开关 CPoint m_PointOrigin; // DC 矩形框起始点数据CPoint m_PointOld; // DC 矩形框中指点数据float m_Width, m_Height; // CStatic 宽 高 用于计算矩形框缩放比例ads_real heightOri, widthOri, viewTwistOri;  // 原始窗口参数储存 用于双击中间还原AcGePoint3d positionOri;  // 原始窗口参数储存 用于双击中间还原 AcGeVector3d upVectorOri;  // 原始窗口参数储存 用于双击中间还原 AcGePoint3d targetOri;  // 原始窗口参数储存 用于双击中间还原 // bool FirstDraw; // 是否首次运行 首次运行记录视图原始参数};

//头文件如下#pragma once #include "acgi.h" #include <math.h> #include "AcGsManager.h" #include "acgs.h" #include "zgs.h" #include "aced.h" #include "dbapserv.h" #include "dbsymtb.h" ////////////////////////////////////////////////////////////////////////////                h文件////////////////////////////////////////////////////////////////////////// // 预览控件类class CGsPreviewCtrl : public CStatic { DECLARE_DYNAMIC(CGsPreviewCtrl) // 支持该类动态创建的宏public: CGsPreviewCtrl() : CStatic(),    m_pDevice(NULL){ }  virtual ~CGsPreviewCtrl(){    clearAll();     // 类析构时要对设备和驱动进行释放} void clearAll();     // 释放 m_pManager、m_pDevice、m_pView、m_pGhostModelvoid init(HMODULE hRes);     // 初始化CStatic控件void ZoomAll(); // 全图放大AcGsView* view(){ return m_pView;} // 返回 view AcGsModel* model(){ return m_pModel;} // 返回 modelAcGsDevice* device(){ return m_pDevice; } // 返回 devicebool GetActiveViewPortInfo(ads_real &height, ads_real &width, AcGePoint3d &target, AcGeVector3d &viewDir, ads_real &viewTwist, bool getViewCenter);  // 获取视口参数protected: DECLARE_MESSAGE_MAP() public: HCURSOR m_hCrossCursor; // 切换十字交叉鼠标指针HCURSOR m_hPanCursor; // 切换平移鼠标指针AcGsDevice *m_pDevice; AcGsModel *m_pGhostModel; bool m_bPanning;// 平移功能 开关bool m_cpScale; // 框选放大 开关ZcGePoint3d m_cpMinPt;// 框选最小点 ZcGePoint3d m_cpMaxPt;// 框选最大点 static CPoint m_StartPt; // 记录鼠标起始点afx_msg void OnMouseMove(UINT nFlags, CPoint point);  // 鼠标移动消息afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);  // 滚轮消息afx_msg void OnPaint();  // 重绘afx_msg void OnMButtonDown(UINT nFlags, CPoint point); afx_msg void OnMButtonUp(UINT nFlags, CPoint point); void OnLButtonDown(UINT nFlags, CPoint point); // 这两个不是消息事件void OnLButtonUp(UINT nFlags, CPoint point);  // 通过消息预处理重新设置 鼠标点击事件virtual BOOL PreTranslateMessage(MSG* pMsg); // 实现消息预处理 处理左键点击是的焦点转换和坐标转换static AcGsManager* m_pManager;  static AcGsClassFactory* m_pFactory; static AcGsModel* m_pModel; static AcGsView *m_pView; static void initGs(); // 初始化GS环境static void removeGs();  // 卸载 GS环境static CPoint getStartPoint(); static void setStartPoint(CPoint startPoint);   // 为了矩形放大 int RectZoomSwitch;//矩形放大开关 CPoint m_PointOrigin; // DC 矩形框起始点数据CPoint m_PointOld; // DC 矩形框中指点数据float m_Width, m_Height; // CStatic 宽 高 用于计算矩形框缩放比例ads_real heightOri, widthOri, viewTwistOri;  // 原始窗口参数储存 用于双击中间还原AcGePoint3d positionOri;  // 原始窗口参数储存 用于双击中间还原 AcGeVector3d upVectorOri;  // 原始窗口参数储存 用于双击中间还原 AcGePoint3d targetOri;  // 原始窗口参数储存 用于双击中间还原 // bool FirstDraw; // 是否首次运行 首次运行记录视图原始参数};


0 0
原创粉丝点击