【AutoCAD.NET】创建一个类库DLL文件(DotNetARX)写入一个工具类(Tools)以简化代码的编写

01.创建一个类库(名为DotNetARX.dll)引用所需CAD开发的dll,设置赋值本地为false;创建静态类和静态方法(不用实例化,直接通过类名进行调用);函数说明用///

(向当前模型空间中添加实体图元)代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
namespace DotNetARX
{
    public static class Tools
    {
        /// <summary>
        /// 将实体图元添加到模型空间
        /// </summary>
        /// <param name="ent"></param>实体图元
        /// <returns>返回添加到模型空间中的实体ObjectId</returns>
        public static ObjectId AddToModelSpace(Entity ent)
        {
            ObjectId entId;//用于返回添加到模型空间中的实体ObjectId
            //定义一个指向当前数据库的事务处理,以添加实体
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            Database db = acDoc.Database;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);//以读的方式打开块表
                //以写方式打开模型空间块表记录
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                entId = btr.AppendEntity(ent);//将图形对象的信息添加到块表记录中
                trans.AddNewlyCreatedDBObject(ent, true);//把对象添加到事务处理中
                trans.Commit();//提交事务处理
            }
            return entId;
        }
    }
}

02.使用静态类中的静态方法,下面是通过创建一条直线来示例:

先引用开发所需的CAD的dll文件设置复制本地为false;添加引用自己所创建的静态类库DotNetARX.dll;添加命名空间,采用类名.方法名的方式引用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Geometry;
using DotNetARX;//添加静态类的命名空间

namespace Test
{
    public static class class1
    {
        [CommandMethod("HLine")] //注册一个命令
        public static void HLine()
        {
            
            Line acline = new Line(new Point3d(0, 0, 0), new Point3d(10000, 1000, 0));
            Tools.AddToModelSpace(acline);//***引用静态类中的方法***
        }
    }
}

03.创建一个程序集,新建扩展方法,采用 [对象.方法]的模式调用

namespace DotNetARX
{
    public static class EntTools
    {
        /// <summary>
        /// 将实体图元添加到模型空间
        /// </summary>
        /// <param name="ent"></param>实体图元
        /// <returns>返回添加到模型空间中的实体ObjectId</returns>
        public static ObjectId AddToModelSpace(this Database db, Entity ent)
        {
            ObjectId entId;//用于返回添加到模型空间中的实体ObjectId
            //定义一个指向当前数据库的事务处理,以添加实体
            // Document acDoc = Application.DocumentManager.MdiActiveDocument;
            // Database db = acDoc.Database;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);//以读的方式打开块表
                //以写方式打开模型空间块表记录
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                entId = btr.AppendEntity(ent);//将图形对象的信息添加到块表记录中
                trans.AddNewlyCreatedDBObject(ent, true);//把对象添加到事务处理中
                trans.Commit();//提交事务处理
            }
            return entId;
        }
    }
}

04.调用03中的程序集内的方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using DotNetARX;//添加对程序集空间的引用

namespace testAddLine
{
    public class Class1
    {
        [CommandMethod("TestAddLine")]
        public void TestAddLine()
        {
            Point3d startPoint = new Point3d(0,0,0);
            Point3d endPoint = new Point3d(1000,1000,0);
            Line newLine = new Line(startPoint,endPoint);
            Database db = HostApplicationServices.WorkingDatabase;
            
            //调用程序集函数
            db.AddToModelSpace(newLine);
        }
    }
}

<<the end>>

原文地址:https://www.cnblogs.com/Helchan/p/4463956.html