using Autodesk.Windows;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace LRH.Tool.RevitUI
{
///
/// RevitUI操作相关
///
public class RevitUIUtils
{
///
/// 收集CommandIds
///
///
public static StringBuilder CollectCommandIds()
{
RibbonControl control = ComponentManager.Ribbon;
StringBuilder builder = new StringBuilder();
foreach (var currentTab in control.Tabs)
{
foreach (var currentPanel in currentTab.Panels)
{
foreach (var item in currentPanel.Source.Items)
{
//if(!(item is RibbonCommandItem||item is RibbonCheckBox))
//{
// continue;
//}
if(item is RibbonListButton listButton)
{
foreach (var currentItem in listButton.Items)
{
if (currentItem.Id == "ID_TOGGLE_PROPERTIES_PALETTE")
{
}
builder.Append(string.Format("【{0}】", currentTab.Title));
builder.Append("→");
builder.Append(string.Format("【{0}】", currentPanel.Source.Title));
builder.Append("→");
builder.Append(string.Format("【{0}】", currentItem.Text));
builder.Append(string.Format(":{0}", currentItem.Id));
builder.AppendLine();
}
}
else
{
builder.Append(string.Format("【{0}】", currentTab.Title));
builder.Append("→");
builder.Append(string.Format("【{0}】", currentPanel.Source.Title));
builder.Append("→");
builder.Append(string.Format("【{0}】", item.Text));
builder.Append(string.Format(":{0}", item.Id));
builder.AppendLine();
}
}
}
}
return builder;
}
#region 命令UI信息
//可以实实在在的取到命令
// var autoPlaceSpace=RevitCommandId.LookupCommandId("ID_SKETCH_PLANE_TOOL");
// RevitCore.UIApp.PostCommand(RevitCommandId.LookupPostableCommandId(PostableCommand.Space));
//ComponentManager.ItemExecuted += ComponentManager_ItemExecuted;
//按名字去寻找命令ID
// var autoPlaceSpace = RevitCommandId.LookupCommandId("Dialog_RoomAreaPlan_RoomTagDlgBar: Control_RoomAreaPlan_FindAllSpaces");
// AddInCommandBinding binding = RevitCore.UIApp.CreateAddInCommandBinding(RevitCommandId.LookupPostableCommandId(PostableCommand.Space));
#endregion
public static void SetIsChecked(RibbonItem item, bool flag)
{
var useType = typeof(RibbonItem).Assembly.GetType("Autodesk.Internal.Windows.RibbonCommandItemBindings");
MethodInfo mi = useType.GetMethod("TrySetIsChecked");
if (mi != null)
{
mi?.Invoke(null, new object[] { item,flag });
}
}
}
}