主要步骤:
一、获取一个块的id:
其中oId就是了。
二、通过次oId获取块引用blkRef:
三、通过它获取所有相同的块引用的id集合:
四、通过步骤三的集合得到所有的块引用得到集合listBr:
五、遍历listBr,创建DBText编号 ,确定DBText在图中插入的位置,加入到集合listDBText:
在做第五步骤前,先要获取TextStyleId:
最后通过扩展方法加入到模型空间:listDBText.ToSpace();
ToSpace方法截图:
需要注意的地方:一定要是块定义,在使用dbText.AlignmentPoint之前一定要写排序方式这里用的是:dbText.HorizontalMode = TextHorizontalMode.TextMid;
 
 
完整代码:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. using Autodesk.AutoCAD.ApplicationServices;
  7. using Autodesk.AutoCAD.EditorInput;
  8. using Autodesk.AutoCAD.DatabaseServices;
  9. using Autodesk.AutoCAD.Runtime;
  10. using Autodesk.AutoCAD.Geometry;
  11.  
  12. namespace MulitySortNum
  13. {
  14. public class SortNum
  15. {
  16. private Document doc = Application.DocumentManager.MdiActiveDocument;
  17. private Database db = Application.DocumentManager.MdiActiveDocument.Database;
  18. private Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  19.  
  20. private string str = "LL";
  21. public int index = ;
  22.  
  23. [CommandMethod("NumSort1")]
  24. public void NumSort1()
  25. {
  26. index = ;
  27.  
  28. var propEnt = new PromptEntityOptions("请选择要编号的一个块\n");
  29.  
  30. var propRes = ed.GetEntity(propEnt);
  31.  
  32. if (propRes.Status != PromptStatus.OK)
  33. {
  34. return;
  35. }
  36.  
  37. var oId = propRes.ObjectId;
  38.  
  39. ObjectIdCollection objIds = null;
  40. List<DBText> listDBText = new List<DBText>();
  41.  
  42. using (Transaction trans = db.TransactionManager.StartTransaction())
  43. {
  44. var blkRef = trans.GetObject(oId, OpenMode.ForRead) as BlockReference;
  45.  
  46. if (blkRef == null)
  47. {
  48. Application.ShowAlertDialog("请选择块定义");
  49. return;
  50. }
  51.  
  52. var recId = blkRef.BlockTableRecord;
  53.  
  54. var blkTblRec = trans.GetObject(recId, OpenMode.ForRead) as BlockTableRecord;
  55.  
  56. objIds = blkTblRec.GetBlockReferenceIds(true, false);
  57.  
  58. var txtStlTbl = trans.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;
  59.  
  60. var txtstyleId = txtStlTbl["Standard"];
  61.  
  62. List<BlockReference> listBr = new List<BlockReference>();
  63.  
  64. foreach (ObjectId objectId in objIds)
  65. {
  66. var blkTempRef = trans.GetObject(objectId, OpenMode.ForRead) as BlockReference;
  67.  
  68. listBr.Add(blkTempRef);
  69.  
  70. }
  71.  
  72. listBr.OrderByDescending(b => b.Position.Y).ToList().ForEach(blkTempRef =>
  73. {
  74.  
  75. DBText dbText = new DBText();
  76. dbText.TextString = str + "_" + index++;
  77. dbText.TextStyleId = txtstyleId;
  78.  
  79. var pointMin = blkTempRef.Bounds.Value.MinPoint;
  80. var pointMax = blkTempRef.Bounds.Value.MaxPoint;
  81. dbText.HorizontalMode = TextHorizontalMode.TextMid;
  82. dbText.AlignmentPoint = pointMin + Vector3d.YAxis * + Vector3d.XAxis * Math.Abs(pointMax.X - pointMin.X) / ;
  83.  
  84. listDBText.Add(dbText);
  85.  
  86. });
  87.  
  88. trans.Commit();
  89. }
  90.  
  91. listDBText.ToSpace();
  92.  
  93. }
  94. }
  95. }

AutoCad 二次开发 .net 之相同块的自动编号的更多相关文章

  1. AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层

    AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层 AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层我理解的图层的作用大概是把 ...

  2. AutoCad 二次开发 文字镜像

    AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...

  3. AutoCAD二次开发——AutoCAD.NET API开发环境搭建

    AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...

  4. 1,下载和部署开发环境--AutoCAD二次开发

    环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technolo ...

  5. AutoCad 二次开发 jig操作之标注跟随线移动

    AutoCad 二次开发 jig操作之标注跟随线移动 在autocad当中,我认为的jig操作的意思就是即时绘图的意思,它能够实时的显示出当前的操作,以便我们直观的感受到当前的绘图操作是什么样子会有什 ...

  6. AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)

    AutoCAD2007+vs2005 首先自己去网上搜索下载AutoCAD2007的ARX开发包. 解压后如下 打开后如下 classmap文件夹为C++类和.net类的框架图,是一个DWG文件. d ...

  7. 我的AutoCAD二次开发之路 (一)

    原帖地址 http://379910987.blog.163.com/blog/static/33523797201011184552167/ 今天在改代码的时候,遇到了AddVertexAt方法的用 ...

  8. Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序

    在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...

  9. 承接 AutoCAD 二次开发 项目

    本人有多年的CAD开发经验,独立完成多个CAD二次开发项目.熟悉.net及Asp.net开发技术,和Lisp开发技术. 现在成立了工作室,独立承接CAD二次开发项目.结项后提供源码及开发文档,有需要的 ...

随机推荐

  1. 二 mysql库表的详细操作

    目录 1.库操作 1.创建数据库 2.数据库相关操作 2.表操作 1.存储引擎 2.表介绍 3.创建表 4.查看表结构 5.MySQL的基础数据类型 6.表的完整性约束 7.修改表 alter tab ...

  2. 基于Docker和Golang搭建Web服务器

    1 场景描述 基于centos7的docker镜像搭建golang开发环境 在docker容器内,使用golang实现一个Web服务器 启动docker容器,并在容器内启动Web服务器 我购买了一个最 ...

  3. java并发之CAS详解

    前言 在高并发的应用当中,最关键的问题就是对共享变量的安全访问,通常我们都是通过加锁的方式,比如说synchronized.Lock来保证原子性,或者在某些应用当中,用voliate来保证变量的可见性 ...

  4. django-Xadmin后台管理

    0919自我总结 django-Xadmin后台管理 一.安装环境 pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 ...

  5. opencv::处理边缘

    卷积边界问题 图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理. 处理边缘 ...

  6. gitlab 提交

    gitlab 提交 Git global setup git config --global user.name "lial" git config --global user.e ...

  7. php好在哪?

    PHP即“超文本预处理器”,是一种通用开源脚本语言.PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言.PHP独特的语法混合了C.Java.Perl以及 PHP 自创的语法.利于学习 ...

  8. 第三方软件 G6ftp提权

    步骤 1.下载配置文件 将administrator 2.利用lcx 端口转发 默认只允许本机连接 3.lcx.exe -tran 8027 127.0.0.1 8021 4.使用客户端以管理员用户登 ...

  9. C#详解类型,变量与对象

    本节内容: 1.什么是类型(Type) 2.类型在C#语言中的作用 3.C#语言的类型系统 4.变量.对象与内存 1.什么是类型(type) 类型又名数据类型(Date Type),是数据在内存中存储 ...

  10. ESP8266开发之旅 网络篇⑪ WebServer——ESP8266WebServer库的使用

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...