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 ArchiParamManagerViewModel : ObservableObject { private readonly DapperUtil dapperUtil; private readonly ActionEventHandler handler; private readonly UIApplication uiapp; private readonly List paramsToAdd = new(); [ObservableProperty] [NotifyCanExecuteChangedFor(nameof(AddParametersCommand))] private bool canAdd; /// /// 族参数 /// [ObservableProperty] private bool isFamilyParam; /// /// 族参数(共享参数) /// [ObservableProperty] private bool isSharedFamilyParam; /// /// 共享参数绑定类别 /// [ObservableProperty] private bool isSharedProjectParam = true; public List ArchiSharedParams { get; set; } public List Models { get; } = new List(); //public ParamManagerWin ParentWindow { get; set; } //public ArchiParamManagerViewModel(ParamManagerWin parentWindow) //{ // ParentWindow = parentWindow; // dapperUtil = parentWindow.DapperUtil; // var archiProperties = GetArchiProperties(); // ArchiSharedParams = GetArchiSharedParams(); // GenerateArchiTree(archiProperties); // CanAdd = paramsToAdd.Any() && !ParentWindow.UiApplication.ActiveUIDocument.Document.IsFamilyDocument; //} public ArchiParamManagerViewModel(UIApplication uiapp, DapperUtil dapperUtil, ActionEventHandler handler) { this.dapperUtil = dapperUtil; this.handler = handler; this.uiapp = uiapp; var archiProperties = GetArchiProperties(); ArchiSharedParams = GetArchiSharedParams(); GenerateArchiTree(archiProperties); CanAdd = paramsToAdd.Any() && !uiapp.ActiveUIDocument.Document.IsFamilyDocument; } /// /// 建筑所有的属性 /// private List GetArchiProperties() { return dapperUtil.LoadModel("archi_properties"); } /// /// 建筑共享参数 /// private List GetArchiSharedParams() { return dapperUtil.LoadModel("archi_shared_params"); } private void GenerateArchiTree(IList paramsData) { var majors = paramsData.GroupBy(param => param.Major); //专业 foreach (var major in majors) { List majorChildren = new(); TreeModel majorTreeModel = new() { Name = major.Key, Icon = null, IsChecked = false, IsExpanded = false, Children = majorChildren, Tag = null }; Models.Add(majorTreeModel); //构件 var components = major.GroupBy(p => p.Component); foreach (IGrouping component in components) { TreeModel componentTreeModel = new() { Id = null, Name = component.Key, Icon = null, IsExpanded = false, Parent = null, Children = null, Tag = component.ToList() }; majorChildren.Add(componentTreeModel); } } } [RelayCommand(CanExecute = nameof(CanAdd))] private void AddParameters() { //ExternalEventRequest x = ExternalEventRequest.Denied; //KeyPressHelpers.SetFocusRVT(); //KeyPressHelpers.keybd_event(0x1B, 0, 0, 0); //KeyPressHelpers.keybd_event(0x1B, 0, 2, 0); CommandAssists.ExitCurrentCommand(); handler.Raise( uiapp => { if (paramsToAdd.Any()) { var uidoc = uiapp.ActiveUIDocument; var filePath = Path.Combine(GlobalVariables.DirAssembly, $"TempSharedParameters.txt"); if (IsSharedProjectParam) { ParameterHelpers.AddParameterElementsBinding(uidoc, paramsToAdd, ArchiSharedParams, filePath); } else { ParameterHelpers.AddFamilyParameters(uidoc, paramsToAdd, ArchiSharedParams, IsFamilyParam, filePath); } } }); //ParentWindow.AddParameterEventHandler.IsSharedProjectParam = IsSharedProjectParam; //ParentWindow.AddParameterEventHandler.IsFamilyParam = IsFamilyParam; //ParentWindow.AddParameterEventHandler.IsSharedFamilyParam = IsSharedFamilyParam; //ParentWindow.AddParameterEventHandler.ParametersToAdded = paramsToAdd; //ParentWindow.AddParameterEventHandler.SharedParameters = ArchiSharedParams; //ParentWindow.AddParameterEvent.Raise(); //CanAdd = x != ExternalEventRequest.Accepted; } [RelayCommand] private void TreeItemChanged(object obj) { if (obj is List paramters) { paramsToAdd.Clear(); if (paramters.Any()) { paramsToAdd.AddRange(paramters.Where(param => param.IsChecked == true)); } } CanAdd = paramsToAdd.Any() && !uiapp.ActiveUIDocument.Document.IsFamilyDocument; } }