参考文章: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事件。

  1. //Read and view CAD file 读和显示CAD文件
  2. private Matrix4D modelTransform = Matrix4D.Identity;
  3. private GDIGraphics3D gdiGraphics3D;
  4. private DxfModel model;//定义DxfModel对象
  5. private Bounds3D bounds;
  6. private string filename;
  7. //计算GDIGraphics3D的属性To2DTransform
  8. private void CalculateTo2DTransform()
  9. {
  10. if (bounds != null)
  11. {
  12. //计算将CAD文件放入显示矩阵中需要的缩放比例变换
  13. Matrix4D to2DTransform = DxfUtil.GetScaleTransform(
  14. bounds.Corner1,
  15. bounds.Corner2,
  16. bounds.Center,
  17. new Point3D(0d, this.xtraTabPage3.Height, 0d),
  18. new Point3D(this.xtraTabPage3.Width, 0d, 0d),
  19. new Point3D(this.xtraTabPage3.Width / 2, this.xtraTabPage3.Height / 2, 0d)
  20. );
  21. gdiGraphics3D.To2DTransform = to2DTransform * modelTransform;
  22. }
  23. }
  24. //打开CAD文件
  25. private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
  26. {
  27. //选取要打开的CAD文件
  28. OpenFileDialog dialog = new OpenFileDialog();
  29. dialog.Filter = "AutoCad files (*.dwg, *.dxf)|*.dxf;*.dwg";
  30. if (dialog.ShowDialog() == DialogResult.OK)
  31. {
  32. filename = dialog.FileName;
  33. }
  34. if (!string.IsNullOrEmpty(filename))
  35. {
  36. try
  37. {
  38. //通过文件扩展名判断CAD文件是dwg格式还是dxf格式
  39. string extension = Path.GetExtension(filename);
  40. if (string.Compare(extension, ".dwg", true) == 0)
  41. model = DwgReader.Read(filename);
  42. else
  43. model = DxfReader.Read(filename);
  44. //将控件的标签添加上文件名
  45. this.xtraTabPage3.Text = "二维仿真(" + Path.GetFileName(filename) + ")";
  46. //设置控件背景为黑色
  47. this.xtraTabPage3.BackColor = System.Drawing.Color.Black;
  48. //使用GDIGraphics3D绘制CAD文件的方法
  49. //创建中间可绘制对象
  50. gdiGraphics3D.CreateDrawables(model);
  51. //获得bounding box
  52. bounds = new Bounds3D();
  53. gdiGraphics3D.BoundingBox(bounds, modelTransform);
  54. //计算GDIGraphics3D的属性To2DTransform
  55. CalculateTo2DTransform();
  56. //响应控件的Paint事件,画CAD文件
  57. }
  58. catch (Exception ex)
  59. {
  60. MessageBox.Show("文件有错!请用AutoCad打开,通过“文件-核查”尝试修复。错误信息:" + ex.Message);
  61. }
  62. }
  63. }
  64. //xtraTabPage3控件的Paint事件,画CAD文件
  65. private void xtraTabPage3_Paint(object sender, PaintEventArgs e)
  66. {
  67. gdiGraphics3D.Draw(e.Graphics, this.xtraTabPage3.ClientRectangle);
  68. }
  69. //使绘制的CAD文件适应屏幕
  70. private void xtraTabPage3_Resize(object sender, EventArgs e)
  71. {
  72. base.OnResize(e);
  73. CalculateTo2DTransform();
  74. this.xtraTabPage3.Invalidate();
  75. }

http://blog.csdn.net/zjzytnn/article/details/53708655

使用CadLib实现CAD(dxf、dwg格式)文件的读取和显示 【转】的更多相关文章

  1. AltiumDesigner导入AutoCAD文件DXF,DWG格式

    最近有个朋友给了个AutoCAD的文件,需要我画个板子,结构什么的参见AutoCAD的文件,百度了下,得知protel是可以导入AutoCAD的DXF,DWG格式的文件的,那么AltiumDesign ...

  2. 快速加载DXF、DWG格式文件控件ABViewer

    ABViewer是一种高品质,低成本,高效率的多功能设计及工程文档管理应用程序. ABViewer为您提供专业的cad文件浏览和编辑工具. 支持多种格式,如:DWG格式, DXF, DWF, Hewl ...

  3. [PCB设计] 2、畸形PCB板子的制作核心——AD14导入dwg格式文件的方法

    本文参考园友:The Zone of up.Craftor http://www.cnblogs.com/craftor/archive/2012/06/28/2567259.html 硬件工程师在做 ...

  4. texi格式文件的读取

    使用texi2html可以将texi格式的文件转换成html格式的文件. sudo apt-get install texi2html 在对应目录下 texi2html filename.texi 或 ...

  5. BMP文件的读取与显示

    有三个函数能够完毕这一功能 1.BitBlt    BitBlt 用于从原设备中复制位图到目标设备 void CMFCApplication1View::OnDraw(CDC* pDC) { CMFC ...

  6. java代码-----实现有键盘获得的字符串存储在文件中,并从文件中读取后显示在屏幕上

    总结: 没体会到 package com.a.b; import java.io.*; public class tsetOut { public static void main(String[] ...

  7. CAD图DWG解析WebGIS可视化技术分析总结

    背景 AutoCAD是国际上著名的二维和三维CAD设计软件,用于二维绘图.详细绘制.设计文档和基本三维设计.现已经成为国际上广为流行的绘图工具..dwg文件格式成为二维绘图的事实标准格式. 但由于Au ...

  8. dwg格式用什么打开

    dwg文件怎么打开?dwg格式用什么打开?如何打开dwg文件?今天小编在这里推荐几款控件可以实现打开预览编辑DWG格式文件的目的. CADViewX是一款强大的CAD文件以及图片浏览库,在不需要其他三 ...

  9. Dicom格式文件解析器

    转自:http://www.cnblogs.com/assassinx/archive/2013/01/09/dicomViewer.html Dicom全称是医学数字图像与通讯,这里讲的暂不涉及通讯 ...

随机推荐

  1. intellij自动生成java代码注释(java文件注释和方法注释)

    1定义java文件头部的注释 2给java类中的方法添加上注释 2.1第一步勾选Enable Live  Templates 2.2第二步新建一个Group 2.3第三步新建一个Template 2. ...

  2. NumPy 新知

    import numpy as np a = np.arange(5) a array([0, 1, 2, 3, 4]) 增加一个维度: b = a[:, None] c = a[:,np.newax ...

  3. ls 大全

    ls命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linu ...

  4. Number lengths FZU - 1050

    N! (N factorial) can be quite irritating and difficult to compute for large values of N. So instead ...

  5. FastReport.Net使用:[21]表格(Table)控件

    对表格控件的一些常用操作 合并单元格:选择需要合并的单元格(按住Shitf多选),然后在右键菜单中选择[合并单元格].         2.删除/插入行 鼠标移到在行头,当鼠标状态变为向右的箭头时点击 ...

  6. 【BZOJ 4171】 4171: Rhl的游戏 (高斯消元)

    4171: Rhl的游戏 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 74  Solved: 33[Submit][Status][Discuss] ...

  7. 51Nod1802 左偏树计数

    题目大意 求$n$个点的无标号左偏树个数 既然你都点进来了,那么估计也是奔着题解来的.... 废话少说.... 首先,左偏树有这么一些性质 设最右链长度为$r[p]$ 1.左偏树的子树仍然是左偏树 2 ...

  8. [CODE FESTIVAL 2018]Sushi Restaurant

    题意:有$n$个人,对每个人,他有$p_i$的概率饥饿值为$x_i$($1\leq i\leq m$),你现在要做$n$盘寿司,每盘寿司有一定的数量,当这$n$个人的饥饿值确定后他们会自己选择最优的( ...

  9. [NC13C]形态形成场/[Gym100430B]Divisible Substrings

    [NC13C]形态形成场/[Gym100430B]Divisible Substrings 题目大意: 有\(m(m\le26)\)个字符串替换式\(S_i(|S_i\le100|)\),表示某个大写 ...

  10. jsp和servlet有哪些相同点和不同点,它们之间的联系是什么?

    1.jsp经编译后就变成了servlet(jsp本质就是servlet,jvm只能识别java的类,不能识别jsp代码,web容器将jsp的代码编译成jvm能够识别的java类) 2.jsp更擅长表现 ...