主要步骤:
一、获取一个块的id:
其中oId就是了。
二、通过次oId获取块引用blkRef:
三、通过它获取所有相同的块引用的id集合:
四、通过步骤三的集合得到所有的块引用得到集合listBr:
五、遍历listBr,创建DBText编号 ,确定DBText在图中插入的位置,加入到集合listDBText:
在做第五步骤前,先要获取TextStyleId:
最后通过扩展方法加入到模型空间:listDBText.ToSpace();
ToSpace方法截图:
需要注意的地方:一定要是块定义,在使用dbText.AlignmentPoint之前一定要写排序方式这里用的是:dbText.HorizontalMode = TextHorizontalMode.TextMid;
 
 
完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry; namespace MulitySortNum
{
public class SortNum
{
private Document doc = Application.DocumentManager.MdiActiveDocument;
private Database db = Application.DocumentManager.MdiActiveDocument.Database;
private Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; private string str = "LL";
public int index = ; [CommandMethod("NumSort1")]
public void NumSort1()
{
index = ; var propEnt = new PromptEntityOptions("请选择要编号的一个块\n"); var propRes = ed.GetEntity(propEnt); if (propRes.Status != PromptStatus.OK)
{
return;
} var oId = propRes.ObjectId; ObjectIdCollection objIds = null;
List<DBText> listDBText = new List<DBText>(); using (Transaction trans = db.TransactionManager.StartTransaction())
{
var blkRef = trans.GetObject(oId, OpenMode.ForRead) as BlockReference; if (blkRef == null)
{
Application.ShowAlertDialog("请选择块定义");
return;
} var recId = blkRef.BlockTableRecord; var blkTblRec = trans.GetObject(recId, OpenMode.ForRead) as BlockTableRecord; objIds = blkTblRec.GetBlockReferenceIds(true, false); var txtStlTbl = trans.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable; var txtstyleId = txtStlTbl["Standard"]; List<BlockReference> listBr = new List<BlockReference>(); foreach (ObjectId objectId in objIds)
{
var blkTempRef = trans.GetObject(objectId, OpenMode.ForRead) as BlockReference; listBr.Add(blkTempRef); } listBr.OrderByDescending(b => b.Position.Y).ToList().ForEach(blkTempRef =>
{ DBText dbText = new DBText();
dbText.TextString = str + "_" + index++;
dbText.TextStyleId = txtstyleId; var pointMin = blkTempRef.Bounds.Value.MinPoint;
var pointMax = blkTempRef.Bounds.Value.MaxPoint;
dbText.HorizontalMode = TextHorizontalMode.TextMid;
dbText.AlignmentPoint = pointMin + Vector3d.YAxis * + Vector3d.XAxis * Math.Abs(pointMax.X - pointMin.X) / ; listDBText.Add(dbText); }); trans.Commit();
} listDBText.ToSpace(); }
}
}

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. ThinkPHP框架快速开发网站

    使用ThinkPHP框架快速搭建网站 这一周一直忙于做实验室的网站,基本功能算是完成了.比较有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.如果对于同样是Web方面新手的你有一丝丝帮助 ...

  2. Java 学习笔记之 线程interrupt方法

    线程interrupt方法: interrupt方法是用来停止线程的,但是他的使用效果并不像for+break那样,马上就停止循环. 调用interrupt()其实仅仅是在当前线程中打了一个停止标记, ...

  3. 利用Dockerfile部署SpringBoot项目

    利用Dockerfile部署SpringBoot项目 1.创建一个SpringBooot项目并且打成jar包 2.在Linux中创建一个文件夹,来做docker测试 [root@izwz90lvzs7 ...

  4. 使用LitePal建立表关联

    关联关系的基础知识   喜欢把所有的代码都写在一个类里的程序员肯定是个新手.没错,任何一个像样的程序都不可能仅仅只有一个类的,同样地,任何一个像样的数据库也不可能仅仅只有一张表.我们都知道,在面向对象 ...

  5. 点云之OpenMesh:error C1083:无法打开包括文件:“OpenMesh/Core/IO/MeshIO.hh”:No such file or directory

    1.这是一个错误引发的惨案:错误提示如下: 在进行点云程序调试时,出现错误:[error C1083:无法打开包括文件:“OpenMesh/Core/IO/MeshIO.hh”:No such fil ...

  6. 《深入理解Java虚拟机》-----第12章 Java内存模型与线程

    概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了.在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速 ...

  7. System NT Kernel & System占用CPU 12%左右 终极解决方案,原来是更新惹的祸

    任务管理器发现 system进程持续占用12%左右的cpu,网上搜索到的很多方法均无效 误打误撞发现了这个方法,亲测可用 卸载系统补丁(KB41000347),提升10%的cpu性能 卸载补丁前:  ...

  8. 深度长文回顾web基础组件

    什么是Serlvet ? 全称 server applet 运行在服务端的小程序: 首先来说,这个servlet是java语言编写的出来的应用程序,换句话说servlet拥有java语言全部的优点,比 ...

  9. 渗透系统虚拟机----win7(渗透工具包)

    今天把自己用的win7渗透虚拟机和渗透工具脚本整合到一起备份传网盘了: D:\渗透工具包>dir 驱动器 D 中的卷是 DATA 卷的序列号是 0D74-084B D:\渗透工具包 的目录 // ...

  10. DevSecOps 笔记

    什么是DevSecOps “DevSecOps”,一种全新的安全理念与模式,从DevOps的概念延伸和演变而来,其核心理念为安全是整个IT团队(包括开发.运维及安全团队)每个人的责任,需要贯穿从开发到 ...