码迷,mamicode.com
首页 > 其他好文 > 详细

基于ANYCAD的DXF文件读取与转换

时间:2016-07-01 13:35:41      阅读:712      评论:0      收藏:0      [点我收藏+]

标签:

     写这篇文章的目的是我这段时间关于ANYCAD的一些学习感悟,并且附上具体的操作,使新手少走一些弯路。

     本人是C#的新手,从来没接触过编程,暑期跟着老师做学习,第一个任务就是用C#打开DXF文件,我以为任务很简单,BUT 在网上搜索一大堆,都是没用的(对于我这个新手来讲),偶然一次看到一篇《基于AnyCAD.net 三维图形平台快速搭建DXF文件的读取、显示、转换成JPG, PNG,以及PDF》,了解了这个ANYCAD这个控件,但是这篇文章在我把代码输进去操作的时候发现对于我这个新手来说没太大用,只能说它给我打开了一个学习的大门。

     AnyCAD 三维图形控件(AnyCAD Graphics SDK)是专业的、综合的三维图形应用开发包,是一个基于 OpenCASCADE CAD平台, 可以用于开发二维/三维模型设计、计算机仿真、有限元前后处理等应用程序。按照功能模块,AnyCAD Graphics SDK 专业版包括几何造型、三维可视化和数据交换模 块,企业版在专业版的基础上增加数据管理模块。 AnyCAD Graphics SDK 拥有.Net C++两个版本,其中.Net 版本支持WinForm WPF界面框架;C++版本支持MFC/Qt/wxWidgets 等界面库。

     首先了解一下ANYCAD.SDK,这是一个动态链接库,举个例子,你要用到下边代码中的renderView,那你首先得对它定义才能使用,定义在哪呢?对,就在SDK中,所以首先得下载ANYCADSDK,但是由于版权问题,只有试用期,过后得购买,学生有特殊照顾,这里就不详细说啦。

19      public MainForm()
20         {
21            InitializeComponent();
22 
23            this.renderView = new AnyCAD.Presentation.RenderWindow3d();
24             this.renderView.Size = this.panel3d.ClientSize;
25            this.renderView.TabIndex = 1;
26             panel3d.Controls.Add(this.renderView);
27         }

        当你下载SDK后(注:需要注意VSSDK的版本),第一步是添加引用,这样才能够使用封装的函数。最重要的是把添加的SDK文件复制到你的项目中

                                   技术分享

然后添加USING,如下图:

                                                技术分享

下面是全部的代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 using AnyCAD.Platform;
 10 
 11 namespace DxfViewer
 12 {
 13     public partial class MainForm : Form
 14     {
 15         private AnyCAD.Presentation.RenderWindow3d renderView = null;
 16         private ElementId mBeginId = new ElementId();
 17         private ElementId mEndId = new ElementId();
 18 
 19         public MainForm()
 20         {
 21             InitializeComponent();
 22 
 23             this.renderView = new AnyCAD.Presentation.RenderWindow3d();
 24             this.renderView.Size = this.panel3d.ClientSize;
 25             this.renderView.TabIndex = 1;
 26             panel3d.Controls.Add(this.renderView);
 27         }
 28 
 29         private void MainForm_Load(object sender, EventArgs e)
 30         {
 31             renderView.ShowWorkingGrid(false);
 32             renderView.ExecuteCommand("ShadeWithEdgeMode");
 33             renderView.ShowCoordinateAxis(false);
 34 
 35             ColorValue clr = new ColorValue(33f / 255f, 40f / 255f, 48f / 255f, 1);
 36             renderView.SetBackgroundColor(clr, clr, clr);
 37 
 38             Renderer renderer = renderView.Renderer;
 39 
 40             // Customize the Axis
 41             ScreenWidget coodinateNode = new ScreenWidget();
 42             AxesWidget axesNode = new AxesWidget();
 43             axesNode.SetArrowText((int)EnumAxesDirection.Axes_Z, "");
 44             coodinateNode.SetNode(axesNode);
 45             coodinateNode.SetWidgetPosition(0);     
 46             renderer.SetCoordinateWidget(coodinateNode);
 47 
 48             // Set the fixed Top View
 49             renderer.SetStandardView(EnumStandardView.SV_Top);
 50             renderer.SetViewType(EnumStandardView.SV_Top);
 51 
 52             this.renderView.RequestDraw();
 53 
 54         }
 55 
 56         private void MainForm_Resize(object sender, EventArgs e)
 57         {
 58             if (renderView != null)
 59                 renderView.Size = this.panel3d.ClientSize;
 60         }
 61 
 62         private void openToolStripMenuItem_Click(object sender, EventArgs e)
 63         {
 64             OpenFileDialog dlg = new OpenFileDialog();
 65             dlg.Filter = "DXF (*.dxf)|*.dxf";
 66 
 67             if (DialogResult.OK == dlg.ShowDialog())
 68             {
 69                 AnyCAD.Exchange.DxfReader reader = new AnyCAD.Exchange.DxfReader();
 70                 renderView.ClearScene();
 71                 AnyCAD.Exchange.ShowShapeReaderContext context = new AnyCAD.Exchange.ShowShapeReaderContext(renderView.SceneManager);
 72                 context.NextShapeId = mBeginId;
 73                 if (reader.Read(dlg.FileName, context, false))
 74                 {
 75                     renderView.RequestDraw();
 76                     mEndId = context.NextShapeId;
 77                 }
 78 
 79             }
 80 
 81             renderView.View3d.FitAll();
 82         }
 83 
 84         private void pDFToolStripMenuItem_Click(object sender, EventArgs e)
 85         {
 86             SaveFileDialog dlg = new SaveFileDialog();
 87             dlg.Filter = "PDF (*.pdf)|*.pdf";
 88             if (DialogResult.OK == dlg.ShowDialog())
 89             {
 90                 renderView.Renderer.Print(dlg.FileName);
 91             }
 92 
 93         }
 94 
 95         private void imageToolStripMenuItem_Click(object sender, EventArgs e)
 96         {
 97             SaveFileDialog dlg = new SaveFileDialog();
 98             dlg.Filter = "Image File (*.jpg;*.png)|*.jpg;*.png";
 99             if (DialogResult.OK == dlg.ShowDialog())
100             {
101                 renderView.CaptureImage(dlg.FileName);
102             }
103         }
104 
105         private void dToolStripMenuItem_Click(object sender, EventArgs e)
106         {
107             renderView.ExecuteCommand("IsoView");
108             renderView.View3d.FitAll();
109         }
110 
111         private void exportIgesToolStripMenuItem_Click(object sender, EventArgs e)
112         {
113             SceneManager sceneManager = renderView.SceneManager;
114 
115 
116 
117             TopoShapeGroup group = new TopoShapeGroup();
118             for (ElementId ii = mBeginId; ii < mEndId; ++ii)
119             {
120                 SceneNode node = sceneManager.FindNode(ii);
121                 if (node != null)
122                 {
123                     TopoShape shape = GlobalInstance.TopoShapeConvert.ToTopoShape(node);
124                     if (shape != null)
125                     {
126                         Matrix4 trf = GlobalInstance.MatrixBuilder.MakeRotation(90, Vector3.UNIT_X);
127                         shape = GlobalInstance.BrepTools.Transform(shape, trf);
128                         group.Add(shape);
129                     }
130                 }
131             }
132 
133             if (group.Size() > 0)
134             {
135                 SaveFileDialog dlg = new SaveFileDialog();
136                 dlg.Filter = "IGES File (*.igs;*.iges)|*.igs;*.iges";
137                 if (DialogResult.OK != dlg.ShowDialog())
138                 {
139                     return;
140                 }
141                 TopoDataExchangeIges igsWriter = new TopoDataExchangeIges();
142                 igsWriter.Write(group, new AnyCAD.Platform.Path(dlg.FileName));
143             }
144             else
145             {
146                 MessageBox.Show("No shape to save!");
147             }
148 
149         }
150 
151         private void dToolStripMenuItem1_Click(object sender, EventArgs e)
152         {
153             renderView.ExecuteCommand("TopView");
154             this.renderView.RequestDraw();
155         }
156 
157     }
158 }

具体运行效果:

                                                  技术分享

 

技术分享

    希望我的这些东西可以帮到你哪怕一点,我也是很开心的!另外,ANYCAD的客服大神确实很好,不怕麻烦,我有亲身经历。

基于ANYCAD的DXF文件读取与转换

标签:

原文地址:http://www.cnblogs.com/liuzetao/p/5632676.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!