整理代码
This commit is contained in:
611
ShrlAlgoToolkit.RevitAddins/UIRibbon/ModifyTabApp.cs
Normal file
611
ShrlAlgoToolkit.RevitAddins/UIRibbon/ModifyTabApp.cs
Normal file
@@ -0,0 +1,611 @@
|
||||
|
||||
using Autodesk.Revit.DB;
|
||||
using Autodesk.Revit.UI;
|
||||
|
||||
using Autodesk.Windows;
|
||||
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
|
||||
using Nice3point.Revit.Toolkit.External.Handlers;
|
||||
using ShrlAlgo.RvKits.RvCommon;
|
||||
using System.ComponentModel;
|
||||
|
||||
|
||||
using System.Windows.Controls;
|
||||
using ShrlAlgo.Toolkit.Core.Assist;
|
||||
using ShrlAlgoToolkit.Core.Assist;
|
||||
|
||||
namespace ShrlAlgo.RvKits.UIRibbon;
|
||||
|
||||
public class ModifyTabApp
|
||||
{
|
||||
public ModifyTabApp(UIApplication uiapp)
|
||||
{
|
||||
handler = new ActionEventHandler();
|
||||
this.uiapp = uiapp;
|
||||
var tab = ComponentManager.Ribbon.Tabs.FirstOrDefault(ribbonTab => ribbonTab.Id == "Modify");
|
||||
SelectionPanel(tab);
|
||||
//FilterPanel(tab);
|
||||
AlignPanel(tab);
|
||||
}
|
||||
|
||||
private readonly ActionEventHandler handler;
|
||||
private readonly UIApplication uiapp;
|
||||
private Document Document => UIDocument.Document;
|
||||
private UIDocument UIDocument => uiapp.ActiveUIDocument;
|
||||
|
||||
/// <summary>
|
||||
/// 对齐元素
|
||||
/// </summary>
|
||||
/// <param name="alignElements">需对齐的元素集合</param>
|
||||
/// <param name="alignType">对齐的类型</param>
|
||||
private static void AlignByType(List<AlignModelElement> alignElements, AlignType alignType)
|
||||
{
|
||||
switch (alignType)
|
||||
{
|
||||
case AlignType.Left:
|
||||
{
|
||||
//最左的元素
|
||||
var leftAlignElement = alignElements.OrderBy(x => x.UpLeft.X).FirstOrDefault();
|
||||
foreach (var alignElement in alignElements)
|
||||
{
|
||||
XYZ resultingPoint = new(leftAlignElement.UpLeft.X, alignElement.UpLeft.Y, 0);
|
||||
alignElement.MoveTo(resultingPoint, AlignType.Left);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case AlignType.Right:
|
||||
{
|
||||
var rightAlignElement = alignElements.OrderByDescending(x => x.UpRight.X).FirstOrDefault();
|
||||
foreach (var alignElement in alignElements)
|
||||
{
|
||||
XYZ resultingPoint = new(rightAlignElement.UpRight.X, alignElement.UpRight.Y, 0);
|
||||
alignElement.MoveTo(resultingPoint, AlignType.Right);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case AlignType.Up:
|
||||
{
|
||||
var upAlignElement = alignElements.OrderByDescending(x => x.UpRight.Y).FirstOrDefault();
|
||||
foreach (var alignElement in alignElements)
|
||||
{
|
||||
XYZ resultingPoint = new(alignElement.UpRight.X, upAlignElement.UpRight.Y, 0);
|
||||
alignElement.MoveTo(resultingPoint, AlignType.Up);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case AlignType.Down:
|
||||
{
|
||||
var farthestAlign = alignElements.OrderBy(x => x.DownRight.Y).FirstOrDefault();
|
||||
foreach (var alignElement in alignElements)
|
||||
{
|
||||
XYZ resultingPoint = new(alignElement.DownRight.X, farthestAlign.DownRight.Y, 0);
|
||||
alignElement.MoveTo(resultingPoint, AlignType.Down);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case AlignType.HorizontallyCenter: //同一条垂直轴
|
||||
{
|
||||
var sortedElements = alignElements.OrderBy(x => x.UpRight.X).ToList();
|
||||
var rightElement = sortedElements.LastOrDefault();
|
||||
var leftElement = sortedElements.FirstOrDefault();
|
||||
var xCoord = (rightElement.Center.X + leftElement.Center.X) / 2;
|
||||
foreach (var alignElement in sortedElements)
|
||||
{
|
||||
XYZ resultingPoint = new(xCoord, alignElement.Center.Y, 0);
|
||||
alignElement.MoveTo(resultingPoint, AlignType.HorizontallyCenter);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case AlignType.VerticallyCenter: //同一条水平轴
|
||||
{
|
||||
var sortedElements = alignElements.OrderBy(x => x.UpRight.Y).ToList();
|
||||
var upperAlignAnnotation = sortedElements.LastOrDefault();
|
||||
var lowerAlignAnnotation = sortedElements.FirstOrDefault();
|
||||
var yCoord = (upperAlignAnnotation.Center.Y + lowerAlignAnnotation.Center.Y) / 2;
|
||||
foreach (var alignElement in sortedElements)
|
||||
{
|
||||
XYZ resultingPoint = new(alignElement.Center.X, yCoord, 0);
|
||||
alignElement.MoveTo(resultingPoint, AlignType.VerticallyCenter);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case AlignType.Bottom:
|
||||
{
|
||||
var sortedElements = alignElements.OrderBy(z => z.Bottom).ToList();
|
||||
var elevation = sortedElements.FirstOrDefault();
|
||||
foreach (var alignElement in sortedElements)
|
||||
{
|
||||
XYZ resultingPoint = new(0, 0, elevation.Bottom);
|
||||
alignElement.MoveTo(resultingPoint, AlignType.Bottom);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AlignType.Middle:
|
||||
{
|
||||
var sortedElements = alignElements.OrderBy(z => z.Middle).ToList();
|
||||
//var middle = sortedElements.FirstOrDefault();
|
||||
var topAlign = sortedElements.LastOrDefault();
|
||||
var botAlign = sortedElements.FirstOrDefault();
|
||||
var middle = (topAlign.Middle + botAlign.Middle) / 2;
|
||||
foreach (var alignElement in sortedElements)
|
||||
{
|
||||
XYZ resultingPoint = new(0, 0, middle);
|
||||
alignElement.MoveTo(resultingPoint, AlignType.Middle);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AlignType.Top:
|
||||
{
|
||||
var sortedElements = alignElements.OrderByDescending(z => z.Top).ToList();
|
||||
var top = sortedElements.FirstOrDefault();
|
||||
foreach (var alignElement in sortedElements)
|
||||
{
|
||||
XYZ resultingPoint = new(0, 0, top.Top);
|
||||
alignElement.MoveTo(resultingPoint, AlignType.Top);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 对齐命令
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
private void AlignCommand(object obj)
|
||||
{
|
||||
if (obj is not Autodesk.Windows.RibbonButton rb)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var alignType = (AlignType)rb.CommandParameter;
|
||||
handler.Raise(_ =>
|
||||
{
|
||||
Document.Invoke(
|
||||
_ =>
|
||||
{
|
||||
var selectedIds = UIDocument.Selection.GetElementIds();
|
||||
var alignElements = (from id in selectedIds
|
||||
let e = new AlignModelElement(Document.GetElement(id))
|
||||
select e).ToList();
|
||||
//List<AlignModelElement> alignElements = new();
|
||||
//foreach (var id in selectedIds)
|
||||
//{
|
||||
// var e = Document.GetElement(id);
|
||||
// alignElements.Add(new AlignModelElement(e));
|
||||
//}
|
||||
AlignByType(alignElements, alignType);
|
||||
},
|
||||
alignType.GetAttribute<DescriptionAttribute>().Description);
|
||||
});
|
||||
}
|
||||
/// <summary>
|
||||
/// 是否能进行对齐操作
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private bool CanAlign()
|
||||
{
|
||||
return UIDocument?.Selection
|
||||
.GetElementIds()
|
||||
.Count(id => Document.GetElement(id) is GenericForm || Document.GetElement(id).Category?.CategoryType == CategoryType.Model) > 1;
|
||||
}
|
||||
/// <summary>
|
||||
/// 对齐面板
|
||||
/// </summary>
|
||||
/// <param name="tab"></param>
|
||||
private void AlignPanel(RibbonTab tab)
|
||||
{
|
||||
//新建面板
|
||||
Autodesk.Windows.RibbonPanel alignElemsPanel = new() { FloatingOrientation = System.Windows.Controls.Orientation.Vertical };
|
||||
|
||||
//面板资源
|
||||
RibbonPanelSource alignSource = new() { Id = "ID_Layout_Panel", Title = "布局" };
|
||||
alignElemsPanel.Source = alignSource;
|
||||
//面板按钮
|
||||
var alignLeftBtn = new Autodesk.Windows.RibbonButton
|
||||
{
|
||||
Image = Properties.Resources.align_left_16px.ToBitmapSource(),
|
||||
//LargeImage = Properties.Resources.align_left_16px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
Id = "ID_ALL_BTN",
|
||||
Name = "左对齐",
|
||||
ToolTip = "根据几何元素范围,元素左侧对齐",
|
||||
Text = "左对齐",
|
||||
IsCheckable = true,
|
||||
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
|
||||
CommandParameter = AlignType.Left
|
||||
//Orientation = System.Windows.Controls.Orientation.Vertical
|
||||
};
|
||||
var alignRightBtn = new Autodesk.Windows.RibbonButton
|
||||
{
|
||||
Image = Properties.Resources.align_right_16px.ToBitmapSource(),
|
||||
//LargeImage = Properties.Resources.align_right_16px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
Id = "ID_ALR_BTN",
|
||||
Name = "右对齐",
|
||||
ToolTip = "根据几何元素范围,元素右侧对齐",
|
||||
Text = "右对齐",
|
||||
IsCheckable = true,
|
||||
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
|
||||
CommandParameter = AlignType.Right
|
||||
//Orientation = System.Windows.Controls.Orientation.Vertical
|
||||
};
|
||||
|
||||
var alignDownBtn = new Autodesk.Windows.RibbonButton
|
||||
{
|
||||
Image = Properties.Resources.align_down_16px.ToBitmapSource(),
|
||||
//LargeImage = Properties.Resources.align_down_16px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
Id = "ID_ALD_BTN",
|
||||
Name = "下对齐",
|
||||
ToolTip = "根据几何元素范围,元素底部对齐",
|
||||
Text = "下对齐",
|
||||
IsCheckable = true,
|
||||
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
|
||||
CommandParameter = AlignType.Down
|
||||
//Orientation = System.Windows.Controls.Orientation.Vertical
|
||||
};
|
||||
var alignUpBtn = new Autodesk.Windows.RibbonButton
|
||||
{
|
||||
Image = Properties.Resources.align_top_16px.ToBitmapSource(),
|
||||
//LargeImage = Properties.Resources.align_top_16px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
Id = "ID_ALU_BTN",
|
||||
Name = "上对齐",
|
||||
ToolTip = "根据几何元素范围,元素顶部对齐",
|
||||
Text = "上对齐",
|
||||
IsCheckable = true,
|
||||
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
|
||||
CommandParameter = AlignType.Up
|
||||
//Orientation = System.Windows.Controls.Orientation.Vertical
|
||||
};
|
||||
var alignHCBtn = new Autodesk.Windows.RibbonButton
|
||||
{
|
||||
Image = Properties.Resources.align_center_16px.ToBitmapSource(),
|
||||
//LargeImage = Properties.Resources.align_center_16px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
Id = "ID_ALHC_BTN",
|
||||
Name = "水平中",
|
||||
ToolTip = "根据几何元素范围,水平居中",
|
||||
Text = "水平中",
|
||||
IsCheckable = true,
|
||||
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
|
||||
CommandParameter = AlignType.HorizontallyCenter
|
||||
//Orientation = System.Windows.Controls.Orientation.Vertical
|
||||
};
|
||||
var alignVCBtn = new Autodesk.Windows.RibbonButton
|
||||
{
|
||||
Image = Properties.Resources.align_middle_16px.ToBitmapSource(),
|
||||
//LargeImage = Properties.Resources.align_middle_16px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
Id = "ID_ALVC_BTN",
|
||||
Name = "垂直中",
|
||||
ToolTip = "根据几何元素范围,垂直居中",
|
||||
Text = "垂直中",
|
||||
IsCheckable = true,
|
||||
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
|
||||
CommandParameter = AlignType.VerticallyCenter
|
||||
//Orientation = System.Windows.Controls.Orientation.Vertical
|
||||
};
|
||||
var alignTopBtn = new Autodesk.Windows.RibbonButton
|
||||
{
|
||||
Image = Properties.Resources.top_elev_16px.ToBitmapSource(),
|
||||
LargeImage = Properties.Resources.top_elev_32px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
ToolTip = "几何元素顶部高程对齐",
|
||||
Id = "ID_ALT_BTN",
|
||||
Name = "顶对齐",
|
||||
Text = "顶对齐",
|
||||
IsCheckable = true,
|
||||
//默认水平,文字与图标
|
||||
//Orientation = Orientation.Vertical,
|
||||
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
|
||||
CommandParameter = AlignType.Top
|
||||
};
|
||||
var alignMiddleBtn = new Autodesk.Windows.RibbonButton
|
||||
{
|
||||
Image = Properties.Resources.middle_elev_16px.ToBitmapSource(),
|
||||
LargeImage = Properties.Resources.middle_elev_32px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
ToolTip = "几何元素中心高程对齐",
|
||||
Id = "ID_ALM_BTN",
|
||||
Name = "中对齐",
|
||||
Text = "中对齐",
|
||||
IsCheckable = true,
|
||||
//Orientation = Orientation.Vertical,
|
||||
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
|
||||
CommandParameter = AlignType.Middle
|
||||
};
|
||||
var alignBottomBtn = new Autodesk.Windows.RibbonButton
|
||||
{
|
||||
Image = Properties.Resources.bottom_elev_16px.ToBitmapSource(),
|
||||
LargeImage = Properties.Resources.bottom_elev_32px.ToBitmapSource(),
|
||||
//Standard为16px,Large为32px
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
ToolTip = "几何元素底部高程对齐",
|
||||
Id = "ID_ALB_BTN",
|
||||
Name = "底对齐",
|
||||
Text = "底对齐",
|
||||
IsCheckable = true,
|
||||
//Orientation = Orientation.Vertical,
|
||||
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
|
||||
CommandParameter = AlignType.Bottom
|
||||
};
|
||||
|
||||
//面板行布局
|
||||
RibbonRowPanel ribbonRowPanel = new();
|
||||
ribbonRowPanel.Items.Add(alignLeftBtn);
|
||||
ribbonRowPanel.Items.Add(alignRightBtn);
|
||||
//换行
|
||||
ribbonRowPanel.Items.Add(new RibbonRowBreak());
|
||||
ribbonRowPanel.Items.Add(alignUpBtn);
|
||||
ribbonRowPanel.Items.Add(alignDownBtn);
|
||||
ribbonRowPanel.Items.Add(new RibbonRowBreak());
|
||||
ribbonRowPanel.Items.Add(alignHCBtn);
|
||||
ribbonRowPanel.Items.Add(alignVCBtn);
|
||||
//第二个面板行布局
|
||||
RibbonRowPanel ribbonRowPanel1 = new();
|
||||
ribbonRowPanel1.Items.Add(alignTopBtn);
|
||||
ribbonRowPanel1.Items.Add(new RibbonRowBreak());
|
||||
ribbonRowPanel1.Items.Add(alignMiddleBtn);
|
||||
ribbonRowPanel1.Items.Add(new RibbonRowBreak());
|
||||
ribbonRowPanel1.Items.Add(alignBottomBtn);
|
||||
|
||||
//布局添加到面板数据源
|
||||
alignSource.Items.Add(ribbonRowPanel);
|
||||
alignSource.Items.Add(ribbonRowPanel1);
|
||||
tab.Panels.Add(alignElemsPanel);
|
||||
}
|
||||
/// <summary>
|
||||
/// 选择元素面板
|
||||
/// </summary>
|
||||
/// <param name="tab"></param>
|
||||
private void SelectionPanel(RibbonTab tab)
|
||||
{
|
||||
//新建面板
|
||||
Autodesk.Windows.RibbonPanel ribbonPanel = new() { FloatingOrientation = System.Windows.Controls.Orientation.Vertical };
|
||||
|
||||
//面板资源
|
||||
RibbonPanelSource selSource = new() { Id = "ID_SSI_Panel", Title = "选择元素" };
|
||||
ribbonPanel.Source = selSource;
|
||||
|
||||
//面板按钮
|
||||
Autodesk.Windows.RibbonButton iavBtn =
|
||||
new()
|
||||
{
|
||||
//Image = new System.Windows.Media.Imaging.BitmapImage(new Uri(icopath)),
|
||||
Image = Properties.Resources.select_on_view_16px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
Id = "ID_IAV_BTN",
|
||||
Name = "视图类似实例",
|
||||
ToolTip = "选择视图中的同类型实例",
|
||||
Text = "视图类似实例",
|
||||
IsCheckable = true,
|
||||
CommandHandler = new RelayCommand(
|
||||
() =>
|
||||
{
|
||||
//var selectedIds = UIDocument.Selection.GetElementIds();
|
||||
//var groups = selectedIds.GroupBy(id => Document.GetElement(id).GetTypeId());
|
||||
var col = new FilteredElementCollector(Document, UIDocument.ActiveView.Id);
|
||||
var typeIds = UIDocument.Selection
|
||||
.GetElementIds()
|
||||
.Where(id => Document.GetElement(id).GetTypeId() != null)
|
||||
.Select(id => Document.GetElement(id).GetTypeId())
|
||||
.Distinct()
|
||||
.ToList();
|
||||
//ICollection<ElementId> setSelIds = (from t in types
|
||||
// select Document.GetElement(t.Id) into selectedElement
|
||||
// from item in col
|
||||
// where selectedElement.Id == item.GetTypeId() && item.Category != null
|
||||
// select item.Id)
|
||||
var setSelIds = (
|
||||
from typeId in typeIds
|
||||
from elem in col
|
||||
where typeId == elem.GetTypeId() && elem.Category != null
|
||||
select elem.Id
|
||||
).ToList();
|
||||
UIDocument.Selection.SetElementIds(setSelIds);
|
||||
},
|
||||
() =>
|
||||
UIDocument?.Selection
|
||||
.GetElementIds()
|
||||
.Any(id => Document.GetElement(id).GetTypeId() != ElementId.InvalidElementId && Document.GetElement(id).Category != null)
|
||||
== true
|
||||
)
|
||||
//Orientation = System.Windows.Controls.Orientation.Vertical
|
||||
};
|
||||
Autodesk.Windows.RibbonButton iipBtn =
|
||||
new()
|
||||
{
|
||||
Image = Properties.Resources.select_on_project_16px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
Id = "ID_IIP_BTN",
|
||||
//下拉显示名
|
||||
Name = "项目类似实例",
|
||||
ToolTip = "选择项目中的同类型实例",
|
||||
//选中显示名
|
||||
Text = "项目类似实例",
|
||||
IsCheckable = true,
|
||||
CommandHandler = new RelayCommand(
|
||||
() =>
|
||||
{
|
||||
//var selectedIds = UIDocument.Selection.GetElementIds();
|
||||
var typeIds = UIDocument.Selection
|
||||
.GetElementIds()
|
||||
.Where(id => Document.GetElement(id).GetTypeId() != null)
|
||||
.Select(id => Document.GetElement(id).GetTypeId())
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var col = Document.OfCollector().WhereElementIsNotElementType();
|
||||
//var groups = selectedIds.GroupBy(id => Document.GetElement(id).GetTypeId());
|
||||
var setSelIds = (
|
||||
from typeId in typeIds
|
||||
from elem in col
|
||||
where typeId == elem.GetTypeId() && elem.Category != null
|
||||
select elem.Id
|
||||
).ToList();
|
||||
UIDocument.Selection.SetElementIds(setSelIds);
|
||||
},
|
||||
() =>
|
||||
UIDocument?.Selection
|
||||
.GetElementIds()
|
||||
.Any(id => Document.GetElement(id).Category != null && Document.GetElement(id).GetTypeId() != ElementId.InvalidElementId)
|
||||
== true
|
||||
)
|
||||
|
||||
//Orientation = System.Windows.Controls.Orientation.Vertical
|
||||
};
|
||||
|
||||
Autodesk.Windows.RibbonButton rSelBtn =
|
||||
new()
|
||||
{
|
||||
Image = Properties.Resources.select_3d_object_16px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Standard,
|
||||
ShowText = true,
|
||||
Id = "ID_BS_BTN",
|
||||
//下拉显示名
|
||||
Name = "框选类似实例",
|
||||
ToolTip = "框选与当前选择实例同类型的实例",
|
||||
//选中显示名
|
||||
Text = "框选类似实例",
|
||||
IsCheckable = true,
|
||||
CommandHandler = new RelayCommand(
|
||||
() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
var typeIds = UIDocument.Selection
|
||||
.GetElementIds()
|
||||
.Where(id => Document.GetElement(id).GetTypeId() != null)
|
||||
.Select(id => Document.GetElement(id).GetTypeId())
|
||||
.Distinct()
|
||||
.ToList();
|
||||
var setSelectedElemIds = new List<ElementId>();
|
||||
var sameTypesFilter = new FuncFilter(elem =>
|
||||
{
|
||||
return typeIds.Any(id => id.Equals(elem.GetTypeId()));
|
||||
});
|
||||
var elements = UIDocument.Selection.PickElementsByRectangle(sameTypesFilter, "请框选与当前选择元素相同的实例");
|
||||
setSelectedElemIds.AddRange(elements.Select(e => e.Id));
|
||||
UIDocument.Selection.SetElementIds(setSelectedElemIds);
|
||||
}
|
||||
catch (Autodesk.Revit.Exceptions.OperationCanceledException)
|
||||
{
|
||||
|
||||
}
|
||||
},
|
||||
() =>
|
||||
{
|
||||
return UIDocument?.Selection
|
||||
.GetElementIds()
|
||||
.Any(id =>
|
||||
{
|
||||
var elem = Document.GetElement(id);
|
||||
return elem.Category != null && elem.GetTypeId() != ElementId.InvalidElementId;
|
||||
}) == true;
|
||||
}
|
||||
)
|
||||
//Orientation = System.Windows.Controls.Orientation.Vertical
|
||||
};
|
||||
//面板按钮
|
||||
Autodesk.Windows.RibbonButton selFilterBtn =
|
||||
new()
|
||||
{
|
||||
//Image = new System.Windows.Media.Imaging.BitmapImage(new Uri(icopath)),
|
||||
Image = Properties.Resources.select_filter_16px.ToBitmapSource(),
|
||||
LargeImage = Properties.Resources.select_filter_32px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Large,
|
||||
ShowText = true,
|
||||
Id = "ID_Filter_BTN",
|
||||
Name = "构件明细",
|
||||
ToolTip = "查看选中的元素",
|
||||
Text = "构件明细",
|
||||
IsCheckable = true,
|
||||
Orientation = Orientation.Vertical,
|
||||
CommandHandler = new RelayCommand(
|
||||
() => WinDialogHelper.ShowModeless<DetailSelectFiltersView>(new DetailSelectFiltersViewModel(uiapp, handler)),
|
||||
() =>
|
||||
UIDocument?.Selection
|
||||
.GetElementIds()
|
||||
.Any(id => Document.GetElement(id).GetTypeId() != ElementId.InvalidElementId && Document.GetElement(id).Category != null)
|
||||
== true
|
||||
)
|
||||
};
|
||||
//面板行布局
|
||||
RibbonRowPanel ribbonRowPanel = new();
|
||||
ribbonRowPanel.AddAwStackItems(iavBtn, iipBtn, rSelBtn);
|
||||
|
||||
//ribbonRowPanel.Items.Add(iavBtn);
|
||||
////行打断=新建行
|
||||
//ribbonRowPanel.Items.Add(new RibbonRowBreak());
|
||||
//ribbonRowPanel.Items.Add(iipBtn);
|
||||
//ribbonRowPanel.Items.Add(new RibbonRowBreak());
|
||||
//ribbonRowPanel.Items.Add(rSelBtn);
|
||||
|
||||
RibbonRowPanel ribbonRowPanel1 = new();
|
||||
ribbonRowPanel1.Items.Add(selFilterBtn);
|
||||
//ribbonPanel.Source.Items.Add(selFilterBtn);
|
||||
//布局添加到面板数据源
|
||||
selSource.Items.Add(ribbonRowPanel);
|
||||
selSource.Items.Add(ribbonRowPanel1);
|
||||
////分隔条
|
||||
//RibbonSeparator rsP = new RibbonSeparator();
|
||||
//rsP.SeparatorStyle = RibbonSeparatorStyle.Invisible;
|
||||
tab.Panels.Add(ribbonPanel);
|
||||
}
|
||||
|
||||
private void FilterPanel(RibbonTab tab)
|
||||
{
|
||||
Autodesk.Windows.RibbonPanel ribbonPanel = new();
|
||||
//面板资源
|
||||
RibbonPanelSource filterSource = new() { Id = "ID_Filter_Panel", Title = "选择过滤" };
|
||||
ribbonPanel.Source = filterSource;
|
||||
//面板按钮
|
||||
Autodesk.Windows.RibbonButton btn =
|
||||
new()
|
||||
{
|
||||
//Image = new System.Windows.Media.Imaging.BitmapImage(new Uri(icopath)),
|
||||
Image = Properties.Resources.select_filter_16px.ToBitmapSource(),
|
||||
LargeImage = Properties.Resources.select_filter_32px.ToBitmapSource(),
|
||||
Size = RibbonItemSize.Large,
|
||||
ShowText = true,
|
||||
Id = "ID_Filter_BTN",
|
||||
Name = "选择过滤",
|
||||
ToolTip = "查看选中的元素",
|
||||
Text = "选择过滤",
|
||||
IsCheckable = true,
|
||||
Orientation = Orientation.Vertical,
|
||||
CommandHandler = new RelayCommand(
|
||||
() => WinDialogHelper.ShowModeless<DetailSelectFiltersView>(new DetailSelectFiltersViewModel(uiapp, handler)),
|
||||
() =>
|
||||
UIDocument?.Selection
|
||||
.GetElementIds()
|
||||
.Any(id => Document.GetElement(id).GetTypeId() != ElementId.InvalidElementId && Document.GetElement(id).Category != null)
|
||||
== true
|
||||
)
|
||||
};
|
||||
ribbonPanel.Source.Items.Add(btn);
|
||||
tab.Panels.Add(ribbonPanel);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user