AutoCAD.NET API2018二次开发第一章

这篇博客介绍了如何使用.NETLOAD加载外部DLL,在AutoCAD中实现自定义命令,包括创建文字、显示对话框、查询数据库信息以及图层操作。内容涵盖了从插入文字、显示文件信息到遍历图层、添加和删除图层等具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境

1.需要安装vs2019或者其他版本
2.需要安装CAD2018

依赖

在这里插入图片描述

引入命令

NETLOAD 加载外部dll,然后输入你自定义的命令

测试代码

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;
namespace AutoDemo1
{
    public class Class1
    {
        [CommandMethod("MyAutoCad")]
        //CAD指令
        public void MyAutoCad()
        {
            //链接数据库
            Database acdb = Application.DocumentManager.MdiActiveDocument.Database;
            //开启事务
            using (Transaction acTran = acdb.TransactionManager.StartTransaction())
            {
                BlockTable acbt;
                acbt = acTran.GetObject(acdb.BlockTableId, OpenMode.ForRead) as BlockTable;
                //以写模式读取
                BlockTableRecord acBTR;
                acBTR = acTran.GetObject(acbt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;

                using (MText mText = new MText())
                {
                    mText.Location = new Autodesk.AutoCAD.Geometry.Point3d(0, 0, 0);
                    mText.Contents = "第一次测试";
                    acBTR.AppendEntity(mText);
                    acTran.AddNewlyCreatedDBObject(mText, true);
                    acTran.Commit();
                }

            }
        }
    }
}

提示框与查询db

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;

namespace AutoDemo2
{
    public class Class1
    {
        //弹出框
        [CommandMethod("FW")]
        public static void FW()
        {
            Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("这是弹出框!");
        }

        //访问数据库,文件路径
        [CommandMethod("FWDB")]
        public static void FWDB()
        {
            Document acDoc =  Application.DocumentManager.MdiActiveDocument;
            Database acDB = acDoc.Database;
            Application.ShowAlertDialog(acDB.Filename);
        }

        //从模型空间检索实体,文件中都有哪些实体
        [CommandMethod("JSST")]
        public static void JSST()
        {
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            Database acDB = acDoc.Database;

            using (Transaction acTran = acDB.TransactionManager.StartTransaction())
            {
                BlockTable acBT;
                acBT = acTran.GetObject(acDB.BlockTableId, OpenMode.ForRead) as BlockTable;

                BlockTableRecord acBTR;
                ObjectId ObjectId = acBT[BlockTableRecord.ModelSpace];
                acBTR = acTran.GetObject(ObjectId, OpenMode.ForRead) as BlockTableRecord;

                int cnt = 0;
                foreach ( ObjectId oi in acBTR)
                {
                    acDoc.Editor.WriteMessage("\n" + oi.ObjectClass.Name);
                    cnt = cnt + 1;
                }
                if (cnt == 0)
                {
                    acDoc.Editor.WriteMessage("文件中没有实体");
                }
                else
                {
                    acDoc.Editor.WriteMessage("\n" + "文件个体数目:" + cnt.ToString());
                }
            }

        }

    }
}


图层操作

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;

namespace AutoDemo3
{
    public class Class1
    {
        //访问图层表集合,输出图层集合
        [CommandMethod("FWJH")]
        public static void FWJH()
        {
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            Database acDB = acDoc.Database;
            using (Transaction acTran = acDB.TransactionManager.StartTransaction())
            {
                LayerTable acLT = acTran.GetObject(acDB.LayerTableId, OpenMode.ForRead) as LayerTable;
                acDoc.Editor.WriteMessage(acLT.ToString());
            }
        }

        //添加图层
        [CommandMethod("TJTC")]
        public static void TJTC()
        {
            //获取当前应用程序-文档管理器-当前文档
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            //获取数据库,获取当前文档的数据库
            Database acDB = acDoc.Database;
            //开启事务 - 获取当前数据库-事务管理器-开始事务
            using (Transaction acTran = acDB.TransactionManager.StartTransaction())
            {
                //图层表  =当前事务-获取对象-当前数据库的id,开启读模式
                LayerTable acLT = acTran.GetObject(acDB.LayerTableId, OpenMode.ForRead) as LayerTable;
                acDoc.Editor.WriteMessage(acLT.ToString());

                //如果没有这个图层
                if (acLT.Has("测试图层") != true)
                {
                    //开启图层写模式
                    acTran.GetObject(acDB.LayerTableId, OpenMode.ForWrite);
                    //创建一个对象
                    using (LayerTableRecord acLTR = new LayerTableRecord())
                    {
                        //图层名称
                        acLTR.Name = "测试图层";
                        //图层添加
                        acLT.Add(acLTR);
                        //添加到事务
                        acTran.AddNewlyCreatedDBObject(acLTR, true);
                        //事务提交
                        acTran.Commit();
                        if (acLT.Has("测试图层"))
                        {
                            acDoc.Editor.WriteMessage("图层添加成功");
                        }

                    }

                }
            }

        }

        //迭代集合
        [CommandMethod("DDJH")]
        public static void DDJH()
        {
            //获取当前应用程序-文档管理器-当前文档
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            //获取数据库,获取当前文档的数据库
            Database acDB = acDoc.Database;
            //开启事务 - 获取当前数据库-事务管理器-开始事务
            using (Transaction acTran = acDB.TransactionManager.StartTransaction())
            {
                //图层表  =当前事务-获取对象-当前数据库的id,开启读模式
                LayerTable acLT = acTran.GetObject(acDB.LayerTableId, OpenMode.ForRead) as LayerTable;
                //迭代所有属性id
                foreach (ObjectId oi in acLT)
                {
                    LayerTableRecord acLTR = acTran.GetObject(oi, OpenMode.ForRead) as LayerTableRecord;
                    acDoc.Editor.WriteMessage("图层名称:" + acLTR.Name + "\n");
                }
            }
        }


        //删除图层
        [CommandMethod("SCTC")]
        public static void SCTC()
        {
            //获取当前应用程序-文档管理器-当前文档
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            //获取数据库,获取当前文档的数据库
            Database acDB = acDoc.Database;
            //开启事务 - 获取当前数据库-事务管理器-开始事务
            using (Transaction acTran = acDB.TransactionManager.StartTransaction())
            {
                //图层表  =当前事务-获取对象-当前数据库的id,开启读模式
                LayerTable acLT = acTran.GetObject(acDB.LayerTableId, OpenMode.ForRead) as LayerTable;

                //是否有这个图层
                if (acLT.Has("测试图层"))
                {
                    //图层表为写模式
                    LayerTableRecord acLTR = acTran.GetObject(acLT["测试图层"], OpenMode.ForWrite) as LayerTableRecord;
                    //删除
                    acLTR.Erase();
                    //事务提交
                    acTran.Commit();
                    //输出
                    acDoc.Editor.WriteMessage("删除成功");
                }

            }
        }

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值