栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

AutoCAD.NET API2018二次开发第一章

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

AutoCAD.NET API2018二次开发第一章

环境

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("删除成功");
                }

            }
        }

    }
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907186.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号