多项功能优化

This commit is contained in:
GG Z
2024-12-22 10:26:12 +08:00
parent 77655c9ef5
commit 83b846f15f
66 changed files with 5424 additions and 2927 deletions

View File

@@ -1,4 +1,5 @@
using System.Windows.Controls;
using System.ComponentModel;
using System.Windows.Controls;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
@@ -40,10 +41,11 @@ public class ModifyTabApp
{
case AlignType.Left:
{
var farthestAlign = alignElements.OrderBy(x => x.UpLeft.X).FirstOrDefault();
//最左的元素
var leftAlignElement = alignElements.OrderBy(x => x.UpLeft.X).FirstOrDefault();
foreach (var alignElement in alignElements)
{
XYZ resultingPoint = new(farthestAlign.UpLeft.X, alignElement.UpLeft.Y, 0);
XYZ resultingPoint = new(leftAlignElement.UpLeft.X, alignElement.UpLeft.Y, 0);
alignElement.MoveTo(resultingPoint, AlignType.Left);
}
@@ -52,10 +54,10 @@ public class ModifyTabApp
case AlignType.Right:
{
var farthestAlign = alignElements.OrderByDescending(x => x.UpRight.X).FirstOrDefault();
var rightAlignElement = alignElements.OrderByDescending(x => x.UpRight.X).FirstOrDefault();
foreach (var alignElement in alignElements)
{
XYZ resultingPoint = new(farthestAlign.UpRight.X, alignElement.UpRight.Y, 0);
XYZ resultingPoint = new(rightAlignElement.UpRight.X, alignElement.UpRight.Y, 0);
alignElement.MoveTo(resultingPoint, AlignType.Right);
}
@@ -64,10 +66,10 @@ public class ModifyTabApp
case AlignType.Up:
{
var farthestAlign = alignElements.OrderByDescending(x => x.UpRight.Y).FirstOrDefault();
var upAlignElement = alignElements.OrderByDescending(x => x.UpRight.Y).FirstOrDefault();
foreach (var alignElement in alignElements)
{
XYZ resultingPoint = new(alignElement.UpRight.X, farthestAlign.UpRight.Y, 0);
XYZ resultingPoint = new(alignElement.UpRight.X, upAlignElement.UpRight.Y, 0);
alignElement.MoveTo(resultingPoint, AlignType.Up);
}
@@ -87,9 +89,9 @@ public class ModifyTabApp
case AlignType.HorizontallyCenter: //同一条垂直轴
{
var sortedElements = alignElements.OrderBy(x => x.UpRight.X).ToList();
var rightAlignAnnotation = sortedElements.LastOrDefault();
var leftAlignAnnotation = sortedElements.FirstOrDefault();
var xCoord = (rightAlignAnnotation.Center.X + leftAlignAnnotation.Center.X) / 2;
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);
@@ -151,8 +153,11 @@ public class ModifyTabApp
}
}
}
private void Align(object obj)
/// <summary>
/// 对齐命令
/// </summary>
/// <param name="obj"></param>
private void AlignCommand(object obj)
{
if (obj is not Autodesk.Windows.RibbonButton rb)
{
@@ -162,11 +167,13 @@ public class ModifyTabApp
var alignType = (AlignType)rb.CommandParameter;
handler.Raise(_ =>
{
Document.Invoke(
Document.Invoke(
_ =>
{
var selectedIds = UIDocument.Selection.GetElementIds();
var alignElements = (from id in selectedIds let e = new AlignModelElement(Document.GetElement(id)) select e).ToList();
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)
//{
@@ -175,18 +182,23 @@ public class ModifyTabApp
//}
AlignByType(alignElements, alignType);
},
alignType.GetDescription()
);
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)
{
//新建面板
@@ -207,7 +219,7 @@ public class ModifyTabApp
ToolTip = "根据几何元素范围,元素左侧对齐",
Text = "左对齐",
IsCheckable = true,
CommandHandler = new RelayCommand<object>(Align, _ => CanAlign()),
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
CommandParameter = AlignType.Left
//Orientation = System.Windows.Controls.Orientation.Vertical
};
@@ -222,7 +234,7 @@ public class ModifyTabApp
ToolTip = "根据几何元素范围,元素右侧对齐",
Text = "右对齐",
IsCheckable = true,
CommandHandler = new RelayCommand<object>(Align, _ => CanAlign()),
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
CommandParameter = AlignType.Right
//Orientation = System.Windows.Controls.Orientation.Vertical
};
@@ -238,7 +250,7 @@ public class ModifyTabApp
ToolTip = "根据几何元素范围,元素底部对齐",
Text = "下对齐",
IsCheckable = true,
CommandHandler = new RelayCommand<object>(Align, _ => CanAlign()),
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
CommandParameter = AlignType.Down
//Orientation = System.Windows.Controls.Orientation.Vertical
};
@@ -253,7 +265,7 @@ public class ModifyTabApp
ToolTip = "根据几何元素范围,元素顶部对齐",
Text = "上对齐",
IsCheckable = true,
CommandHandler = new RelayCommand<object>(Align, _ => CanAlign()),
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
CommandParameter = AlignType.Up
//Orientation = System.Windows.Controls.Orientation.Vertical
};
@@ -268,7 +280,7 @@ public class ModifyTabApp
ToolTip = "根据几何元素范围,水平居中",
Text = "水平中",
IsCheckable = true,
CommandHandler = new RelayCommand<object>(Align, _ => CanAlign()),
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
CommandParameter = AlignType.HorizontallyCenter
//Orientation = System.Windows.Controls.Orientation.Vertical
};
@@ -283,7 +295,7 @@ public class ModifyTabApp
ToolTip = "根据几何元素范围,垂直居中",
Text = "垂直中",
IsCheckable = true,
CommandHandler = new RelayCommand<object>(Align, _ => CanAlign()),
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
CommandParameter = AlignType.VerticallyCenter
//Orientation = System.Windows.Controls.Orientation.Vertical
};
@@ -300,7 +312,7 @@ public class ModifyTabApp
IsCheckable = true,
//默认水平,文字与图标
//Orientation = Orientation.Vertical,
CommandHandler = new RelayCommand<object>(Align, _ => CanAlign()),
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
CommandParameter = AlignType.Top
};
var alignMiddleBtn = new Autodesk.Windows.RibbonButton
@@ -315,7 +327,7 @@ public class ModifyTabApp
Text = "中对齐",
IsCheckable = true,
//Orientation = Orientation.Vertical,
CommandHandler = new RelayCommand<object>(Align, _ => CanAlign()),
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
CommandParameter = AlignType.Middle
};
var alignBottomBtn = new Autodesk.Windows.RibbonButton
@@ -331,7 +343,7 @@ public class ModifyTabApp
Text = "底对齐",
IsCheckable = true,
//Orientation = Orientation.Vertical,
CommandHandler = new RelayCommand<object>(Align, _ => CanAlign()),
CommandHandler = new RelayCommand<object>(AlignCommand, _ => CanAlign()),
CommandParameter = AlignType.Bottom
};
@@ -359,7 +371,10 @@ public class ModifyTabApp
alignSource.Items.Add(ribbonRowPanel1);
tab.Panels.Add(alignElemsPanel);
}
/// <summary>
/// 选择元素面板
/// </summary>
/// <param name="tab"></param>
private void SelectionPanel(RibbonTab tab)
{
//新建面板
@@ -509,7 +524,6 @@ public class ModifyTabApp
)
//Orientation = System.Windows.Controls.Orientation.Vertical
};
//面板按钮
Autodesk.Windows.RibbonButton selFilterBtn =
new()
@@ -526,7 +540,7 @@ public class ModifyTabApp
IsCheckable = true,
Orientation = Orientation.Vertical,
CommandHandler = new RelayCommand(
() => WinDialogHelper.ShowModeless<DetailSelectFiltersView>(new DetailSelectFiltersViewModel(uiapp, handler)),
() => WinDialogHelper.ShowModeless<DetailSelectFiltersView>(new DetailSelectFiltersViewModel(uiapp, handler)),
() =>
UIDocument?.Selection
.GetElementIds()