- 积分
- 9376
- 明经币
- 个
- 注册时间
- 2021-11-26
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
由于cad自带的文本编辑,双击之后有时会卡顿很久,于是写了一个替换默认文本编辑的代码
效果如下
文本框使用的是系统自带的InputBox,主要是分享思路,如果想要更好的效果,可以用wpf写一个窗口
代码如下
- public static class DBTextEdit
- {
- [CommandMethod(nameof(AddEvent))]
- public static void AddEvent()
- {
- //将此部分代码放在Initialize中可在加载插件后自动添加事件
- Acap.DocumentManager.DocumentLockModeChanged -= DocumentManager_DocumentLockModeChanged;
- Acap.DocumentManager.DocumentLockModeChanged += DocumentManager_DocumentLockModeChanged;
- }
- [CommandMethod(nameof(RemoveEvent))]
- public static void RemoveEvent()
- {
- Acap.DocumentManager.DocumentLockModeChanged -= DocumentManager_DocumentLockModeChanged;
- }
- internal static void DocumentManager_DocumentLockModeChanged(object sender, DocumentLockModeChangedEventArgs e)
- {
- if(e.GlobalCommandName.ToUpper()!="TEXTEDIT")
- return;
- var r1 = Env.Editor.SelectImplied();
- if(r1.Status!=PromptStatus.OK)
- return;
- if(r1.Value.Count!=1)
- return;
- var id = r1.Value[0].ObjectId;
- if(!id.IsOk()||!id.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(DBText))))
- return;
- e.Veto();
- using var tr = new DBTrans();
- var text = tr.GetObject<DBText>(id)!;
- var ltr = tr.GetObject<LayerTableRecord>(text.LayerId)!;
- if(ltr.IsLocked)
- return;
- Acap.DocumentManager.DocumentLockModeChanged -= DocumentManager_DocumentLockModeChanged;
- try
- {
- var str = Microsoft.VisualBasic.Interaction.InputBox("请输入文字", "文本编辑", text.TextString);
- if(str is null || str.Trim()==""||str==text.TextString)
- return;
- using (text.ForWrite())
- {
- text.TextString = str;
- }
- }
- finally
- {
- Acap.DocumentManager.DocumentLockModeChanged += DocumentManager_DocumentLockModeChanged;
- }
- }
- }
里面使用了一些IFOX的类,可以自行根据语义替换
对应B站视频教程【CAD二次开发教程-11-重定义单行文字编辑器】
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
查看全部评分
|