替换系统单行文字编辑器 附源码
由于cad自带的文本编辑,双击之后有时会卡顿很久,于是写了一个替换默认文本编辑的代码效果如下
attach://125427.flv
文本框使用的是系统自带的InputBox,主要是分享思路,如果想要更好的效果,可以用wpf写一个窗口
代码如下
public static class DBTextEdit
{
public static void AddEvent()
{
//将此部分代码放在Initialize中可在加载插件后自动添加事件
Acap.DocumentManager.DocumentLockModeChanged -= DocumentManager_DocumentLockModeChanged;
Acap.DocumentManager.DocumentLockModeChanged += DocumentManager_DocumentLockModeChanged;
}
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.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-重定义单行文字编辑器】
liuhe 发表于 2023-3-3 11:28
我一直以为是电脑配置不行,原来是大家都是这个问题。楼主V5
什么配置都会卡,辣鸡cad 我一直以为是电脑配置不行,原来是大家都是这个问题。楼主V5 牛蛙牛蛙,CAD2023雀食容易双击文字就爆炸的。 支持一下。 牛哇牛哇 支持一下。顶起来:lol 牛哇牛哇,白佬666 膜拜大佬,谢谢分享:victory: :handshake 真不错哈哈哈哈
页:
[1]
2