cad.net二次 属性块

本文深入探讨了AutoCAD的二次开发,重点介绍了块(Block)和BlockReference的概念,以及如何进行块属性提取、插入外部块、管理布局和视口。内容涵盖块定义、块引用、图纸空间、模型空间、布局ID和视口对象的访问与操作,同时讲解了块表的相关创建与使用。此外,还提供了代码示例,展示了如何在.NET环境中操作AutoCAD的块和视口。
摘要由CSDN通过智能技术生成

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
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值