using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using System.Collections;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.Civil.ApplicationServices;
using Autodesk.Civil.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
namespace Civil二次开发项目样板
{
/// <summary>
/// 学习第一册CAD基础
/// </summary>
public class Part1
{
/// <summary>
/// 获取当前文档数量
/// </summary>
[CommandMethod("GetDocNumber")]
public void ListDocs()
{
DocumentCollection docs = Application.DocumentManager;//获取当前所有的文档集合
Document doc = docs.MdiActiveDocument;//获取当前的活跃文档
Editor ed = doc.Editor;//获取编译器
ed.WriteMessage("\n文档数量:\t{0}", docs.Count);//输出文档集合数量
ed.WriteMessage("\n活动文档为:\t{0}", doc.Name);//输出活动文档名称
IEnumerator enumerator = docs.GetEnumerator();//获取枚举器
while (enumerator.MoveNext())//遍历每个文档
{
doc = enumerator.Current as Document;//获取当前遍历文档
ed.WriteMessage("\n 文档名称:\t{0}", doc.Name);//输出每个文档名称
}
}
/// <summary>
/// 获取块表并打印块表名称
/// </summary>
[CommandMethod("ListEnts")]
public void ListDocss()
{
Document doc = Application.DocumentManager.MdiActiveDocument;//获取活动文档
Editor ed = doc.Editor;//获取编辑器
Database db = doc.Database;//获取数据库
//Database db = HostApplicationServices.WorkingDatabase;另一种获取数据库方式
ObjectId blockTblId = db.BlockTableId;//获取数据库
using (Transaction tr = db.TransactionManager.StartTransaction())//创建事务
{
BlockTable blockTable = blockTblId.GetObject(OpenMode.ForRead) as BlockTable;//块表
foreach (ObjectId btrId in blockTable)//遍历块表
{
BlockTableRecord blockTableRecord = btrId.GetObject(OpenMode.ForRead) as BlockTableRecord;//获取块表记录
ed.WriteMessage("\n块表记录:{0}", blockTableRecord.Name);
foreach (ObjectId enId in blockTableRecord)//获取块表内容中的实体
{
Autodesk.AutoCAD.DatabaseServices.DBObject obj = enId.GetObject(OpenMode.ForRead);//获取实体
ed.WriteMessage("\n实体模型为:{0}\t句柄:{1}", obj.GetType().Name, obj.Handle);
}
}
tr.Commit();//提交事务
}
}
/// <summary>
/// 通过名称找到块表记录并打印
/// </summary>
[CommandMethod("ListBlkRcd")]
public void ListBlkRcd()
{
string[] btrNames = new string[] {
"*Model_Space","*model_space","*Paper_Space",
"*Paper_Space0","*Paper_Space1","*Paper_Space2",
"Line","TestBlock","Something",
BlockTableRecord.ModelSpace,BlockTableRecord.PaperSpace
};//块表记录的名称
Document doc = Application.DocumentManager.MdiActiveDocument;//获取活动文档
Editor ed = doc.Editor;//获取编辑器
Database db = doc.Database;//获取活动文本数据库
ObjectId blockTable = db.BlockTableId;//获取块表的id
using (Transaction tr = db.TransactionManager.StartTransaction())//开始数据库的处理
{
BlockTable bt = blockTable.GetObject(OpenMode.ForRead) as BlockTable;//块表ID转换为块表
foreach (string btrName in btrNames)//循环块表名称
{
if (bt.Has(btrName)
C#CAD零基础学习(照着打一遍理解注释即可)
最新推荐文章于 2024-04-30 16:02:46 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)