明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2316|回复: 11

[【IFoxCAD】] 替换系统单行文字编辑器 附源码

  [复制链接]
发表于 2023-3-3 09:11:34 | 显示全部楼层 |阅读模式
由于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-重定义单行文字编辑器】


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 4明经币 +4 收起 理由
和尚777 + 1 神马都是浮云
MUSIC-DIE + 1 很给力!
闻人南131 + 1 很给力!
utopio + 1

查看全部评分

 楼主| 发表于 2023-3-6 14:52:52 | 显示全部楼层
liuhe 发表于 2023-3-3 11:28
我一直以为是电脑配置不行,原来是大家都是这个问题。楼主V5

什么配置都会卡,辣鸡cad
发表于 2023-3-3 11:28:08 | 显示全部楼层
我一直以为是电脑配置不行,原来是大家都是这个问题。楼主V5
发表于 2023-3-3 10:46:20 | 显示全部楼层
牛蛙牛蛙,CAD2023雀食容易双击文字就爆炸的。
发表于 2023-3-3 10:40:35 | 显示全部楼层
支持一下。顶起来
发表于 2023-3-3 19:14:45 | 显示全部楼层
牛哇牛哇,白佬666
发表于 2023-3-4 11:50:53 | 显示全部楼层
膜拜大佬,谢谢分享
发表于 2023-3-4 13:02:13 | 显示全部楼层
真不错哈哈哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 04:55 , Processed in 0.241836 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表