今天一早上看了群里有小伙伴有这样的需求,是实现用户用鼠标点击拾取AutoCAD平面,拾取点然后作为插入编号文字位置,按住esc键后,退出自动编号。按照他的需求,我这里大致想了一下,如果按照该小伙伴提出的用多线程和委托,想必有点复杂了。首先AutoCAD是不支持多线程的,至于使用委托,我想大概意思是使用鼠标的点击事件回调而已。还有他另外提到的使用钩子,这估计就更复杂了。我做了一个简单的实现,使用的while循环,然后拾取屏幕上面的点,插入编号的文字即可。至于设置文字的样式什么,可以按照需求进行调整。这里参考了AutoCAD二次开发(.Net)之设置MText字体(1)这篇博客进行修改。具体实现效果如下图所示。

好了,现在来看一下实现的源代码。

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace OrderAuto
{public class Class1{public int orderIndex = 1;[CommandMethod("zdbh")]public void demo() {Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;while (true){Transaction trans = db.TransactionManager.StartTransaction();using (trans){BlockTable blockTbl = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;BlockTableRecord modelSpace = trans.GetObject(blockTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;MText mt = new MText();mt.Contents = Convert.ToString(orderIndex);PromptPointResult ppr = ed.GetPoint("\n指点编号的插入点: ");Point3d location;if (ppr.Status!=PromptStatus.OK){return;}else{location = ppr.Value;}DBText acText = new DBText();acText.Position = location;acText.Height = 50;acText.TextString = Convert.ToString(orderIndex);modelSpace.AppendEntity(acText);trans.AddNewlyCreatedDBObject(acText, true);/*mt.TextStyleId = AddTextStyle("宋体", "1", "3", 20, 20);mt.Width = 50;mt.Height = 50;mt.Location = location;modelSpace.AppendEntity(mt);trans.AddNewlyCreatedDBObject(mt, true);*/trans.Commit();orderIndex++;}}}public static ObjectId AddTextStyle(string name, string smallfont, string bigfont, double height, double xscale){Database dbH = HostApplicationServices.WorkingDatabase;using (Transaction trans = dbH.TransactionManager.StartTransaction()){TextStyleTable TST = (TextStyleTable)trans.GetObject(dbH.TextStyleTableId, OpenMode.ForWrite);ObjectId id = GetIdFromSymbolTable(TST, name);if (id == ObjectId.Null){TextStyleTableRecord TSTR = new TextStyleTableRecord();TSTR.Name = name;TSTR.FileName = smallfont;TSTR.BigFontFileName = bigfont;TSTR.TextSize = height;TSTR.XScale = xscale;TST.UpgradeOpen();id = TST.Add(TSTR);trans.AddNewlyCreatedDBObject(TSTR, true);}return id;}}//取得符号表的Idpublic static ObjectId GetIdFromSymbolTable(SymbolTable st, string key){Database dbH = HostApplicationServices.WorkingDatabase;using (Transaction trans = dbH.TransactionManager.StartTransaction()){if (st.Has(key)){ObjectId idres = st[key];if (!idres.IsErased)return idres;foreach (ObjectId id in st){if (!id.IsErased){SymbolTableRecord str = (SymbolTableRecord)trans.GetObject(id, OpenMode.ForRead);if (str.Name == key)return id;}}}}return ObjectId.Null;}}
}

更多内容,请关注公众号

AutoCAD二次开发实现简单的自动编号相关推荐

  1. 陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    龙源期刊网 http://www.qikan.com.cn 基于 AutoLisp 的 AutoCAD 二次开发自动 生成系统图 作者:郎建山 金江 来源:<科技视界> 2013 年第 2 ...

  2. CAD自控lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    基于 AutoLisp 的 AutoCAD 二次开发自动生成系统图 [摘 要]本文主要阐述了应用 autolisp 语言二次开发 autocad 自动生成系统图的实现方案. [关键词] autocad ...

  3. eps高程点和高程注记不符_利用AutoCAD二次开发实现地形图高程点与等高线错误自动查找...

    原标题:利用AutoCAD二次开发实现地形图高程点与等高线错误自动查找 水土保持之点滴,关注后可查阅所有文章 来源:<测绘通报>2017年第5期 作者:刘洪.黄军胜 摘要:论述了数字地形图 ...

  4. AutoCAD二次开发(C#)完成后,如何实现CAD启动时自动加载dll(不必输入netload)?

    AutoCAD二次开发(C#)完成后,如何实现CAD启动时自动加载dll(不必输入netload)? 1.复制编译后的dll路径,比如我的是[C:\SectionManager_CAD_1.1_031 ...

  5. 光伏自动化出图系统 基于C#的AutoCad二次开发

    CAD计算机软件的开发及应用,是工程公司提高设计工作效率,工程设计质量的重要手段.在光伏发电工程设计的过程中,需要进行一系列工程计算.目前在设计中设计的计算包括:高度角计算,最佳倾角计算,光伏阵列布置 ...

  6. cass二次开发vba和lisp_基于VBA的AutoCAD二次开发及应用实例

    1引言本文引用地址:http://www.eepw.com.cn/article/190993.htm AutOCAD2005是AutOdesk公司的系列产品,该软件从其使用和设计思路上都秉承了工程制 ...

  7. 用C语言编程函数求圆台体积,第六篇 AutoCAD二次开发技术.pdf

    第六章 ObjectARX 开发技术 1. AutoCAD二次开发概述 7. MFC对话框 2. ObjectARX简介 8. 搜索图形数据库及获取实体 3. 常用实体类和几何类 数据 4. 创建实体 ...

  8. AutoCAD 二次开发语言的选择

    因为某些功能的原因,一部份VBA的用户最终选择了NET,又因为某些功能的原因,一部份NET的用户最终选择了C++.最终这部份业余用户走上了专业的二次开发之路,而脱离了原来的专业. 来自 一个CAD群叫 ...

  9. C#进行AutoCAD二次开发实例之倒角功能实现原理介绍

    内容提要:         今天又是周五,到了双休的日子,比较兴奋,看了一晚上的<最强大脑>,顿时赶脚智商成了硬伤...刚才躺下打算睡觉,觉得还是应该写写CAD二次开发的相关一些内容,原因 ...

最新文章

  1. SAP MM ML81N为采购订单创建服务接收单,报错- No matching PO items selected -
  2. 大学计算机基础python-大学计算机基础最新章节_曾一著_掌阅小说网
  3. forward 方法详解 java_详解Java从后台重定向(redirect)到另一个项目的方法
  4. 新年到,献给从一线工程师到CTO的实用指南:《2019区块链开发者报告》
  5. SRM6.1安装配置指南
  6. Hive中的数据库、表、数据与HDFS的对应关系
  7. android webservice 简单应用
  8. c++中unordered_map的坑
  9. ai怎么让图片任意变形_想一键提取图片文字,有什么好的文字识别软件/APP推荐吗?...
  10. python项目之当当网
  11. TCP详解——连接建立与断开
  12. BZOJ2767:[JLOI2010]足彩投注
  13. 自编译 极路由2 大麦DW22D/DW203D/DW204D openwrt路由器固件分享
  14. Android零基础入门第18节:EditText的属性和使用方法
  15. 计算机445 135 139端口,Win7如何关闭445 135 138 139端口
  16. .nav ul .mall a:hover 是什么意思
  17. ubuntu20.04鼠标只能移动不能点击+键盘无法输入问题
  18. {转载}circos绘图(2)
  19. 利用计算机设计产品,计算机在产品设计的应用论文
  20. 一键抠图Portrait Matting人像抠图 (C++和Android源码)

热门文章

  1. 【cuda】Nsight System 下载,安装与使用
  2. stm32输入捕获,捕获高电平
  3. Win10安装Android Studio
  4. 生产管理:模具管理系统
  5. 【JESD204系列】六、加解扰模块的设计原理
  6. 免費螢幕錄影軟體CamStudio可錄製…
  7. Vue指令(续)、小黑记事本案例
  8. 生活中的定律之二八法则
  9. html div自适应布局,css两个div自适应宽度布局方法大全(精华)
  10. 行业研究报告-全球与中国室内设计师3D可视化软件市场现状及未来发展趋势