AutoCAD.NET API2018二次开发第十八章

三维线段,用户坐标系,多边形网格,多面网格,长方体,楔形实体,旋转长方体,长方体与椭圆体的交集运算,裁切长方体

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//运行时
using Autodesk.AutoCAD.Runtime;
//数据库
using Autodesk.AutoCAD.DatabaseServices;
//应用程序服务
using Autodesk.AutoCAD.ApplicationServices;
//几何
using Autodesk.AutoCAD.Geometry;


namespace AutoDemo22
{
    public class Class1
    {
        //三维线段
        [CommandMethod("SWXD")]
        public static void SWXD()
        {
            //当前文档
            Document doc = Application.DocumentManager.MdiActiveDocument;
            //当前数据库
            Database db = doc.Database;
            //开始事务
            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                //声明块表
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                //声明块表记录
                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                //二维线
                Polyline Pl = new Polyline();
                //第一个节点
                Pl.AddVertexAt(0, new Point2d(0, 0), 0, 0, 0);
                //第二个节点
                Pl.AddVertexAt(1, new Point2d(5, 0), 0, 0, 0);
                //第三个节点
                Pl.AddVertexAt(2, new Point2d(5, 5), 0, 0, 0);

                Pl.ColorIndex = 1;

                btr.AppendEntity(Pl);
                tran.AddNewlyCreatedDBObject(Pl, true);

                Polyline3d pl3d = new Polyline3d();

                pl3d.ColorIndex = 5;

                btr.AppendEntity(pl3d);

                tran.AddNewlyCreatedDBObject(pl3d, true);

                Point3dCollection p3dC = new Point3dCollection();

                p3dC.Add(new Point3d(5, 5, 0));

                p3dC.Add(new Point3d(0, 5, 5));

                p3dC.Add(new Point3d(0, 0, 5));

                p3dC.Add(new Point3d(0, 0, 0));

                foreach (Point3d p in p3dC)
                {
                    PolylineVertex3d pv = new PolylineVertex3d(p);

                    pl3d.AppendVertex(pv);

                    tran.AddNewlyCreatedDBObject(pv, true);
                }

                tran.Commit();

                
            }
        }

        //用户坐标系
        [CommandMethod("YHZBX")]
        public static void YHZBX()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                UcsTable ucs = tran.GetObject(db.UcsTableId, OpenMode.ForRead) as UcsTable;

                UcsTableRecord ucsr;

                if (ucs.Has("用户坐标系") == false)
                {
                    ucsr = new UcsTableRecord();
                    tran.GetObject(db.UcsTableId, OpenMode.ForWrite);

                    ucsr.Name = "用户坐标系";

                    ucs.Add(ucsr);

                    tran.AddNewlyCreatedDBObject(ucsr, true);

                }
                else
                {
                    ucsr = tran.GetObject(ucs["用户坐标系"], OpenMode.ForWrite) as UcsTableRecord;
                }

                ucsr.Origin = new Point3d(5, 5, 0);

                ucsr.XAxis = new Vector3d(1, 0, 0);

                ucsr.YAxis = new Vector3d(0, 1, 0);

                ViewportTableRecord vprt = tran.GetObject(doc.Editor.ActiveViewportId, OpenMode.ForRead) as ViewportTableRecord;

                vprt.IconAtOrigin = true;

                vprt.IconEnabled = true;

                vprt.SetUcs(ucsr.Id);

                doc.Editor.UpdateTiledViewportsFromDatabase();

                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                Circle c = new Circle();

                c.Center = new Point3d(0, 0, 0);

                c.Radius = 1;

                c.ColorIndex = 1;

                btr.AppendEntity(c);

                tran.AddNewlyCreatedDBObject(c, true);

                Circle c2 = c.Clone() as Circle;

                c2.ColorIndex = 5;

                Matrix3d m3d = Matrix3d.AlignCoordinateSystem(Point3d.Origin, Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis,
                    vprt.Ucs.Origin, vprt.Ucs.Xaxis, vprt.Ucs.Yaxis, vprt.Ucs.Zaxis);

                c2.TransformBy(m3d);

                btr.AppendEntity(c2);

                tran.AddNewlyCreatedDBObject(c2, true);

                tran.Commit();
            }


        }


        //多边形网格
        [CommandMethod("DBXWG")]
        public static void DBXWG()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                PolygonMesh pm = new PolygonMesh();

                pm.MSize = 3;

                pm.NSize = 4;

                btr.AppendEntity(pm);

                tran.AddNewlyCreatedDBObject(pm, true);

                Point3dCollection p3dC = new Point3dCollection();

                p3dC.Add(new Point3d(0, 0, 0));
                p3dC.Add(new Point3d(5, 0, 5));
                p3dC.Add(new Point3d(10, 0, 0));
                p3dC.Add(new Point3d(15, 0, 5));

                p3dC.Add(new Point3d(0, 5, 0));
                p3dC.Add(new Point3d(5, 5, 5));
                p3dC.Add(new Point3d(10, 5, 0));
                p3dC.Add(new Point3d(15, 5, 5));

                p3dC.Add(new Point3d(0, 10, 0));
                p3dC.Add(new Point3d(5, 10, 5));
                p3dC.Add(new Point3d(10, 10, 0));
                p3dC.Add(new Point3d(15, 10, 5));

                foreach (Point3d p in p3dC)
                {
                    PolygonMeshVertex pmv = new PolygonMeshVertex(p);

                    pm.AppendVertex(pmv);

                    tran.AddNewlyCreatedDBObject(pmv, true);

                }

                tran.Commit();
            }



        }

        //多面网格
        [CommandMethod("DMWG")]
        public static void DMWG()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                PolyFaceMesh pfm = new PolyFaceMesh();

                btr.AppendEntity(pfm);

                tran.AddNewlyCreatedDBObject(pfm, true);

                Point3dCollection p3dC = new Point3dCollection();

                p3dC.Add(new Point3d(0, 0, 0));

                p3dC.Add(new Point3d(0, 5, 0));

                p3dC.Add(new Point3d(0, 10, 5));

                p3dC.Add(new Point3d(5, 0, 0));

                p3dC.Add(new Point3d(5, 5, 0));

                p3dC.Add(new Point3d(5, 10, 5));

                foreach (Point3d p in p3dC)
                {
                    PolyFaceMeshVertex pfmv = new PolyFaceMeshVertex(p);

                    pfm.AppendVertex(pfmv);

                    tran.AddNewlyCreatedDBObject(pfmv, true);

                }

                FaceRecord fr1 = new FaceRecord(1, 2, 5, 4);

                pfm.AppendFaceRecord(fr1);

                tran.AddNewlyCreatedDBObject(fr1, true);

                FaceRecord fr2 = new FaceRecord(2, 3, 6, 5);

                pfm.AppendFaceRecord(fr2);

                tran.AddNewlyCreatedDBObject(fr2, true);

                tran.Commit();


            }

        }

        //长方体
        [CommandMethod("CFT")]
        public static void CFT()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                Solid3d s3d = new Solid3d();

                s3d.CreateBox(10, 20, 40);

                Matrix3d m3d = Matrix3d.Displacement(new Point3d(5, 10, 20) - Point3d.Origin);

                s3d.TransformBy(m3d);

                btr.AppendEntity(s3d);

                tran.AddNewlyCreatedDBObject(s3d, true);

                tran.Commit();

            }

        }

        //楔形实体
        [CommandMethod("XXST")]
        public static void XXST()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                Solid3d s3d = new Solid3d();

                s3d.CreateWedge(10, 20, 40);

                Matrix3d ma3d = Matrix3d.Displacement(new Point3d(5, 10, 20) - Point3d.Origin);

                s3d.TransformBy(ma3d);

                btr.AppendEntity(s3d);

                tran.AddNewlyCreatedDBObject(s3d, true);

                tran.Commit();

            }


        }

        //旋转长方体
        [CommandMethod("XZST")]
        public static void XZST()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                Solid3d s3d = new Solid3d();

                s3d.CreateBox(10, 20, 40);

                Matrix3d m3d = Matrix3d.Displacement(new Point3d(5, 10, 20) - Point3d.Origin);

                s3d.TransformBy(m3d);

                btr.AppendEntity(s3d);

                tran.AddNewlyCreatedDBObject(s3d, true);

                Solid3d s3d2 = s3d.Clone() as Solid3d;

                s3d2.ColorIndex = 1;

                Matrix3d m = doc.Editor.CurrentUserCoordinateSystem;

                CoordinateSystem3d cs = m.CoordinateSystem3d;

                Matrix3d m3dx = Matrix3d.Rotation(3.14, cs.Zaxis, new Point3d(0, 0, 0));

                s3d2.TransformBy(m3dx);

                btr.AppendEntity(s3d2);

                tran.AddNewlyCreatedDBObject(s3d2, true);

                tran.Commit();



            }




        }

        //长方体与椭圆体的交集运算
        [CommandMethod("JSJJ")]
        public static void JSJJ()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                Solid3d s3d = new Solid3d();

                s3d.CreateBox(10, 20, 40);

                Matrix3d m3d = Matrix3d.Displacement(new Point3d(5, 10, 20) - Point3d.Origin);

                s3d.TransformBy(m3d);

                btr.AppendEntity(s3d);

                tran.AddNewlyCreatedDBObject(s3d, true);

                Solid3d s3d2 = new Solid3d();

                s3d2.CreateFrustum(20, 5, 10, 5);

                s3d2.ColorIndex = 5;

                btr.AppendEntity(s3d2);

                tran.AddNewlyCreatedDBObject(s3d2, true);

                Solid3d s3dc = s3d2.Clone() as Solid3d;

                if (s3dc.CheckInterference(s3d) == true)
                {
                    s3dc.BooleanOperation(BooleanOperationType.BoolIntersect, s3d.Clone() as Solid3d);

                    s3dc.ColorIndex = 1;


                }

                btr.AppendEntity(s3dc);

                tran.AddNewlyCreatedDBObject(s3dc, true);

                tran.Commit();




            }



        }

        //裁切长方体
        [CommandMethod("CQST")]

        public static void CQST()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = tran.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord btr = tran.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                Solid3d s3d = new Solid3d();

                s3d.CreateBox(10, 20, 40);

                Matrix3d m3d = Matrix3d.Displacement(new Point3d(5, 10, 20) - Point3d.Origin);

                s3d.TransformBy(m3d);

                btr.AppendEntity(s3d);

                tran.AddNewlyCreatedDBObject(s3d, true);

                Plane p = new Plane(new Point3d(5, 10, 20), Vector3d.XAxis, Vector3d.YAxis);

                Solid3d s3d2 = new Solid3d();

                s3d2 = s3d.Slice(p, true);

                s3d2.ColorIndex = 1;

                btr.AppendEntity(s3d2);

                tran.AddNewlyCreatedDBObject(s3d2, true);

                tran.Commit();

            }

        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AutoCAD .NET API(应用程序编程接口)是用于在AutoCAD软件中定制和扩展功能的编程工具。它提供了一组功能强大的类和方法,使开发人员能够通过编程方式访问和操作AutoCAD的各种对象和功能。 要下载AutoCAD .NET API,可以按照以下步骤进行操作: 1. 打开Autodesk官方网站,进入AutoCAD的下载页面。 2. 在页面上,找到AutoCAD .NET API的下载选项。通常可以在“附加工具”或“开发者工具”部分中找到。 3. 单击下载链接,选择适用于您的操作系统版本的AutoCAD .NET API软件包。 4. 点击下载按钮,等待下载完成。 在下载完成后,您可以按照以下步骤安装AutoCAD .NET API: 1. 打开下载文件的位置,双击运行安装程序。 2. 遵循安装程序的指示,选择您想要安装的文件夹和配置选项。 3. 完成安装后,您可以在指定的文件夹中找到安装文件和示例代码。 安装完成后,您可以开始使用AutoCAD .NET API来开发自定义功能。您可以使用.NET编程语言(如C#或VB.NET)来编写代码,并使用AutoCAD .NET API中的类和方法来访问和操作AutoCAD中的对象,如图形、图层、块等。您还可以创建自定义命令、工具栏、菜单和对话框,以及执行各种操作,如绘制、修改、查询和导出CAD数据。 总之,要下载AutoCAD .NET API,只需前往官方网站下载页面,并按照指示进行下载和安装即可。安装完成后,您可以使用AutoCAD .NET API进行自定义开发和定制AutoCAD软件的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值