C# + AnyCAD 实现三维模型展示

需求:三维模型展示

实现:考虑过CreoView 但去官网申请使用链接,久久没有收到回复,于是google一番,决定使用开源的AnyCad来实现

附官方链接:http://www.anycad.net/

GitHub链接:https://github.com/anycad/AnyCAD_Sample

AnyCAD 官方SDK下载:AnyCAD 官方SDK下载

1.准备引用

  • 去   AnyCAD 官方SDK下载 下载.net  SDK 包,解压后复制bin目录下所有DLL到你的项目对应目录

  • 添加引用,主演是前三个

  • 主要代码 FormMain.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using AnyCAD.Platform;

namespace AnyCAD.Basic
{
    public partial class FormMain : Form
    {
        // The global application object
        Platform.Application theApplication = new Platform.Application();
        // BREP tool to create geometries.
        BrepTools shapeMaker = new BrepTools();
        // Default 3d View
        Platform.View3d theView;


        public FormMain()
        {
            InitializeComponent();
            this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.OnMouseWheel);
        }

        private void FormMain_Load(object sender, EventArgs e)
        {
            // Initialize the Application.
            theApplication.Initialize();
            Size size = panel3d.Size;

            // Create the 3d View
            theView = theApplication.CreateView(panel3d.Handle.ToInt32(), size.Width, size.Height);

            theView.RequestDraw();

            this.timerDraw.Enabled = true;
        }
        private void FormMain_SizeChanged(object sender, EventArgs e)
        {
            Size size = panel3d.Size;
            if(theView != null)
                theView.OnSize(size.Width, size.Height);
        }
        private void panel3d_Paint(object sender, PaintEventArgs e)
        {
            if (theView == null)
                return;

            theView.Redraw();
        }

        private void timerDraw_Tick(object sender, EventArgs e)
        {
            theView.RequestDraw();
            theView.Redraw();
        }

        private SceneNode ShowTopoShape(TopoShape topoShape, int id)
        {
            // Add the TopoShape to Scene.
            TopoShapeConvert convertor = new TopoShapeConvert();
            SceneNode faceNode = convertor.ToFaceNode(topoShape, 0.5f);
            faceNode.SetId(id);
            theView.GetSceneManager().AddNode(faceNode);
            return faceNode;
        }

        private void ClearScene()
        {
            theView.GetSceneManager().ClearNodes();
        }

        private void sphereToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShape sphere = shapeMaker.MakeSphere(new Vector3(0, 0, 0), 40);
            ShowTopoShape(sphere, 100);
        }

        private void boxToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShape box = shapeMaker.MakeBox(new Vector3(40, -20, 0), new Vector3(0, 0, 1), new Vector3(30, 40, 60));
             
            SceneNode sceneNode = ShowTopoShape(box, 101);

            FaceStyle style = new FaceStyle();
            style.SetColor(new ColorValue(0.5f, 0.3f, 0, 1));
            sceneNode.SetFaceStyle(style);
        }

        private void cylinderToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShape cylinder = shapeMaker.MakeCylinder(new Vector3(80, 0, 0), new Vector3(0, 0, 1), 20, 100, 315);
            SceneNode sceneNode = ShowTopoShape(cylinder, 102);
            FaceStyle style = new FaceStyle();
            style.SetColor(new ColorValue(0.1f, 0.3f, 0.8f, 1));
            sceneNode.SetFaceStyle(style);
        }

        private void coneToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShape cylinder = shapeMaker.MakeCone(new Vector3(120, 0, 0), new Vector3(0, 0, 1), 20, 100, 40, 315);
            ShowTopoShape(cylinder, 103);
        }

        private void extrudeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int size = 20;
            // Create the outline edge
            TopoShape arc = shapeMaker.MakeArc3Pts(new Vector3(-size, 0, 0), new Vector3(size, 0, 0), new Vector3(0, size, 0));
            TopoShape line1 = shapeMaker.MakeLine(new Vector3(-size, -size, 0), new Vector3(-size, 0, 0));
            TopoShape line2 = shapeMaker.MakeLine(new Vector3(size, -size, 0), new Vector3(size, 0, 0));
            TopoShape line3 = shapeMaker.MakeLine(new Vector3(-size, -size, 0), new Vector3(size, -size, 0));

            TopoShapeGroup shapeGroup = new TopoShapeGroup();
            shapeGroup.Add(line1);
            shapeGroup.Add(arc);
            shapeGroup.Add(line2);
            shapeGroup.Add(line3);

            TopoShape wire = shapeMaker.MakeWire(shapeGroup);
            TopoShape face = shapeMaker.MakeFace(wire);

            // Extrude
            TopoShape extrude = shapeMaker.Extrude(face, 100, new Vector3(0, 0, 1));
            ShowTopoShape(extrude, 104);

            // Check find....
            SceneNode findNode = theView.GetSceneManager().FindNode(104);
            theView.GetSceneManager().SelectNode(findNode);
        }

        private void revoleToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int size = 10;
            // Create the outline edge
            TopoShape arc = shapeMaker.MakeArc3Pts(new Vector3(-size, 0, 0), new Vector3(size, 0, 0), new Vector3(0, size, 0));
            TopoShape line1 = shapeMaker.MakeLine(new Vector3(-size, -size, 0), new Vector3(-size, 0, 0));
            TopoShape line2 = shapeMaker.MakeLine(new Vector3(size, -size, 0), new Vector3(size, 0, 0));
            TopoShape line3 = shapeMaker.MakeLine(new Vector3(-size, -size, 0), new Vector3(size, -size, 0));

            TopoShapeGroup shapeGroup = new TopoShapeGroup();
            shapeGroup.Add(line1);
            shapeGroup.Add(arc);
            shapeGroup.Add(line2);
            shapeGroup.Add(line3);

            TopoShape wire = shapeMaker.MakeWire(shapeGroup);

            TopoShape revole = shapeMaker.Revol(wire, new Vector3(size * 3, 0, 0), new Vector3(0, 1, 0), 145);

            ShowTopoShape(revole, 105);
        }

        private void clearToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ClearScene();
        }

        private void sTLToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "STL (*.stl)|*.stl|All Files(*.*)|*.*";

            if (DialogResult.OK == dlg.ShowDialog())
            {
                TopoShape shape =  shapeMaker.LoadFile(dlg.FileName);
                if( shape != null)
                    ShowTopoShape(shape, 1000);

            }
        }

        private void Pane3d_MouseDown(object sender, MouseEventArgs e)
        {
            ViewUtility.OnMouseDownEvent(theView, e);
        }

        private void Pane3d_MouseMove(object sender, MouseEventArgs e)
        {
            ViewUtility.OnMouseMoveEvent(theView, e);
        }

        private void Pane3d_MouseUp(object sender, MouseEventArgs e)
        {
            ViewUtility.OnMouseUpEvent(theView, e);
        }
        private void OnMouseWheel(object sender, MouseEventArgs e)
        {
            ViewUtility.OnMouseWheelEvent(theView, e);
        }


    }
}
  • 实际效果

  • AnyCAD 支持STL、STEP、SKP格式文件
  • 完整代码下载:完整代码
  • 7
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
c 的作用有很多,其中一些包括: 1. C 是一种编程语言,被广泛用于开发各种应用程序和系统。它是一种面向过程的语言,具有高效性、灵活性和可移植性的特点。许多著名的软件和操作系统,如UNIX、Linux和Windows等,都是用C语言编写的。 2. C 也是一种底层的语言,可以直接操作计算机硬件。通过使用C语言,开发人员可以更加精确地控制计算机的资源,如内存、寄存器和硬件接口等。这使得C语言成为编写嵌入式系统、驱动程序和操作系统等底层软件的首选语言。 3. C 语言具有良好的可扩展性和可重用性,可以通过编写函数库和模块的方式来提高代码的复用性。这种特性使得C语言适用于大型项目的开发,同时也方便了开发者之间的协作。 4. C 语言的语法简洁明了,易于学习和理解。它的基本语法结构清晰,包括数据类型、控制流语句和函数定义等。这使得初学者可以相对容易地掌握C语言,并且能够快速编写出简单的程序。 5. C 语言的标准库提供了丰富的函数和工具,可用于实现各种常见的操作和算法。这些函数包括字符串处理、文件操作和数学计算等。开发人员可以使用这些标准库函数来简化程序的开发过程,减少冗余代码的编写。 总而言之,C 语言是一种强大而灵活的编程语言,适用于广泛的应用领域。无论是开发底层的系统软件还是大型的应用程序,C语言都是一种非常有用的工具。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值