- 积分
- 30299
- 明经币
- 个
- 注册时间
- 2016-9-16
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 fangmin723 于 2024-6-19 16:42 编辑
封装的水平有限,大佬请略过哈
按关键字【A】可以切换到添加图元
按关键字【R】可以切换到删除图元
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.Runtime;
- using Autodesk.AutoCAD.Geometry;
- using Acap = Autodesk.AutoCAD.ApplicationServices.Application;
- /// <summary>
- /// 将关键字处理添加到AutoCAD.NET的GetSelection()<br/>
- /// <see href="https://www.keanw.com/2010/05/adding-keyword-handling-to-autocad-nets-getselection.html"/>
- /// </summary>
- [CmdDescription("", "将关键字处理添加到AutoCAD.NET的GetSelection()", "Adding keyword handling to AutoCAD .NET’s GetSelection()")]
- [CommandMethod(nameof(SELKW), CommandFlags.Session | CommandFlags.UsePickSet)]
- public void SELKW()
- {
- var doc = Acap.DocumentManager.MdiActiveDocument;
- var ed = doc.Editor;
- var psr = ed.GetSelectionEx("\n将对象添加到所选内容",
- pso =>
- {
- pso.MessageForRemoval = $"\n从选择中删除对象{pso.Keywords.GetDisplayString(true)}";
- },
- keyWords: [new KeyWord("FIrst"), new KeyWord("Second")],
- keyWordAction: e =>
- {
- ed.WriteMessage("\n输入的关键字:{0}", e.Input);
- });
- if (psr.Status == PromptStatus.OK)
- {
- ed.WriteMessage($"\n选中 {psr.Value.Count} 个对象。");
- }
- }
- /// <summary>
- /// 获取选择集
- /// </summary>
- /// <param name="editor">用户交互对象</param>
- /// <param name="message">文本提示</param>
- /// <param name="filter">过滤条件</param>
- /// <param name="optionsAction">选择集选项设置委托</param>
- /// <param name="keyWords">关键字信息集合</param>
- /// <param name="keyWordAction">关键字回调委托</param>
- /// <returns>获取结果:PromptSelectionResult</returns>
- public static PromptSelectionResult GetSelectionEx
- (this Editor editor, string message, Action<romptSelectionOptions> optionsAction = null,
- SelectionFilter filter = null, IEnumerable<KeyWord> keyWords = null,
- Action<SelectionTextInputEventArgs> keyWordAction = null)
- {
- void Pso_KeywordInput(object sender, SelectionTextInputEventArgs e)
- {
- keyWordAction?.Invoke(e);
- }
- var pso = new PromptSelectionOptions();
- if (keyWords is not null && keyWords?.Count() > 0)
- {
- keyWords?.ForEach(kw =>
- {
- pso.Keywords.Add(kw.GlobalName, kw.LocalName, kw.DisplayName, kw.Visible, kw.Enabled);
- });
- pso.MessageForAdding = $"{message}{pso.Keywords.GetDisplayString(true)}";
- pso.KeywordInput += Pso_KeywordInput;
- }
- else
- {
- pso.MessageForAdding = message;
- }
- optionsAction?.Invoke(pso);
- return filter switch
- {
- not null => editor.GetSelection(pso, filter),
- _ => editor.GetSelection(pso)
- };
- }
- /// <summary>
- /// 关键字信息对象
- /// </summary>
- /// <param name="globalName">输入关键字的全局名称;这永远不会显示,但当本地翻译未知时,程序可以使用它来访问关键字。</param>
- /// <param name="localName">输入关键字的本地名称;用户输入本地名称以指定关键字。</param>
- /// <param name="displayName">输入关键字的显示名称;这显示在命令行上,通常与本地名称相同。</param>
- /// <param name="visible">输入指示是否应向用户显示关键字。</param>
- /// <param name="enabled">输入表示关键字当前是否启用;默认true,为false时将不接受用户输入。</param>
- public class KeyWord(string globalName, string localName, string displayName, bool visible, bool enabled)
- {
- /// <summary>
- /// 关键字信息对象一参构造
- /// </summary>
- /// <param name="globalName">输入关键字的全局名称;这永远不会显示,但当本地翻译未知时,程序可以使用它来访问关键字。</param>
- public KeyWord(string globalName)
- : this(globalName, globalName, globalName, true, true) { }
- /// <summary>
- /// 关键字信息对象二参构造
- /// </summary>
- /// <param name="globalName">输入关键字的全局名称;这永远不会显示,但当本地翻译未知时,程序可以使用它来访问关键字。</param>
- /// <param name="localName">输入关键字的本地名称;用户输入本地名称以指定关键字。</param>
- public KeyWord(string globalName, string localName)
- : this(globalName, localName, localName, true, true) { }
- /// <summary>
- /// 关键字信息对象三参构造
- /// </summary>
- /// <param name="globalName">输入关键字的全局名称;这永远不会显示,但当本地翻译未知时,程序可以使用它来访问关键字。</param>
- /// <param name="localName">输入关键字的本地名称;用户输入本地名称以指定关键字。</param>
- /// <param name="displayName">输入关键字的显示名称;这显示在命令行上,通常与本地名称相同。</param>
- public KeyWord(string globalName, string localName, string displayName)
- : this(globalName, localName, displayName, true, true) { }
- /// <summary>
- /// 关键字信息对象四参构造
- /// </summary>
- /// <param name="globalName">输入关键字的全局名称;这永远不会显示,但当本地翻译未知时,程序可以使用它来访问关键字。</param>
- /// <param name="localName">输入关键字的本地名称;用户输入本地名称以指定关键字。</param>
- /// <param name="displayName">输入关键字的显示名称;这显示在命令行上,通常与本地名称相同。</param>
- /// <param name="visible">输入指示是否应向用户显示关键字。</param>
- public KeyWord(string globalName, string localName, string displayName, bool visible)
- : this(globalName, localName, displayName, visible, true) { }
- /// <summary>
- /// 关键字的全局名称;这永远不会显示,但当本地翻译未知时,程序可以使用它来访问关键字。
- /// </summary>
- public string GlobalName { get; set; } = globalName;
- /// <summary>
- /// 关键字的本地名称;用户输入本地名称以指定关键字。
- /// </summary>
- public string LocalName { get; set; } = localName;
- /// <summary>
- /// 关键字的显示名称;这显示在命令行上,通常与本地名称相同。
- /// </summary>
- public string DisplayName { get; set; } = displayName;
- /// <summary>
- /// 否应向用户显示关键字。
- /// </summary>
- public bool Visible { get; set; } = visible;
- /// <summary>
- /// 当前是否启用;默认true,为false时将不接受用户输入。
- /// </summary>
- public bool Enabled { get; set; } = enabled;
- }
|
评分
-
查看全部评分
|