原文链接:https://blog.csdn.net/u010608964/article/details/86669792

今天这个例子为大家演示一下,在AutoCAD中实现使用将多行文本转为单行文本的方法。我们这里使用的是炸开的方式将多行文本转换为单行文本。
在这里顺便提一下,有很多小伙伴不知道怎么对AutoCAD进行二次开发,如果说使用的是C#,这里使用的.net的开发方式,对于AutoCAD2010只需要将acdbmgd.dll和acmgd.dll这两个库添加到我们创建的新类中即可。具体操作

如下图所示。
1588558901501-b71938ac-3652-41bf-91ba-adadc3b80799.png
当然,还要注意设置这两个dll的复制属性特性,将复制属性设置为false。如下图所示。
1588558901501-b71938ac-3652-41bf-91ba-adadc3b80799.png
同时在上面的属性列表栏中,我们可以看到dll的版本,这里是18.0.0对应着AutoCAD2010版。
好了,说这么多只是前期的准备工作,下面我们来编写我们本次要实现的代码。
具体的代码实现如下所示。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Autodesk.AutoCAD.Runtime;
  6. using Autodesk.AutoCAD.ApplicationServices;
  7. using Autodesk.AutoCAD.EditorInput;
  8. using Autodesk.AutoCAD.DatabaseServices;
  9. namespace MTextToText
  10. {
  11. public class Class1
  12. {
  13. [CommandMethod("TestExplodeMText")]
  14. public static void ExplodeMText()
  15. {
  16. Document doc = null;
  17. Editor ed = null;
  18. Database db = null;
  19. try
  20. {
  21. doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  22. ed = doc.Editor;
  23. db = doc.Database;
  24. var per = ed.GetEntity("Mtext:");
  25. if (per.Status != PromptStatus.OK)
  26. return;
  27. ObjectId mtId = per.ObjectId;
  28. using (Transaction tr = db.TransactionManager.StartTransaction())
  29. {
  30. MText mt = tr.GetObject(mtId, OpenMode.ForRead) as MText;
  31. if (mt!=null)
  32. {
  33. var explObjs = new DBObjectCollection();
  34. mt.Explode(explObjs);
  35. if (explObjs.Count > 0)
  36. {
  37. BlockTableRecord ms = (BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db),
  38. OpenMode.ForWrite);
  39. foreach (DBObject mtObj in explObjs)
  40. {
  41. Entity mtEnt = mtObj as Entity;
  42. if (mtEnt != null)
  43. {
  44. ObjectId entId = ms.AppendEntity(mtEnt);
  45. tr.AddNewlyCreatedDBObject(mtEnt, true);
  46. }
  47. }
  48. }
  49. }
  50. tr.Commit();
  51. }
  52. }
  53. catch (System.Exception ex)
  54. {
  55. ed.WriteMessage(ex.Message);
  56. }
  57. }
  58. }
  59. }

最后编写好代码后,可能会需要我们对代码进行调试,这里我们使用附加进程的方式进行调试,
如下图所示。
1588558901501-b71938ac-3652-41bf-91ba-adadc3b80799.png
只要点击debug运行,然后就会启动AutoCAD程序,就 可以按照一般普通的方式绘图了。
在AutoCAD中,我们使用netload命令,加载我们编译好的dll。
本次功实现了选择多行文本,然后将这些文本转换为当行文本。