使用CadLib实现CAD(dxf、dwg格式)文件的读取和显示 【转】
参考文章:CadLib 3.5 documentationhttps://www.woutware.com/doc/cadlib3.5/Index.aspx
读取:定义DxfModel类型的变量model,使用DxfReader或DwgReader的Read(String)读取dxf或dwg格式的CAD文件filename。
显示:使用GIDGraphics3D类来显示CAD文件,基本步骤:
1、使用CreateDrawables(DxfModel)创建中间可绘制对象(点/线/折线)。
2、使用BoundingBox(Bounds3D)方法获取bounding box。
3、使用GetScaleTransform(Point3D, Point3D, Point3D, Point3D, Point3D, Point3D)计算将绘图拟合到显示矩形中所需的缩放变换,使用To2Dtransform属性设置结果。(写一个函数CalculateTo2DTransform)
4、使用Draw(Graphics, Rectangle)绘制中间可绘制对象。
注意:需要重写控件的Resize和Paint事件。
- //Read and view CAD file 读和显示CAD文件
- private Matrix4D modelTransform = Matrix4D.Identity;
- private GDIGraphics3D gdiGraphics3D;
- private DxfModel model;//定义DxfModel对象
- private Bounds3D bounds;
- private string filename;
- //计算GDIGraphics3D的属性To2DTransform
- private void CalculateTo2DTransform()
- {
- if (bounds != null)
- {
- //计算将CAD文件放入显示矩阵中需要的缩放比例变换
- Matrix4D to2DTransform = DxfUtil.GetScaleTransform(
- bounds.Corner1,
- bounds.Corner2,
- bounds.Center,
- new Point3D(0d, this.xtraTabPage3.Height, 0d),
- new Point3D(this.xtraTabPage3.Width, 0d, 0d),
- new Point3D(this.xtraTabPage3.Width / 2, this.xtraTabPage3.Height / 2, 0d)
- );
- gdiGraphics3D.To2DTransform = to2DTransform * modelTransform;
- }
- }
- //打开CAD文件
- private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
- {
- //选取要打开的CAD文件
- OpenFileDialog dialog = new OpenFileDialog();
- dialog.Filter = "AutoCad files (*.dwg, *.dxf)|*.dxf;*.dwg";
- if (dialog.ShowDialog() == DialogResult.OK)
- {
- filename = dialog.FileName;
- }
- if (!string.IsNullOrEmpty(filename))
- {
- try
- {
- //通过文件扩展名判断CAD文件是dwg格式还是dxf格式
- string extension = Path.GetExtension(filename);
- if (string.Compare(extension, ".dwg", true) == 0)
- model = DwgReader.Read(filename);
- else
- model = DxfReader.Read(filename);
- //将控件的标签添加上文件名
- this.xtraTabPage3.Text = "二维仿真(" + Path.GetFileName(filename) + ")";
- //设置控件背景为黑色
- this.xtraTabPage3.BackColor = System.Drawing.Color.Black;
- //使用GDIGraphics3D绘制CAD文件的方法
- //创建中间可绘制对象
- gdiGraphics3D.CreateDrawables(model);
- //获得bounding box
- bounds = new Bounds3D();
- gdiGraphics3D.BoundingBox(bounds, modelTransform);
- //计算GDIGraphics3D的属性To2DTransform
- CalculateTo2DTransform();
- //响应控件的Paint事件,画CAD文件
- }
- catch (Exception ex)
- {
- MessageBox.Show("文件有错!请用AutoCad打开,通过“文件-核查”尝试修复。错误信息:" + ex.Message);
- }
- }
- }
- //xtraTabPage3控件的Paint事件,画CAD文件
- private void xtraTabPage3_Paint(object sender, PaintEventArgs e)
- {
- gdiGraphics3D.Draw(e.Graphics, this.xtraTabPage3.ClientRectangle);
- }
- //使绘制的CAD文件适应屏幕
- private void xtraTabPage3_Resize(object sender, EventArgs e)
- {
- base.OnResize(e);
- CalculateTo2DTransform();
- this.xtraTabPage3.Invalidate();
- }
http://blog.csdn.net/zjzytnn/article/details/53708655
使用CadLib实现CAD(dxf、dwg格式)文件的读取和显示 【转】的更多相关文章
- AltiumDesigner导入AutoCAD文件DXF,DWG格式
最近有个朋友给了个AutoCAD的文件,需要我画个板子,结构什么的参见AutoCAD的文件,百度了下,得知protel是可以导入AutoCAD的DXF,DWG格式的文件的,那么AltiumDesign ...
- 快速加载DXF、DWG格式文件控件ABViewer
ABViewer是一种高品质,低成本,高效率的多功能设计及工程文档管理应用程序. ABViewer为您提供专业的cad文件浏览和编辑工具. 支持多种格式,如:DWG格式, DXF, DWF, Hewl ...
- [PCB设计] 2、畸形PCB板子的制作核心——AD14导入dwg格式文件的方法
本文参考园友:The Zone of up.Craftor http://www.cnblogs.com/craftor/archive/2012/06/28/2567259.html 硬件工程师在做 ...
- texi格式文件的读取
使用texi2html可以将texi格式的文件转换成html格式的文件. sudo apt-get install texi2html 在对应目录下 texi2html filename.texi 或 ...
- BMP文件的读取与显示
有三个函数能够完毕这一功能 1.BitBlt BitBlt 用于从原设备中复制位图到目标设备 void CMFCApplication1View::OnDraw(CDC* pDC) { CMFC ...
- java代码-----实现有键盘获得的字符串存储在文件中,并从文件中读取后显示在屏幕上
总结: 没体会到 package com.a.b; import java.io.*; public class tsetOut { public static void main(String[] ...
- CAD图DWG解析WebGIS可视化技术分析总结
背景 AutoCAD是国际上著名的二维和三维CAD设计软件,用于二维绘图.详细绘制.设计文档和基本三维设计.现已经成为国际上广为流行的绘图工具..dwg文件格式成为二维绘图的事实标准格式. 但由于Au ...
- dwg格式用什么打开
dwg文件怎么打开?dwg格式用什么打开?如何打开dwg文件?今天小编在这里推荐几款控件可以实现打开预览编辑DWG格式文件的目的. CADViewX是一款强大的CAD文件以及图片浏览库,在不需要其他三 ...
- Dicom格式文件解析器
转自:http://www.cnblogs.com/assassinx/archive/2013/01/09/dicomViewer.html Dicom全称是医学数字图像与通讯,这里讲的暂不涉及通讯 ...
随机推荐
- 【LOJ】#2350. 「JOI 2017/2018 决赛」月票购买
题解 首先求一个最短路图出来,最短路图就是这条边在最短路上就保留,否则就不保留,注意最短路图是一个有向图,一条边被保留的条件是 dis(S,u) + val(u,v) = dis(v,T)我们需要求两 ...
- jenkins pipelines 简介
1. 简介:A pipeline就是软件和质量保证进程中的一部分中的自动化连续操作.它可以看成是一连串的脚本. 操作组:就是把一系统的操作可以合成一个个的步骤,如果一个步骤失败,那么后续步骤便不会执行 ...
- 微信公共服务平台开发(.Net的实现)1 认证“成为开发者”
http://www.cnblogs.com/freeliver54/p/3725979.html http://www.it165.net/pro/html/201402/9459.html 这些代 ...
- Django+Nginx+uwsgi搭建自己的博客(五)
在上一篇博文中,向大家介绍了Users App和Index的前端部分的实现,以及前端与Django的通信部分.至此,我们的博客已经具备一个简单的雏形,可以将其部署在本地的服务器上了.目前较为流行的we ...
- java抽象类、多态、接口
抽象类 抽象类的产生 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体. 但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但 ...
- React Native 系列(三)
前言 本系列是基于React Native版本号0.44.3写的,相信大家看了本系列前面两篇文章之后,对于React Native的代码应该能看懂一点点了吧.本篇文章将带着大家来认识一下React N ...
- Redis学习篇(五)之Set类型及其操作
SADD 作用:向集合中添加元素 语法:SADD key menber [, ...] 添加重复的元素会返回0,失败 SMEMBERS 作用:返回指定集合中的元素 语法: SMEMBERS key S ...
- [GCJ2017R2]Fresh Chocolate
题目大意: 有n个团和很多盒糖,每个团中人数不一定相同,每盒糖中都有p颗糖. 现在要给每个团发糖,要求每个人都要发到糖,只有一盒糖发完后才能发下一盒糖. 发糖的顺序可以任意安排,问经过合理安排后,最多 ...
- PHP -- 类和对象基础入门
本文目录: 创建简单类和对象 继承 抽象类 接口 构造方法 析构函数 1. 创建简单类 创建一个People的类,在这里有四个要点说明一下: 第一个是在PHP中,访问属性 ...
- 安装myeclipse的常见问题
1.破解myeclipse网站: https://jingyan.baidu.com/article/acf728fd49519ff8e410a361.html