AutoCAD二次开发&实现将多行文本转为单行文本

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

在这里顺便提一下,有很多小伙伴不知道怎么对AutoCAD进行二次开发,如果说使用的是C#,这里使用的.net的开发方式,对于AutoCAD2010只需要将acdbmgd.dll和acmgd.dll这两个库添加到我们创建的新类中即可。具体操作如下图所示。

AutoCAD二次开发&实现将多行文本转为单行文本_第1张图片

当然,还要注意设置这两个dll的复制属性特性,将复制属性设置为false。如下图所示。

AutoCAD二次开发&实现将多行文本转为单行文本_第2张图片

同时在上面的属性列表栏中,我们可以看到dll的版本,这里是18.0.0对应着AutoCAD2010版。

好了,说这么多只是前期的准备工作,下面我们来编写我们本次要实现的代码。具体的代码实现如下所示。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;

namespace MTextToText
{
    public class Class1
    {
        [CommandMethod("TestExplodeMText")]
        public static void ExplodeMText() 
        {
            Document doc = null;
            Editor ed = null;
            Database db = null;

            try
            {
                doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
                ed = doc.Editor;
                db = doc.Database;

                var per = ed.GetEntity("Mtext:");
                if (per.Status != PromptStatus.OK)
                    return;
                ObjectId mtId = per.ObjectId;

                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                     MText mt = tr.GetObject(mtId, OpenMode.ForRead) as MText;
                     if (mt!=null)
                     {
                         var explObjs = new DBObjectCollection();
                         mt.Explode(explObjs);
                         if (explObjs.Count > 0)
                         {
                             BlockTableRecord ms = (BlockTableRecord)tr.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(db),
                                  OpenMode.ForWrite);
                             foreach (DBObject mtObj in explObjs)
                             {
                                 Entity mtEnt = mtObj as Entity;
                                 if (mtEnt != null)
                                 {
                                     ObjectId entId = ms.AppendEntity(mtEnt);
                                     tr.AddNewlyCreatedDBObject(mtEnt, true);
                                 }
                             }
                         }
                     }
                     tr.Commit();
                }
            }
            catch (System.Exception ex)
            {

                ed.WriteMessage(ex.Message);
            }
        
        } 
    }
}

最后编写好代码后,可能会需要我们队代码进行调试,这里我们使用附加进程的方式进行调试,如下图所示。

AutoCAD二次开发&实现将多行文本转为单行文本_第3张图片

只要点击debug运行,然后就会启动AutoCAD程序,就 可以按照一般普通的方式绘图了。在AutoCAD中,我们使用netload命令,加载我们编译好的dll。本次功实现了选择多行文本,然后将这些文本转换为当行文本。


                                                                        更多内容,请关注公众号

                                                                

你可能感兴趣的:(C#,AutoCAD)