Files
RevitArchive/RevitKits/ParameterManager/MetroProjectInfoParamsViewModel.cs
2026-02-23 14:58:05 +08:00

149 lines
5.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Sai.Database.Shared;
using Sai.RvKits.Operation;
using SZBIM.StandardTools;
using SZBIM.StandardTools.ParameterManager;
namespace Sai.Common.Shared.ParameterManager
{
public partial class MetroProjectInfoParamsViewModel : ObservableObject
{
public MetroProjectInfoParamsViewModel(MetroParamsManagerWin parentWindow)
{
ParentWindow = parentWindow;
dapperUtil = parentWindow.DapperUtil;
var projectParams = GetMetroProjectProperties();
MetroSharedParams = GetMetroSharedParams();
GenerateMetroProjectPropTree(projectParams);
}
public static IntPtr RevitwindowPtr = Autodesk.Windows.ComponentManager.ApplicationWindow;
private readonly DapperUtil dapperUtil;
public List<SharedParamModel> MetroSharedParams { get; set; }
public List<TreeModel> Models { get; } = new();
public MetroParamsManagerWin ParentWindow { get; set; }
[RelayCommand(CanExecute = nameof(IsProjectDocument))]
private void AddParameters(object obj)
{
WinIntPtr.SetForegroundWindow(RevitwindowPtr);
KeyPress.keybd_event(0x1B, 0, 0, 0);
KeyPress.keybd_event(0x1B, 0, 2, 0);
var paramToAdd = new List<ParamModel>();
if (obj is List<ParamModel>)
{
var li = obj as List<ParamModel>;
if (li.Count > 0)
{
var paramters = obj as List<ParamModel>;
foreach (var param in paramters)
{
if (param.IsChecked == true)
{
paramToAdd.Add(param);
}
}
}
}
ParentWindow.AddProjectInfoParameterEventHandler.IsOnlyProjectCategory = true;
ParentWindow.AddProjectInfoParameterEventHandler.ParameterList = paramToAdd;
ParentWindow.AddProjectInfoParameterEventHandler.SharedParameters = MetroSharedParams;
ParentWindow.AddParameterEvent.Raise();
}
[RelayCommand]
private void CheckedAll(object obj)
{
if (obj is List<ParamModel>)
{
var paramters = obj as List<ParamModel>;
foreach (var param in paramters)
{
param.IsChecked = true;
}
}
}
private void GenerateMetroProjectPropTree(IList<ParamModel> paramsData)
{
var projects = paramsData.GroupBy(param => param.Project);
foreach (var project in projects)
{
//项目
List<TreeModel> projectChildren = new List<TreeModel>();
TreeModel projectTreeModel = new TreeModel
{
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 List<TreeModel>();
TreeModel majorTreeModel = new TreeModel
{
Name = major.Key,
Icon = null,
IsChecked = false,
IsExpanded = false,
Children = majorChildren,
Tag = major.ToList()
};
projectChildren.Add(majorTreeModel);
}
}
}
/// <summary>
/// 轨交项目属性
/// </summary>
private List<ParamModel> GetMetroProjectProperties()
{
return dapperUtil.LoadModel<ParamModel>("METRO_PROJECT_PROPERTIES");
}
/// <summary>
/// 轨交共享参数
/// </summary>
private List<SharedParamModel> GetMetroSharedParams()
{
return dapperUtil.LoadModel<SharedParamModel>("METRO_SHARED_PARAMS");
}
private bool IsProjectDocument()
{
var uidoc = ParentWindow.UiApplication.ActiveUIDocument;
var doc = uidoc.Document;
return !doc.IsFamilyDocument;
}
[RelayCommand]
private void UnCheckedAll(object obj)
{
if (obj is List<ParamModel>)
{
var paramters = obj as List<ParamModel>;
foreach (var param in paramters)
{
param.IsChecked = false;
}
}
}
}
}