多项功能优化
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user