CAD二次开发IFoxCAD框架系列(18)-块表操作

news2025/1/9 5:49:23

1. 块表的查询

1.1 查找名为“自定义块”的块表中的图块记录

using var tr = new DBTrans();
if (tr.BlockTable.Has("自定义块"))
{
    //要执行的操作
}

遍历块表并打印所有的块表的图块名称

public void Test_DBTrans_BlockCount()
{
    using var tr = new DBTrans();
    var i = tr.CurrentSpace
            .GetEntities<BlockReference>()
            .Where(brf => brf.GetBlockName() == "自定义块")
            .Count();
    Env.Print(i);
}

注意:这里的所有的图块名称包含ModelSpace和PaperSpace

2. 块定义

// 块定义
[CommandMethod(nameof(Test_BlockDef))]
public void Test_BlockDef()
{
    using DBTrans tr = new();
    // var line = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0));
    tr.BlockTable.Add("test",
        btr =>
        {
            btr.Origin = new Point3d(0, 0, 0);
        },
        () => // 图元
        {
            return new List<Entity> { new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0)) };
        },
        () => // 属性定义
        {
            var id1 = new AttributeDefinition() { Position = new Point3d(0, 0, 0), Tag = "start", Height = 0.2 };
            var id2 = new AttributeDefinition() { Position = new Point3d(1, 1, 0), Tag = "end", Height = 0.2 };
            return new List<AttributeDefinition> { id1, id2 };
        }
    );
}

在这里插入图片描述

块定义

 [CommandMethod(nameof(Test_InsertBlockDef))]
        public void Test_InsertBlockDef()
        {
            using DBTrans tr = new();
            var line1 = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0));
            var line2 = new Line(new Point3d(0, 0, 0), new Point3d(-1, 1,
                0));
            var att1 = new AttributeDefinition()
            {
                Position = new Point3d(10,
                    10, 0),
                Tag = "tagTest1", Height = 1, TextString = "valueTest1"
            };
            var att2 = new AttributeDefinition()
            {
                Position = new Point3d(10,
                    12, 0),
                Tag = "tagTest2", Height = 1, TextString = "valueTest2"
            };
            tr.BlockTable.Add("test1", line1, line2, att1, att2);
            var ents = new List<Entity>();
            var line5 = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0));
            var line6 = new Line(new Point3d(0, 0, 0), new Point3d(-1, 1,
                0));
            ents.Add(line5);
            ents.Add(line6);
            tr.BlockTable.Add("test44", ents);
            var line3 = new Line(new Point3d(5, 5, 0), new Point3d(6, 6, 0));
            var line4 = new Line(new Point3d(5, 5, 0), new Point3d(-6, 6,
                0));
            var att3 = new AttributeDefinition() { Position = new Point3d(10,
                14, 0), Tag = "tagTest3", Height = 1, TextString = "valueTest3" };
            var att4 = new AttributeDefinition() { Position = new Point3d(10,
                16, 0), Tag = "tagTest4", Height = 1, TextString = "valueTest4" };
            tr.BlockTable.Add("test2", new List<Entity> { line3, line4 }, new
                List<AttributeDefinition> { att3, att4 });
            // tr.CurrentSpace.InsertBlock(new Point3d(4, 4, 0), "test1"); //测试默认
            // tr.CurrentSpace.InsertBlock(new Point3d(4, 4, 0), "test2");
            // tr.CurrentSpace.InsertBlock(new Point3d(4, 4, 0), "test3"); //测试插入不存在的块定义
            // tr.CurrentSpace.InsertBlock(new Point3d(0, 0, 0), "test1", new Scale3d(2)); // 测试放大2倍
            // tr.CurrentSpace.InsertBlock(new Point3d(4, 4, 0), "test1", new Scale3d(2), Math.PI / 4); // 测试放大2倍,旋转45度
            var def1 = new Dictionary<string, string>
            {
                { "tagTest1", "1" },
                { "tagTest2", "2" }
            };
            tr.CurrentSpace.InsertBlock(new Point3d(0, 0, 0), "test1", atts: def1);
            var def2 = new Dictionary<string, string>
            {
                { "tagTest3", "1" },
                { "tagTest4", "" }
            };
            tr.CurrentSpace.InsertBlock(new Point3d(10, 10, 0), "test2", atts: def2);
            tr.CurrentSpace.InsertBlock(new Point3d(-10, 0, 0), "test44");
        }

在这里插入图片描述

块定义+块参照插入

 [CommandMethod(nameof(Test_InsertBlockDef))]
        public void Test_InsertBlockDef()
        {
            using DBTrans tr = new();
            var line1 = new Line(new Point3d(0, 0, 0), new Point3d(1, 1, 0));
            var line2 = new Line(new Point3d(0, 0, 0), new Point3d(-1, 1,
                0));
            var att1 = new AttributeDefinition()
            {
                Position = new Point3d(10,
                    10, 0),
                Tag = "tagTest1", Height = 1, TextString = "valueTest1"
            };
            var att2 = new AttributeDefinition()
            {
                Position = new Point3d(10,
                    12, 0),
                Tag = "tagTest2", Height = 1, TextString = "valueTest2"
            };
            //块定义完毕
            tr.BlockTable.Add("test1", line1, line2, att1, att2);
            
            //开始做块参照插入
            tr.CurrentSpace.InsertBlock(new Point3d(4, 4, 0), "test1"); //测试默认
            tr.CurrentSpace.InsertBlock(new Point3d(8, 8, 0), "test1", new Scale3d(2)); // 测试放大2倍
            tr.CurrentSpace.InsertBlock(new Point3d(4, 4, 0), "test1", new Scale3d(2), Math.PI / 4); // 测试放大2倍,旋转45度
            var def1 = new Dictionary<string, string>
            {
                { "tagTest1", "1" },
                { "tagTest2", "2" }
            };
            tr.CurrentSpace.InsertBlock(new Point3d(15, 15, 0), "test1", atts: def1);
        }

在这里插入图片描述

3. 修改块定义名称和块参照

 // 修改块定义
        [CommandMethod(nameof(Test_BlockDefChange))]
        public static void Test_BlockDefChange()
        {
            using DBTrans tr = new();
            tr.BlockTable.Change("test", btr =>
            {
                //要注意 这个是修改块定义名称
                //修改块名,改成当前块名(可以获取到动态块名)
                btr.Name = btr.Name.ToUpper();
                foreach (var id in btr)
                {
                    var ent = tr.GetObject<Entity>(id);
                    using (ent!.ForWrite())
                    {
                        //是否标注类型
                        if (ent is Dimension dBText)
                        {
                            dBText.DimensionText = "234";
                            dBText.RecomputeDimensionBlock(true);
                        }
                        //是否填充图案类型
                        if (ent is Hatch hatch)
                        {
                            hatch.ColorIndex = 0;
                        }

                        if (ent is Line line)
                        {
                            line.ColorIndex = 1;
                            line.StartPoint = new Point3d(line.StartPoint.X+5, line.StartPoint.Y+5, 0);
                            line.EndPoint = new Point3d(line.EndPoint.X+5, line.EndPoint.Y+5, 0);
                        }   
                        
                    }
                }
            });
            tr.Editor?.Regen();
        }

在这里插入图片描述

4. 删除块定义

        [CommandMethod(nameof(Test_BlockDelete))]
        public static void Test_BlockDelete()
        {
            using var tr = new DBTrans();
            tr.BlockTable.Remove("test");
        }

5. 获取文件里的块定义:

        public void Test_BlockFile()
        {
            using DBTrans tr = new();
            var id = tr.BlockTable.GetBlockFrom(@"C:\Users\vic\Desktop\test.dwg", false);
            //getblockfrom函数的第一个参数是文件路径,第二个参数是是否强制覆盖本图的块定义
            tr.CurrentSpace.InsertBlock(Point3d.Origin, id);
        }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2040724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CentOS7.9上通过KVM安装Centos虚拟机

目录 1 开发前准备&#xff08;先确保服务器可以虚拟化&#xff09;&#xff1a; 2、安装KWM环境 3、创建镜像文件存放目录 4、创建镜像文件存放目录 5、安装桥连接虚拟网络 6、安装虚拟机 7、配置操作系统 8、虚拟机配置网卡地址 9、克隆虚拟机执行 1开发前准备&am…

Git文件管理技巧:轻松删除与查看文件,忽略不必要的文件与文件夹!

避免文件混乱&#xff1a;Git 文件操作技巧 一、Git工作原理概述二、删除文件三、查看指定文件的修改四、指定不需要 Git 管理的文件五、总结 一、Git工作原理概述 Git是一种分布式版本控制系统&#xff0c;其核心在于其高效的快照机制、强大的分支与合并功能、本地开发的灵活…

数据集与数据库:有什么区别?

数据集和数据库是我们在处理数据时经常听到的两个常用词。虽然它们听起来很相似&#xff0c;但它们具有不同的特征并用于不同的用途。本文深入探讨数据集和数据库之间的主要区别&#xff0c;探索了它们的结构、数据类型和各种其他功能&#xff0c;以帮助您做出明智的决定&#…

回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出

回归预测|基于灰狼优化GWO-Transformer-LSTM组合模型的数据回归预测Matlab程序 多特征输入单输出 文章目录 前言回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出GWO-Transformer-BiLSTM 一、GWO-Transformer-BiLSTM模型二、实验…

uniapp打包H5的时候 清楚缓存(不安装依赖的前提下)

问题 在写项目的时候&#xff0c;打包好一个H5 发布成功&#xff0c;后来又重新打包新的包进行更新迭代&#xff0c;但是用户手机上还是上一个版本&#xff0c;本地缓存还是没有清除。 解决问题 步骤一&#xff1a;html不缓存 在html中&#xff0c;解决缓存的方法主要是依赖…

文章解读与仿真程序复现思路——电力自动化设EI\CSCD\北大核心《海上风电全直流汇集送出系统自适应振荡抑制策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【小bug】springMVC通过json传参无法解析参数

0.问题描述 通过postman测试使用json传参的时候&#xff0c;发现不论怎么修改&#xff0c;都无法获取参数&#xff0c;解析对象。 反复检查请求url&#xff0c;请求内容均为正常。 以下是postman测试结果&#xff1a; 日志提示无法解析参数&#xff0c;内容如下&#xff1a;…

C# VideoCapture 多路视频播放

目录 效果 项目 代码 下载 效果 C#VideoCapture多路视频播放 项目 代码 using OpenCvSharp; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Threading.Tasks…

MS5046T/5047T/5048T/5048N_2kSPS、16bit Σ-Δ ADC

MS5046T/MS5047T/MS5048T/MS5048N 是适合高精 度、低成本测量应用的 16bit 模数转换器。其内部集成低 噪声可编程增益放大器、高精度 Δ-Σ 模数转换器和内部振 荡器。 MS5047T 、 MS5048T 、 MS5048N 内部还集成低温 漂基准和两路匹配的可编程电流源。 MS5048T/MS50…

计算机毕业设计 健身房管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

springboot考勤管理系统代码调试讲解论文

2 相关技术 2.1 MySQL数据库 该研究和开发的应用程序在数据操作中难以预料&#xff0c;有时候甚至发生改变。没办法直接从Word中写数据和信息&#xff0c;这不但不安全的&#xff0c;并且难以实现应用程序的功效。要实现所需要的文档存储作用&#xff0c;请尽快选择专业数据存…

【JPCS独立出版,EI稳定检索】2024年工业机器人与先进制造技术国际学术会议(IRAMT 2024,9月27-29)

2024年工业机器人与先进制造技术国际学术会议&#xff08;IRAMT 2024&#xff09;将于2024年9月27-29日在中国成都举办。 此次会议将围绕工业机器人、机电技术、机械及制造等领域的最新研究成果展开讨论&#xff0c;并广泛邀请了国内外领域内的著名专家与学者。会议旨在搭建一个…

Vision Transformer学习笔记

论文链接&#xff1a;https://arxiv.org/abs/2010.11929 项目链接&#xff1a;https://github.com/google-research/vision_transformer 本文代码链接&#xff1a;https://gitcode.com/gh_mirrors/de/deep-learning-for-image-processing/tree/master/pytorch_classification/v…

MS2350M/MS2350D——RF 检测器/控制器

MS2350M/MS2350D 是一款对数放大器芯片&#xff0c;相比 MS2351M/MS2351D &#xff0c;它的应用频率范围的下限可低至 4MHz 。主要用于接收信号强度指示 (RSSI) 与功率放大器 控制&#xff0c;工作频率范围是 4MHz  3000MHz &#xff0c;动态范围约 40dB 。 MS2350M/M…

【Qt】QWidget的windowIcon属性

QWidget的windowIcon属性 windowIcon表示窗口的图标 当我们使用默认的windowIcon的时候&#xff0c;其窗口的图标如下&#xff1a; API说明 windowIcon() 获取到控件的窗⼝图标. 返回 QIcon 对象. setWindowIcon(const QIcon& icon) 设置控件的窗⼝图标. 在Qt中&…

CTFHUB-SQL注入-过滤空格

目录 查询数据库名 查询数据库中的表 查询表中字段 查询表中数据 空格被过滤&#xff0c;使用 /**/ 绕过 查询数据库名 -1/**/union/**/select/**/1,database() 查询数据库中的表 -1/**/union/**/select/**/1,group_concat(table_name)/**/from/**/information_schema.t…

多分类实战:一文掌握 One-vs-All 策略

引言 在机器学习领域&#xff0c;分类问题是常见的任务之一。当我们面对的问题不仅限于两类分类&#xff08;如正例和反例&#xff09;&#xff0c;而是需要处理多个类别时&#xff0c;就会遇到多类分类问题。例如&#xff0c;在手写数字识别中&#xff0c;我们需要将输入图像…

Linux 之 shell指令个人解析

1.echo 类似printf 都是在屏幕上显示字符 2.$ 可以在引用变量时使用 3.read 可以读取你输入的字符&#xff0c;有八个属性 -p可以让读取的东西赋值为变量 4.加减乘除等算法的应用 要用到$(( 算式 )) 注&#xff1a;total等于号不能空开&#xff0c;一空开就错误 5.te…

Java读写EM4305卡、将4305卡制做成4100ID卡

EM4305/EM4205卡是采用瑞士EM微电子公司工作频率为125kHz&#xff0c;具有读、写功能的非接触式RFID射频芯片&#xff0c;它具有功耗低、可提供多种数据传输速率和数据编码方法等特点&#xff0c;适合射频芯片ISO 11784/11785规范&#xff0c;该芯片被广泛应用于动物识别和跟踪…

传智教育引通义灵码进课堂,为技术人才教育学习提效

7 月 17 日&#xff0c;阿里云与传智教育在阿里巴巴云谷园区签署合作协议&#xff0c;双方将基于阿里云智能编程助手通义灵码在课程共建、品牌合作及产教融合等多个领域展开合作&#xff0c;共同推进 AI 教育及相关业务的发展&#xff0c;致力于培养适应未来社会需求的高素质技…