微信公众号推了好几篇使用AnyCAD显示三维模型的文章。本文学习参考文献并测试AnyCAD三维控件AnyCAD Rapid SDK的使用方式。
关于AnyCAD的介绍详见参考文献3,在VS2019中新建Winform项目(参考文献1中使用的是VS2022+.NET6,本文中使用的是VS2019+.NET5,也能正常运行),然后通过NuGet安装AnyCAD Rapid SDK(最新的稳定版本为2022.2.2),如下图所示。
参考文献1中的介绍其实来源于参考文献2,也即AnyCAD官网帮助文档中的内容(后面发现参考文献1的作者是anycad,是一家的)。本文介绍的内容主要来源于参考文献1和2,测试的内容包括动态构造三维形状(参考文献1)和加载并显示本地stp文件(参考文献2)。
首先是动态构造三维模型,代码来源于参考文献1,主要是实时构造并显示一个球体。该代码简单易懂,也确实像参考文献1介绍的那样——不到10行代码。最关键的代码如下所示:通过RenderControl类配置在哪个控件中显示三维模型(只要是control类的子类都可以,参考文献1中使用的是splitcontainer的panel,测试时改为picturebox控件也能正常运行。)。通过ShapeBuilder构造球体(指定球心和半径,除了球体,还可以调用ShapeBuilder的其它函数构造其它形状),最后通过调用RenderControl.ShowShape函数显示模型。其效果如下图所示:
//设置三维模型显示控件,
mRenderView = new RenderControl(this.pictureBox1);
var shape = ShapeBuilder.MakeSphere(new GPnt(0, 0, 0), 10);
mRenderView.ShowShape(shape, ColorTable.PaleVioletRed);
虽然AnyCAD Rapid SDK控件可以在NuGet中免费安装使用,但会在显示界面中出现二维码让人购买控件(二维码的位置随机)。
为确保AnyCAD正常释放资源,还需要在项目的program的main函数中增加下列代码:
AnyCAD.Foundation.GlobalInstance.Initialize();
//ApplicationConfiguration.Initialize(); 去掉本句代码也能正常运行程序,不报错
...
Application.Run(new frmMain());
...
AnyCAD.Foundation.GlobalInstance.Destroy();
接下来是加载并显示本地三维文件,从参考文献2中看到,anycad控件支持加载stp、step、igs、iges、obj、stl、3ds、glTF等格式的文件,本文中测试加载stp文件格式的文件。在网上找一份prt文件,并在NX中将其另存为stp文件。然后调用下列代码加载并显示(代码来自参考文献2)。
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "STEP (*.stp)|*.stp";
if (dialog.ShowDialog() != DialogResult.OK)
return;
var shape = StepIO.Open(dialog.FileName);
if (shape == null)
return;
mRenderView.ShowShape(shape, new Vector3(0.8f));
显示效果如下所示,还需说明的是:1)滚动鼠标滚轮可以缩放模型;2)按住鼠标滚轮可以平移模型;3)安装鼠标右键可以旋转模型;4)鼠标点击模型区域右上角的方块可以切换视角。
参考文献:
[1]https://www.cnblogs.com/anycad/p/anycad-winforms-net6-starter.html
[2]http://www.anycad.cn/guide/guide-30-data-exchange.html
[3]http://www.anycad.cn/
[4]https://gitee.com/anycad/anycad.rapid.net.sample