最近在做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_pGhostModel
void init(HMODULE hRes);     // 初始化CStatic控件void ZoomAll(); // 全图放大
AcGsView* view(){ return m_pView;} // 返回 view
AcGsModel* model(){ return m_pModel;} // 返回 model
AcGsDevice* device(){ return m_pDevice; } // 返回 device
bool 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_pGhostModel
void init(HMODULE hRes);     // 初始化CStatic控件void ZoomAll(); // 全图放大
AcGsView* view(){ return m_pView;} // 返回 view
AcGsModel* model(){ return m_pModel;} // 返回 model
AcGsDevice* device(){ return m_pDevice; } // 返回 device
bool 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; // 是否首次运行 首次运行记录视图原始参数
};

dwg图纸的预览功能相关推荐

  1. alert()的功能_前端实现简单的图片上传小图预览功能

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  2. 智能媒体管理产品文档转换/预览功能介绍(4)--快速搭建

    摘要: 智能媒体管理提供了 Cloud Native 架构的文档转换/预览服务,本文介绍快速搭建的示例,让您用 DIY 的体验方式实现文档预览功能. 一.导语 智能媒体管理 提供了 Cloud Nat ...

  3. window下实现在线预览功能

    window下实现在线预览功能 最近用到文档在线预览功能,之前没接触过,一切从零开始,整了一段时间终于实现,现在把方法分享给大家! 一.主要思路 先将其他格式的文档(office文档.txt.图片等等 ...

  4. vue+vant使用图片预览功能ImagePreview的问题

    如果您搜到这篇文章的话,那员外估计您遇到跟我一样的问题了,即在打开图片预览功能后,如果不关闭预览的图片,同时改变路由的话,会发现即使路由改变了,预览的图片还在文档的最顶层显示,如图: 着实让员外百思不 ...

  5. Java实现图片裁剪预览功能

    Java实现图片裁剪预览功能 在项目中,我们需要做些类似头像上传,图片裁剪的功能,ok看下面文章! 需要插件:jQuery Jcrop 后端代码: package org.csg.upload;imp ...

  6. uniapp实现图片预览功能

    点击图片实现预览功能如下: <!-- 轮播 --> <view class="ms_shops"><swiper class="ms_swi ...

  7. 原生js实现ajax的文件异步提交功能、图片预览功能.实例

    采用html5使得选择图片改变时,预览框中图片随之改变.input文件选择框美化.原生js完成文件异步提交 效果图: 代码如下,可直接复制并保存为html文件打开查看效果 <html> & ...

  8. Java实现在线预览功能

    java实现在线预览功能,需要用到  jacob.dll jacob.jar   预览pdf所需js  pdfobject.min.js 将上传文件转为pdf保存. <divclass=&quo ...

  9. 利用jquery.form.js实现Ajax无刷新图片上传及预览功能

    某些时候当我们做登记页面的时候可能需要上传图片,并实现即时预览的功能. 如果只是预览而不上传,可以使用ImagePreview来实现,方便简单.如果需要上传,那么你也可以使用uploadify无刷新上 ...

最新文章

  1. Android View的加载过程
  2. redis哨兵集群数据迁移_redis集群数据迁移—redis-migrate-tool神器
  3. mysql 分钟_mysql分钟到小时和分钟
  4. 安全设置不许可html,快捷指令提示安全性设置不允许不信任怎么办_安全性设置不允许不信任解决办法_咖绿茵手游站...
  5. 动软Model 模板 生成可空类型字段
  6. 对现代软件工程开发看法
  7. java中远程连接忽略证书_忽略Java中的自签名证书
  8. Unix Tutorial Four
  9. 基于JAVA+SpringBoot+Mybatis+MYSQL的物业管理系统
  10. react之组件异步加载
  11. 随笔之生成简单的验证码
  12. cocos2dx lua代码和图片资源加密和解密
  13. ofd发票怎么打开?ofd格式发票转换pdf格式发票的方法
  14. .xmind用什么软件打开_xps用什么软件打开(xps文件打开方法)
  15. 4K显示器和防蓝光眼镜膜
  16. 前后端分离电商B2C模式之_后台_购物车
  17. mysql 提示The maximum column size is 767 bytes.
  18. Android中的视频压缩包含图片压缩工具silicompressor
  19. 【第八章】 C语言之牛客网力扣刷题笔记 【点进来保证让知识充实你一整天】
  20. MATLAB教学_06进阶绘图

热门文章

  1. java continue语句_Java continue 语句
  2. 平板酷派Ultranote X15概述
  3. 麒麟V10SP1的国产化Qt适配
  4. redis--客户端
  5. 应用程序错误电脑黑屏_Win10电脑老是遇到黑屏问题,学会这几招,彻底解决系统故障-win10开机黑屏...
  6. 子网掩码是干什么用的?
  7. 《CornerNet: Detecting Objects as Paired Keypoints》之 corner pooling 解读
  8. CAD中一个图形的多种画法
  9. 《三国演义》之人物出场统计
  10. 无人值守u盘安装linux,U盘无人值守安装Linux操作系统