Files
SzmediTools/Szmedi.RvKits/InfoManager/Delivery/MetroProjectParamManagerViewModel.cs
2025-09-16 16:06:41 +08:00

214 lines
7.2 KiB
C#

using System.Linq;
using Autodesk.Revit.UI;
using Nice3point.Revit.Toolkit.External.Handlers;
using Szmedi.RvKits.Assists;
using Szmedi.RvKits.InfoManager.Delivery;
using Szmedi.RvKits.Models;
namespace Szmedi.RvKits.InfoManager
{
public partial class MetroProjectParamManagerViewModel : ObservableObject
{
private readonly DapperUtil dapperUtil;
private readonly ActionEventHandler handler;
private readonly UIApplication uiapp;
[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(AddParametersCommand))]
private bool canAdd;
public readonly List<ParamData> paramsToAdd = new List<ParamData>();
//private RelayCommand<object> addParameters;
//private RelayCommand<object> checkAll;
//private RelayCommand<object> unCheckAll;
//public ICommand CheckAll
//{
// get
// {
// checkAll ??= new RelayCommand<object>(PerformCheckedAll);
// return checkAll;
// }
//}
//public ICommand UnCheckAll
//{
// get
// {
// unCheckAll ??= new RelayCommand<object>(PerformUnCheckedAll);
// return unCheckAll;
// }
//}
//public ICommand AddParameters
//{
// get
// {
// if (addParameters == null)
// {
// var uidoc = ParentWindow.UiApplication.ActiveUIDocument;
// var doc = uidoc.doc;
// addParameters = new RelayCommand<object>(PerformAddParameters, p => !doc.IsFamilyDocument);
// }
// return addParameters;
// }
//}
public List<SharedParameterData> MetroSharedParams { get; set; }
public List<TreeModel> Models { get; } = new List<TreeModel>();
//public ParamManagerWin ParentWindow { get; set; }
//public MetroProjectParamManagerViewModel(ParamManagerWin parentWindow)
//{
// ParentWindow = parentWindow;
// dapperUtil = parentWindow.DapperUtil;
// var projectParams = GetMetroProjectProperties();
// MetroSharedParams = GetMetroSharedParams();
// GenerateMetroProjectPropTree(projectParams);
// CanAdd = paramsToAdd.Any() && !ParentWindow.UiApplication.ActiveUIDocument.Document.IsFamilyDocument;
//}
public MetroProjectParamManagerViewModel(UIApplication uiapp, DapperUtil dapperUtil, ActionEventHandler handler)
{
this.dapperUtil = dapperUtil;
this.handler = handler;
this.uiapp = uiapp;
var projectParams = GetMetroProjectProperties();
MetroSharedParams = GetMetroSharedParams();
GenerateMetroProjectPropTree(projectParams);
CanAdd = paramsToAdd.Any() && !uiapp.ActiveUIDocument.Document.IsFamilyDocument;
}
/// <summary>
/// 轨交项目属性
/// </summary>
private List<MetroProjectParamData> GetMetroProjectProperties()
{
return dapperUtil.LoadModel<MetroProjectParamData>("metro_project_properties");
}
/// <summary>
/// 轨交共享参数
/// </summary>
private List<SharedParameterData> GetMetroSharedParams()
{
return dapperUtil.LoadModel<SharedParameterData>("metro_shared_params");
}
/// <summary>
/// 生成属性树
/// </summary>
/// <param name="paramsData"></param>
private void GenerateMetroProjectPropTree(IList<MetroProjectParamData> paramsData)
{
var projects = paramsData.GroupBy(param => param.Project);
foreach (var project in projects)
{
//项目
List<TreeModel> projectChildren = new();
TreeModel projectTreeModel =
new()
{
Name = project.Key,
Icon = null,
IsChecked = false,
IsExpanded = true,
Parent = null,
Children = projectChildren,
Tag = null
};
Models.Add(projectTreeModel);
//专业
var majors = project.GroupBy(p => p.Major);
foreach (var major in majors)
{
List<TreeModel> majorChildren = new();
TreeModel majorTreeModel =
new()
{
Name = major.Key,
Icon = null,
IsChecked = false,
IsExpanded = false,
Children = majorChildren,
Tag = major.ToList()
};
projectChildren.Add(majorTreeModel);
}
}
}
[RelayCommand(CanExecute = nameof(CanAdd))]
private void AddParameters()
{
CommandAssists.ExitCurrentCommand();
//if (li.Any())
//{
// foreach (var param in li)
// {
// if (param.IsChecked == true)
// {
// paramsToAdd.Add(param);
// }
// }
//}
handler.Raise(
uiapp =>
{
var filePath = Path.Combine(GlobalVariables.DirAssembly, $"TempSharedParameters.txt");
var doc = uiapp.ActiveUIDocument.Document;
ParameterHelpers.AddProjectParameters(doc, paramsToAdd, MetroSharedParams, filePath);
});
//ParentWindow.AddParameterEventHandler.IsOnlyProjectCategory = true;
//ParentWindow.AddParameterEventHandler.ParametersToAdded = paramsToAdd;
//ParentWindow.AddParameterEventHandler.SharedParameters = MetroSharedParams;
//ParentWindow.AddParameterEvent.Raise();
}
[RelayCommand]
private void TreeItemChanged(object obj)
{
if (obj is List<MetroProjectParamData> paramters)
{
paramsToAdd.Clear();
if (paramters.Any())
{
paramsToAdd.AddRange(paramters.Where(param => param.IsChecked == true));
}
}
CanAdd = paramsToAdd.Any() && !uiapp.ActiveUIDocument.Document.IsFamilyDocument;
}
//private void PerformCheckedAll(object obj)
//{
// if (obj is List<ParamData>)
// {
// var paramters = obj as List<ParamData>;
// foreach (var param in paramters)
// {
// param.IsChecked = true;
// }
// }
//}
//private void PerformUnCheckedAll(object obj)
//{
// if (obj is List<ParamData>)
// {
// var paramters = obj as List<ParamData>;
// foreach (var param in paramters)
// {
// param.IsChecked = false;
// }
// }
//}
}
}