设为首页 收藏本站
查看: 1611|回复: 0

[经验分享] 基于ANYCAD的DXF文件读取与转换

[复制链接]

尚未签到

发表于 2017-7-5 12:25:17 | 显示全部楼层 |阅读模式
  写这篇文章的目的是我这段时间关于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文件复制到你的项目中。
                                      DSC0000.png
然后添加USING,如下图:
                                                 DSC0001.png
下面是全部的代码:



  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 }
具体运行效果:
                                                   DSC0002.png
  
  希望我的这些东西可以帮到你哪怕一点,我也是很开心的!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-390867-1-1.html 上篇帖子: 几个三角公式的直观几何解释 下篇帖子: exchange online禁止用户通过OWA修改密码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表