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

    今天这个例子为大家演示一下,在AutoCAD中实现使用将多行文本转为单行文本的方法。我们这里使用的是炸开的方式将多行文本转换为单行文本。

    在这里顺便提一下,有很多小伙伴不知道怎么对AutoCAD进行二次开发,如果说使用的是C#,这里使用的.net的开发方式,对于AutoCAD2010只需要将acdbmgd.dll和acmgd.dll这两个库添加到我们创建的新类中即可。具体操作如下图所示。
    AutoCAD二次开发&实现将多行文本转为单行文本 - 图1
    当然,还要注意设置这两个dll的复制属性特性,将复制属性设置为false。如下图所示。
    AutoCAD二次开发&实现将多行文本转为单行文本 - 图2
    同时在上面的属性列表栏中,我们可以看到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. }

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