日常更新
This commit is contained in:
@@ -14,6 +14,9 @@ namespace Szmedi.RvKits.MEPTools
|
||||
{
|
||||
public override void Execute()
|
||||
{
|
||||
#if DEBUG
|
||||
GlobalVariables.UIApplication=this.UiApplication;
|
||||
#endif
|
||||
WinDialogAssists.ShowOrActivate<FacilityInfoProcessView, FacilityInfoProcessViewModel>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
Title="设备信息"
|
||||
Width="800"
|
||||
Height="450"
|
||||
Width="900"
|
||||
Height="600"
|
||||
d:DataContext="{d:DesignInstance Type=local:FacilityInfoProcessViewModel}"
|
||||
mc:Ignorable="d">
|
||||
<controls:MaterialWindow.Resources>
|
||||
@@ -34,13 +34,15 @@
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" MinWidth="200" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="300" MinWidth="100" />
|
||||
<ColumnDefinition Width="250" MinWidth="100" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<GroupBox Header="设备表">
|
||||
<GroupBox materialDesign:GroupBoxAssist.HeaderPadding="4" Header="设备表">
|
||||
<DataGrid
|
||||
x:Name="Facilities"
|
||||
Margin="-4"
|
||||
d:ItemsSource="{d:SampleData ItemCount=5}"
|
||||
materialDesign:DataGridAssist.CellPadding="8,0"
|
||||
materialDesign:DataGridAssist.ColumnHeaderPadding="6"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserAddRows="False"
|
||||
FrozenColumnCount="2"
|
||||
@@ -59,24 +61,19 @@
|
||||
</Style>
|
||||
</DataGrid.RowStyle>
|
||||
<DataGrid.RowDetailsTemplate>
|
||||
<DataTemplate>
|
||||
<GroupBox Header="参数列表">
|
||||
<ItemsControl ItemsSource="{Binding Parameters}">
|
||||
<DataTemplate DataType="local:FacilityItem">
|
||||
<GroupBox materialDesign:GroupBoxAssist.HeaderPadding="4" Header="参数列表">
|
||||
<ItemsControl d:ItemsSource="{d:SampleData ItemCount=5}" ItemsSource="{Binding Parameters}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Margin="2" Orientation="Horizontal">
|
||||
<TextBlock
|
||||
Width="250"
|
||||
HorizontalAlignment="Right"
|
||||
VerticalAlignment="Center"
|
||||
FontWeight="Bold"
|
||||
Text="{Binding Name}" />
|
||||
<TextBox
|
||||
Padding="3"
|
||||
VerticalContentAlignment="Center"
|
||||
materialDesign:HintAssist.IsFloating="False"
|
||||
Text="{Binding Value, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</StackPanel>
|
||||
<DataTemplate DataType="local:ParameterItem">
|
||||
<TextBox
|
||||
Padding="2"
|
||||
HorizontalAlignment="Left"
|
||||
VerticalContentAlignment="Center"
|
||||
materialDesign:HintAssist.IsFloating="False"
|
||||
materialDesign:TextFieldAssist.PrefixText="{Binding Name, StringFormat={}{0}:}"
|
||||
Style="{StaticResource MaterialDesignTextBox}"
|
||||
Text="{Binding Value, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
@@ -87,9 +84,10 @@
|
||||
|
||||
<DataGridCheckBoxColumn Binding="{Binding IsSelected}">
|
||||
<DataGridCheckBoxColumn.Header>
|
||||
<Border Background="Transparent">
|
||||
<CheckBox Content="全选" IsChecked="{Binding DataContext.IsAllItemsSelected, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
|
||||
</Border>
|
||||
<CheckBox
|
||||
VerticalContentAlignment="Center"
|
||||
Content="全选"
|
||||
IsChecked="{Binding DataContext.IsAllItemsSelected, RelativeSource={RelativeSource AncestorType=DataGrid}}" />
|
||||
</DataGridCheckBoxColumn.Header>
|
||||
<DataGridCheckBoxColumn.HeaderStyle>
|
||||
<Style BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}" TargetType="{x:Type DataGridColumnHeader}">
|
||||
@@ -224,6 +222,7 @@
|
||||
<GroupBox
|
||||
Grid.Row="0"
|
||||
Grid.Column="2"
|
||||
materialDesign:GroupBoxAssist.HeaderPadding="4"
|
||||
Header="构件实例表">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
@@ -234,6 +233,8 @@
|
||||
x:Name="InstancesDG"
|
||||
Margin="-4"
|
||||
d:ItemsSource="{d:SampleData ItemCount=5}"
|
||||
materialDesign:DataGridAssist.CellPadding="8,0"
|
||||
materialDesign:DataGridAssist.ColumnHeaderPadding="6"
|
||||
AutoGenerateColumns="False"
|
||||
CanUserAddRows="False"
|
||||
ItemsSource="{Binding ElementName=Facilities, Path=SelectedItem.Instances}"
|
||||
@@ -310,7 +311,6 @@
|
||||
</Button>
|
||||
<GridSplitter Width="2" Background="Gray" />
|
||||
<Button
|
||||
Grid.Row="1"
|
||||
Margin="2,0"
|
||||
Command="{Binding RepickInstancesByRectangleCommand}"
|
||||
CommandParameter="{Binding SelectedFacility.MappedFamily}"
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace Szmedi.RvKits.MEPTools
|
||||
public ICollectionView InstancesCollectionView { get; set; }
|
||||
public FacilityInfoProcessViewModel()
|
||||
{
|
||||
GlobalVariables.UIApplication.ViewActivated += UIApplication_ViewActivated;
|
||||
GlobalVariables.UIApplication?.ViewActivated += UIApplication_ViewActivated;
|
||||
handler = new ActionEventHandler();
|
||||
}
|
||||
[RelayCommand]
|
||||
@@ -63,12 +63,11 @@ namespace Szmedi.RvKits.MEPTools
|
||||
AppDomain.CurrentDomain.AssemblyResolve += ResolveHelper.ResolveAssembly;
|
||||
try
|
||||
{
|
||||
|
||||
Items = package.ToList<FacilityItem>(1, configuration => configuration.SkipCastingErrors());
|
||||
}
|
||||
catch (EPPlus.Core.Extensions.Exceptions.ExcelValidationException)
|
||||
catch (EPPlus.Core.Extensions.Exceptions.ExcelValidationException ex)
|
||||
{
|
||||
MessageBox.Show("列名不存在或不匹配,请检查表头是否存在换行或多余文字。");
|
||||
MessageBox.Show("列名不存在或不匹配,请检查表头是否存在换行或多余文字。", ex.Message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -128,16 +127,14 @@ namespace Szmedi.RvKits.MEPTools
|
||||
{
|
||||
// 获取类型元素 (FamilySymbol)
|
||||
Element typeElem = doc.GetElement(typeId);
|
||||
FamilySymbol symbol = typeElem as FamilySymbol;
|
||||
|
||||
if (symbol != null)
|
||||
if (typeElem is FamilySymbol symbol)
|
||||
{
|
||||
Family family = symbol.Family;
|
||||
|
||||
// 确保族存在且未被添加过
|
||||
if (family != null && !usedFamilyIds.Contains(family.Id))
|
||||
if (family != null && usedFamilyIds.Add(family.Id))
|
||||
{
|
||||
usedFamilyIds.Add(family.Id);
|
||||
resultFamilies.Add(family);
|
||||
}
|
||||
}
|
||||
@@ -153,7 +150,6 @@ namespace Szmedi.RvKits.MEPTools
|
||||
return;
|
||||
}
|
||||
var families = GetUsedFamilies(doc)
|
||||
.Cast<Family>()
|
||||
.Where(
|
||||
fam => fam.FamilyCategory.AllowsBoundParameters &&
|
||||
fam.IsEditable &&
|
||||
@@ -180,6 +176,10 @@ namespace Szmedi.RvKits.MEPTools
|
||||
GetFamilies();
|
||||
ExcelPath = ofd.FileName;
|
||||
ProcessExcel(ofd.FileName);
|
||||
if (Items == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
FuzzyMatch();
|
||||
FacilitiesCollectionView = CollectionViewSource.GetDefaultView(Items);
|
||||
|
||||
@@ -206,7 +206,6 @@ namespace Szmedi.RvKits.MEPTools
|
||||
}
|
||||
foreach (var item in Items)
|
||||
{
|
||||
string resultName = string.Empty;
|
||||
double minRatio = 30;
|
||||
|
||||
foreach (var family in Families)
|
||||
@@ -354,126 +353,120 @@ namespace Szmedi.RvKits.MEPTools
|
||||
MessageBox.Show("未选择任何有效的设备项进行处理。", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
handler.Raise(
|
||||
uiapp =>
|
||||
|
||||
handler.Raise(
|
||||
uiapp =>
|
||||
{
|
||||
var doc = uiapp.ActiveUIDocument.Document;
|
||||
if (doc.IsFamilyDocument)
|
||||
{
|
||||
var doc = uiapp.ActiveUIDocument.Document;
|
||||
if (doc.IsFamilyDocument)
|
||||
return;
|
||||
}
|
||||
doc.InvokeGroup(
|
||||
_ =>
|
||||
{
|
||||
return;
|
||||
}
|
||||
doc.InvokeGroup(
|
||||
ts =>
|
||||
StringBuilder sb = new StringBuilder();
|
||||
var allInstances = Items.Where(i => i.IsSelected).SelectMany(i => i.Instances).ToList();
|
||||
string message = ValidateDuplicatesWithDisplay(allInstances, s => s.Id, s => $"{s.Symbol.FamilyName}:{s.Name}");
|
||||
if (!string.IsNullOrEmpty(message))
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
var allInstances = Items.Where(i => i.IsSelected).SelectMany(i => i.Instances).ToList();
|
||||
string message = ValidateDuplicatesWithDisplay(allInstances, s => s.Id, s => $"{s.Symbol.FamilyName}:{s.Name}");
|
||||
if (!string.IsNullOrEmpty(message))
|
||||
MessageBox.Show(message, "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
}
|
||||
foreach (var item in processItems)
|
||||
{
|
||||
var family = item.MappedFamily;
|
||||
if (!family.IsValidObject)
|
||||
{
|
||||
MessageBox.Show(message, "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
return;
|
||||
sb.AppendLine($"<{item.Name}>因文档手动修改导致匹配族失效,请重新匹配,跳过该族。");
|
||||
continue;
|
||||
}
|
||||
foreach (var item in processItems)
|
||||
if (!family.IsEditable)
|
||||
{
|
||||
var family = item.MappedFamily;
|
||||
if (!family.IsEditable)
|
||||
{
|
||||
sb.AppendLine($"{family.Name} 族不可编辑,跳过该族。");
|
||||
}
|
||||
Document famdoc = null;
|
||||
try
|
||||
{
|
||||
famdoc = doc.EditFamily(family);
|
||||
famdoc.Invoke(
|
||||
ts =>
|
||||
{
|
||||
foreach (var paramItem in item.Parameters)
|
||||
{
|
||||
try
|
||||
{
|
||||
var familyParameters = famdoc.FamilyManager.GetParameters().Where(p => p.Definition.Name == paramItem.Name);
|
||||
if (familyParameters.Any())
|
||||
{
|
||||
var parameter = familyParameters.FirstOrDefault();
|
||||
|
||||
if (parameter.Definition is InternalDefinition def && def.BuiltInParameter == BuiltInParameter.INVALID)
|
||||
{
|
||||
famdoc.FamilyManager.RemoveParameter(parameter);
|
||||
famdoc.Regenerate();
|
||||
}
|
||||
|
||||
famdoc.FamilyManager.AddParameter(paramItem.Name, BuiltInParameterGroup.PG_TEXT, ParameterType.Text, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
famdoc.FamilyManager
|
||||
.AddParameter(
|
||||
paramItem.Name,
|
||||
BuiltInParameterGroup.PG_TEXT,
|
||||
ParameterType.Text,
|
||||
true);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
sb.AppendLine($"{family.Name} 族参数 {paramItem.Name} 添加失败,{ex.Message}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
"添加缺失的族参数属性条目");
|
||||
|
||||
var loadedFamily = famdoc.LoadFamily(doc, new FamilyLoadOption());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
sb.AppendLine($"{family.Name} 族加载到项目中失败,原因:{ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
famdoc?.Close(false);
|
||||
}
|
||||
doc.Invoke(
|
||||
ts =>
|
||||
sb.AppendLine($"{family.Name} 族不可编辑,跳过该族。");
|
||||
continue;
|
||||
}
|
||||
Document famdoc = null;
|
||||
try
|
||||
{
|
||||
famdoc = doc.EditFamily(family);
|
||||
famdoc.Invoke(
|
||||
_ =>
|
||||
{
|
||||
foreach (var instance in item.Instances)
|
||||
foreach (var paramItem in item.Parameters)
|
||||
{
|
||||
foreach (var paramItem in item.Parameters)
|
||||
try
|
||||
{
|
||||
Parameter param = instance.GetParameters(paramItem.Name)?.FirstOrDefault();
|
||||
if (param != null && !param.IsReadOnly)
|
||||
var familyParameters = famdoc.FamilyManager.GetParameters()
|
||||
.Where(p => p.Definition.Name == paramItem.Name).ToList();
|
||||
if (familyParameters.Count > 0)
|
||||
{
|
||||
param.Set(paramItem.Value);
|
||||
var parameter = familyParameters.FirstOrDefault();
|
||||
|
||||
if (parameter.Definition is InternalDefinition def && def.BuiltInParameter == BuiltInParameter.INVALID)
|
||||
{
|
||||
famdoc.FamilyManager.RemoveParameter(parameter);
|
||||
famdoc.Regenerate();
|
||||
}
|
||||
|
||||
famdoc.FamilyManager.AddParameter(paramItem.Name, BuiltInParameterGroup.PG_TEXT, ParameterType.Text, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendLine($"{instance.Id} - {instance.Name} 未找到参数 {paramItem.Name} 或参数只读,未设置其值。");
|
||||
famdoc.FamilyManager
|
||||
.AddParameter(
|
||||
paramItem.Name,
|
||||
BuiltInParameterGroup.PG_TEXT,
|
||||
ParameterType.Text,
|
||||
true);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
sb.AppendLine($"{family.Name} 族参数 {paramItem.Name} 添加失败,{ex.Message}");
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
if (sb.Length > 0)
|
||||
{
|
||||
MessageBox.Show(sb.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show("添加完成!");
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
},
|
||||
"添加缺失的族参数属性条目");
|
||||
|
||||
throw;
|
||||
}
|
||||
item.MappedFamily = famdoc.LoadFamily(doc, new FamilyLoadOption());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
sb.AppendLine($"{family.Name} 族加载到项目中失败,原因:{ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
famdoc?.Close(false);
|
||||
}
|
||||
doc.Invoke(
|
||||
ts =>
|
||||
{
|
||||
foreach (var instance in item.Instances)
|
||||
{
|
||||
foreach (var paramItem in item.Parameters)
|
||||
{
|
||||
Parameter param = instance.GetParameters(paramItem.Name)?.FirstOrDefault();
|
||||
if (param is { IsReadOnly: false })
|
||||
{
|
||||
param.Set(paramItem.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
sb.AppendLine($"{instance.Id} - {instance.Name} 未找到参数 {paramItem.Name} 或参数只读,未设置其值。");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
MessageBox.Show(sb.Length > 0 ? sb.ToString() : "添加完成!");
|
||||
}, "处理设备信息");
|
||||
|
||||
});
|
||||
}
|
||||
[ObservableProperty]
|
||||
public partial FacilityItem SelectedFacility { get; set; }
|
||||
@@ -645,7 +638,9 @@ namespace Szmedi.RvKits.MEPTools
|
||||
[ObservableProperty]
|
||||
public partial string Value { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Excel表里的设备项
|
||||
/// </summary>
|
||||
public partial class FacilityItem : ObservableObject
|
||||
{
|
||||
public FacilityItem()
|
||||
Reference in New Issue
Block a user