由于cad自带的文本编辑,双击之后有时会卡顿很久,于是写了一个替换默认文本编辑的代码
效果如下


如果无法播放,请点击此处在新窗口打开



文本框使用的是系统自带的InputBox,主要是分享思路,如果想要更好的效果,可以用wpf写一个窗口


代码如下
  1. public static class DBTextEdit
  2. {
  3.     [CommandMethod(nameof(AddEvent))]
  4.     public static void AddEvent()
  5.     {
  6.         //将此部分代码放在Initialize中可在加载插件后自动添加事件
  7.         Acap.DocumentManager.DocumentLockModeChanged -= DocumentManager_DocumentLockModeChanged;
  8.         Acap.DocumentManager.DocumentLockModeChanged += DocumentManager_DocumentLockModeChanged;
  9.     }
  10.     [CommandMethod(nameof(RemoveEvent))]
  11.     public static void RemoveEvent()
  12.     {
  13.         Acap.DocumentManager.DocumentLockModeChanged -= DocumentManager_DocumentLockModeChanged;
  14.     }

  15.     internal static void DocumentManager_DocumentLockModeChanged(object sender, DocumentLockModeChangedEventArgs e)
  16.     {
  17.         if(e.GlobalCommandName.ToUpper()!="TEXTEDIT")
  18.             return;
  19.         var r1 = Env.Editor.SelectImplied();
  20.         if(r1.Status!=PromptStatus.OK)
  21.             return;
  22.         if(r1.Value.Count!=1)
  23.             return;
  24.         var id = r1.Value[0].ObjectId;
  25.         if(!id.IsOk()||!id.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(DBText))))
  26.             return;
  27.         e.Veto();
  28.         using var tr = new DBTrans();
  29.         var text = tr.GetObject<DBText>(id)!;
  30.         var ltr = tr.GetObject<LayerTableRecord>(text.LayerId)!;
  31.         if(ltr.IsLocked)
  32.             return;
  33.         Acap.DocumentManager.DocumentLockModeChanged -= DocumentManager_DocumentLockModeChanged;
  34.         try
  35.         {
  36.             var str = Microsoft.VisualBasic.Interaction.InputBox("请输入文字", "文本编辑", text.TextString);
  37.             if(str is null || str.Trim()==""||str==text.TextString)
  38.                 return;
  39.             using (text.ForWrite())
  40.             {
  41.                 text.TextString = str;
  42.             }
  43.         }
  44.         finally
  45.         {
  46.             Acap.DocumentManager.DocumentLockModeChanged += DocumentManager_DocumentLockModeChanged;
  47.         }
  48.     }
  49. }

里面使用了一些IFOX的类,可以自行根据语义替换



对应B站视频教程【CAD二次开发教程-11-重定义单行文字编辑器】




网友答:
liuhe 发表于 2023-3-3 11:28
我一直以为是电脑配置不行,原来是大家都是这个问题。楼主V5

什么配置都会卡,辣鸡cad

网友答:
开心无惧 发表于 2025-9-19 20:10
有对多行文字的吗,双击多行文字也会停一下才打开

举一反三不就行了

网友答: 我一直以为是电脑配置不行,原来是大家都是这个问题。楼主V5

网友答: 支持一下。

网友答: 牛哇牛哇

网友答:

网友答: 支持一下。顶起来

网友答: 牛蛙牛蛙,CAD2023雀食容易双击文字就爆炸的。

网友答: 牛哇牛哇,白佬666

网友答: 膜拜大佬,谢谢分享

网友答: 真不错哈哈哈哈
  • 上一篇:MVVM做一个花里胡哨的进度条
  • 下一篇:没有了