你的位置:首页 > ASP.net教程

[ASP.net教程]基于ANYCAD的DXF文件读取与转换

     写这篇文章的目的是我这段时间关于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中,所以首先得下载ANYCAD的SDK,但是由于版权问题,只有试用期,过后得购买,学生有特殊照顾,这里就不详细说啦。

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后(注:需要注意VS和SDK的版本),第一步是添加引用,这样才能够使用封装的函数。最重要的是把添加的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       else145       {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的客服大神确实很好,不怕麻烦,我有亲身经历。