课程目标:本节课教大家在上节课(CAD二次开发环境搭建)的基础上学习如何访问AutoCAD图纸的模型空间,获取下图所示模型空间中的一条直线的起点和终点坐标:
详细过程:
第一步:按照CAD二次开发环境搭建_你曾是少年~的博客-CSDN博客此处所将的方式重新创建一个项目名称叫"访问模型空间" ,自行测试保证THW命令正常输出”helloword!!!“,vs截图如下:
第二步:在class1.cs中添加一个新命令用于访问模型空间的直线信息,代码片段如下:
[CommandMethod("TGL")]
public static void TestGetLineInfo()
{
//获取当前活动文档
Document doc = Application.DocumentManager.MdiActiveDocument;
//开启一个事务
using (Transaction trans = doc.TransactionManager.StartTransaction())
{
//获取块表
BlockTable acBlkTbl = trans.GetObject(doc.Database.BlockTableId, OpenMode.ForRead) as BlockTable;
//获取模型空间
BlockTableRecord modelSpace = trans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForRead) as BlockTableRecord;
//遍历模型空间
foreach (ObjectId oid in modelSpace)
{
//获取模型空间图元
Entity ent = trans.GetObject(oid,OpenMode.ForRead) as Entity;
//判断图元是否为直线
if (ent is Line)
{
Line l = ent as Line;
//命令行打印直线的起点和终点
doc.Editor.WriteMessage("起点:"+ l.StartPoint.ToString()+" 终点:"+l.EndPoint.ToString());
}
}
}
}
第三步:编译项目并加载到cad2021中执行命令"TGL"。
1)成功编译
2)键入命令:netload
3)选择刚编译的dll文件
4)键入命令TGL
5)观察命令行输出以下信息则以上步骤无误
Class1.cs完整代码如下:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.ApplicationServices.Core;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 访问模型空间
{
public class Class1
{
[CommandMethod("THW")]
public static void TestHelloWord()
{
Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("HelloWord!!!");
}
[CommandMethod("TGL")]
public static void TestGetLineInfo()
{
//获取当前活动文档
Document doc = Application.DocumentManager.MdiActiveDocument;
//开启一个事务
using (Transaction trans = doc.TransactionManager.StartTransaction())
{
//获取块表
BlockTable acBlkTbl = trans.GetObject(doc.Database.BlockTableId, OpenMode.ForRead) as BlockTable;
//获取模型空间
BlockTableRecord modelSpace = trans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],OpenMode.ForRead) as BlockTableRecord;
//遍历模型空间
foreach (ObjectId oid in modelSpace)
{
//获取模型空间图元
Entity ent = trans.GetObject(oid,OpenMode.ForRead) as Entity;
//判断图元是否为直线
if (ent is Line)
{
Line l = ent as Line;
//命令行打印直线的起点和终点
doc.Editor.WriteMessage("起点:"+ l.StartPoint.ToString()+" 终点:"+l.EndPoint.ToString());
}
}
}
}
}
}
可能出现的问题:
问题1:编程成功一次后无法再次编译,如图所示
解决办法:重启AutoCAD2021
问题2:命令行没有打印该信息
解决办法:选中模型空间中的直线,需确保特性面板中显示的类型是直线,模型空间中有多条直线则会显示多行此信息。