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