CAD 二次开发–属性块 Block和BlockReference
https://my.oschina.net/u/4335170/blog/3335912
AutoCAD二次开发(.Net)之块的操作(获取名称、修改名称)
https://blog.csdn.net/qq_21489689/article/details/78928349
C#.Net实现AutoCAD块属性提取
http://www.voidcn.com/article/p-hljugijg-bwv.html
CAD 二次开发–属性块 Block和BlockReference
https://www.cnblogs.com/mqxs/p/11977207.html
AutoCAD.NET 二次开发–插入外部文件中的块
https://zhuanlan.zhihu.com/p/32393930
插入块参照
https://www.cnblogs.com/sly-tongtong/p/4253525.html
引入外部快并插入块参照
https://www.cnblogs.com/lionmxs/articles/10304318.html
“块定义”与“块参照”的区别
https://blog.csdn.net/booster123456789/article/details/9956549
读取DWG文件将全部实体变为一个块
https://blog.csdn.net/qq_41721686/article/details/100895546?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160609398219725225001151%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160609398219725225001151&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v28-14-100895546.first_rank_ecpm_v3_pc_rank_v2&utm_term=cad+%E4%BA%8C%E6%AC%A1%E5%BC%80%E5%8F%91+%E7%94%BB%E8%A1%A8&spm=1018.2118.3001.4449
块表的创建(一、二)
https://wenku.baidu.com/view/9462ea795acfa1c7aa00cc36.html
https://wenku.baidu.com/view/03eb3606b52acfc789ebc936.html
基于C#的AutoCAD二次开发之块操作(画了一个半圆,可以添加一些文字)
https://blog.csdn.net/qq_41441896/article/details/104189903?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.control
autocad.net中blocktable,blocktablerecord,blockreference,modelspace,paperspace,layout,viewport的关系
(包括了选择集、视口等等)
https://www.cnblogs.com/swtool/p/SWTOOL_00016.html
[CommandMethod("test")]
public static void test()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
//定义所有的视口ID集合
ObjectIdCollection viewportIDs = new ObjectIdCollection();
viewportIDs = db.GetViewports(true);
List<ObjectId> objectsIdsErase = new List<ObjectId>();
PromptEntityOptions peo = new PromptEntityOptions("\n请选择一个视口!");
peo.SetRejectMessage("\n当前选择的图元不是视口!");
peo.AddAllowedClass(typeof(Viewport), true);
PromptEntityResult per = ed.GetEntity(peo);
if (per.Status != PromptStatus.OK)
return;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
//获取当前空间的块表记录
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
//获取当前空间中的当前布局
Layout lay = (Layout)tr.GetObject(btr.LayoutId, OpenMode.ForRead);
//布局名称
ed.WriteMessage("\nLayoutName:" + lay.LayoutName);
//布局ID
ed.WriteMessage("\nId:" + lay.Id.ToString());
ed.WriteMessage("\nObjectId:" + lay.ObjectId.ToString());
ed.WriteMessage("\nbtr.LayoutId:" + btr.LayoutId);
//当前空间ID
ed.WriteMessage("\nCurrentSpaceId:" + lay.BlockTableRecordId.ToString());
//通过选择集方式访问视口对象
Viewport vp = (Viewport)tr.GetObject(per.ObjectId, OpenMode.ForRead);
ed.WriteMessage("\nViewPort OwnerId:" + vp.OwnerId);
ed.WriteMessage("\nLayout OwnerId:" + lay.OwnerId);
ed.WriteMessage("\nbtr OwnerId:" + btr.OwnerId);
//取得图纸空间中所有浮动视口对象
Viewport Vports = (Viewport)tr.GetObject(db.PaperSpaceVportId, OpenMode.ForRead);
foreach (ObjectId id in viewportIDs)
{
//通过遍历视口ID方式访问视口对象
Viewport vp1 = id.GetObject(OpenMode.ForRead) as Viewport;
}
Matrix3d PsToMsTransForm = PaperToModel(vp);
//取得当前图形中所有的BlockTable
BlockTable bt = (BlockTable)db.BlockTableId.GetObject(OpenMode.ForRead);
//取得当前图形中所有的BlockTable
BlockTable bt_other = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
//取得当前空间的所有块表记录
BlockTableRecord btr_CurrentSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
ed.WriteMessage("\n" + btr_CurrentSpace.Name);
//取得模型空间中所有的块表记录
BlockTableRecord btr_model = (BlockTableRecord)bt["*Model_Space"].GetObject(OpenMode.ForRead);
ed.WriteMessage("\n" + btr_model.Name);
//取得图纸空间中所有的块表记录
BlockTableRecord btr_paper = (BlockTableRecord)bt["*Paper_Space"].GetObject(OpenMode.ForRead);
ed.WriteMessage("\n" + btr_paper.Name);
//取得块名为TestBlock的记录
BlockTableRecord btr_block = (BlockTableRecord)bt["TestBlock"].GetObject(OpenMode.ForRead);
ed.WriteMessage("\n块名为:{0},块属于{1}" , btr_block.Name,btr_block.OwnerId);
tr.Commit();
}
}
database是第1级,就是相当于一个DWG文件,它下面主要包含symbol table和各种dictionary
symbol table是第2级,它包含blocktable、dimstyletable、layertable等
dictionary是第2级,它下面包含第3级有名词典,它包含所有acad_color、acad_layout、acad_group等第4级词典
blocktablerecord是第4级,为块定义,包含ModelSpace、PaperSpace、PaperSpaceX,以及所有其它的块定义
blockreference是第5级,它是第4级中常规的块定义插入到Space中的具体体现,只属于ModelSpace、PaperSpace、PaperSpaceX这几个特殊的blocktablerecord
entity也是属于第5级,同blockreference是一个级别,只属于ModelSpace、PaperSpace、PaperSpaceX这几个特殊的blocktablerecord;但是entity同时也是常规块中的一部份
layout1、布局1也是第5级属于acad_layout