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

9 篇文章 1 订阅

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

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

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

同时在上面的属性列表栏中,我们可以看到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);
            }
        
        } 
    }
}

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

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


                                                                        更多内容,请关注公众号

                                                                

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yGIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值