using System.Collections.Generic; using System.Data.SQLite; using System.Reflection; using System.Windows; using Autodesk.Windows; using Dapper; using Dapper.Contrib.Extensions; using Szmedi.RevitToolkit.Approval.Models; using Szmedi.Toolkit.Revit.Approval; namespace Szmedi.RevitToolkit.Approval.Assists { public static class GlobalAssists { public static IntPtr RevitWindowPtr => ComponentManager.ApplicationWindow; public static string AddInPath => Assembly.GetExecutingAssembly().Location; public static string DirAssembly => Path.GetDirectoryName(AddInPath); private static string DbString => $"Data Source={DirAssembly}\\SZBIM.db"; public static SQLiteConnection SqlConnection { get; } = new(DbString); ///// ///// 获取建筑指定专业下的所有标识 ///// ///// ///// //public static List GetArchiSigns(Major major) //{ // var archiProps = GetArchiMajorParameters(major).DistinctBy(p => p.Category).ToList(); // var archiSigns = new List(); // foreach (var archi in archiProps) // { // if (!string.IsNullOrEmpty(archi.Level5)) // { // archiSigns.Add(archi.Level5); // continue; // } // if (!string.IsNullOrEmpty(archi.Level4)) // { // archiSigns.Add(archi.Level4); // continue; // } // if (!string.IsNullOrEmpty(archi.Level3)) // { // archiSigns.Add(archi.Level3); // continue; // } // if (!string.IsNullOrEmpty(archi.Level2)) // { // archiSigns.Add(archi.Level2); // continue; // } // if (!string.IsNullOrEmpty(archi.Level1)) // { // archiSigns.Add(archi.Level1); // continue; // } // } // return archiSigns; //} /// /// 获取轨道交通所有标识 /// /// public static List GetMetroSigns() { List signs = new List(); try { SqlConnection.Open(); var metroProps = SqlConnection.GetAll().DistinctBy(p => p.Categories); var categoriesList = metroProps.Select(p => p.Categories).ToArray(); foreach (var categories in categoriesList) { var array = categories.Split('|'); signs.AddRange(array); //if (categories.Contains("|")) //{ //} //else //{ // signs.Add(categories); //} } //signs = [.. metroProps.Select(p => p.Categories)]; } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { SqlConnection.Close(); } return signs; } /// /// 获取轨道交通所有分类 /// /// public static List GetMetroClassificationModels() { List models = null; try { SqlConnection.Open(); models = [.. SqlConnection.GetAll()]; //获取所有分类节点 } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { SqlConnection.Close(); } return models; } /// /// 建筑工程共享参数 /// /// public static List GetArchiSharedParameters() { List parameters = null; try { SqlConnection.Open(); parameters = [.. SqlConnection.GetAll()]; } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { SqlConnection.Close(); } return parameters; } /// /// 轨道交通工程共享参数 /// /// public static List GetMetroSharedParameters() { List parameters = null; try { SqlConnection.Open(); parameters = [.. SqlConnection.GetAll()]; } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { SqlConnection.Close(); } return parameters; } /// /// 获取轨道交通工程的特定标识的所有参数 /// /// /// public static List GetMetroSignParameters(string sign) { List parameters = null; try { SqlConnection.Open(); var metrobaseProps = SqlConnection.GetAll(); var metroProps = SqlConnection.GetAll().Where(e => e.Categories.Contains(sign)); parameters = [.. metrobaseProps, .. metroProps]; } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { SqlConnection.Close(); } return parameters; } ///// ///// 获取建筑工程对应专业的特定标识的所有参数 ///// ///// ///// ///// //public static List GetArchiSignParameters(Major major, string SignParamName) //{ // var allProperties = GetArchiMajorParameters(major); // var signProperties = new List(); // var level5Sign = allProperties.Where(p => p.Level5 == SignParamName); // if (level5Sign.Any()) // { // var referProp = level5Sign.FirstOrDefault(); // var parameters = allProperties.TakeWhile(p => p.Index < referProp.Index); // var l4Sign = parameters.Where(p => p.Level4 == referProp.Level4); // var l3Sign = parameters.Where(p => p.Level4 == null && p.Level3 == referProp.Level3); // var l2Sign = parameters.Where(p => p.Level3 == null && p.Level2 == referProp.Level2); // var l1Sign = parameters.Where(p => p.Level2 == null && p.Level1 == referProp.Level1); // signProperties.AddRange(level5Sign); // signProperties.AddRange(l4Sign); // signProperties.AddRange(l3Sign); // signProperties.AddRange(l2Sign); // signProperties.AddRange(l1Sign); // return signProperties; // } // var level4Sign = allProperties.Where(p => p.Level4 == SignParamName && p.Level5 == null); // if (level4Sign.Any()) // { // var referProp = level4Sign.FirstOrDefault(); // var parameters = allProperties.TakeWhile(p => p.Index < referProp.Index); // var l3Sign = parameters.Where(p => p.Level4 == null && p.Level3 == referProp.Level3); // var l2Sign = parameters.Where(p => p.Level3 == null && p.Level2 == referProp.Level2); // var l1Sign = parameters.Where(p => p.Level2 == null && p.Level1 == referProp.Level1); // signProperties.AddRange(level4Sign); // signProperties.AddRange(l3Sign); // signProperties.AddRange(l2Sign); // signProperties.AddRange(l1Sign); // return signProperties; // } // var level3Sign = allProperties.Where(p => p.Level3 == SignParamName && p.Level4 == null && p.Level5 == null); // if (level3Sign.Any()) // { // var referProp = level3Sign.FirstOrDefault(); // var parameters = allProperties.TakeWhile(p => p.Index < referProp.Index); // var l2Sign = parameters.Where(p => p.Level3 == null && p.Level2 == referProp.Level2); // var l1Sign = parameters.Where(p => p.Level2 == null && p.Level1 == referProp.Level1); // signProperties.AddRange(level3Sign); // signProperties.AddRange(l2Sign); // signProperties.AddRange(l1Sign); // return signProperties; // } // var level2Sign = allProperties.Where(p => p.Level2 == SignParamName && p.Level3 == null && p.Level4 == null && p.Level5 == null); // if (level2Sign.Any()) // { // var referProp = level2Sign.FirstOrDefault(); // var parameters = allProperties.TakeWhile(p => p.Index < referProp.Index); // var l1Sign = parameters.Where(p => p.Level2 == null && p.Level1 == referProp.Level1); // signProperties.AddRange(level2Sign); // signProperties.AddRange(l1Sign); // return signProperties; // } // return signProperties; //} ///// ///// 获取对应专业的建筑工程属性条目 ///// ///// 专业 ///// //public static List GetArchiMajorParameters(Major major) //{ // List properties = null; // SqlConnection.Open(); // try // { // switch (major) // { // case Major.Architecture: // properties = [.. SqlConnection.GetAll()]; // break; // case Major.Structure: // properties = [.. SqlConnection.GetAll()]; // break; // case Major.Mechanical: // properties = [.. SqlConnection.GetAll()]; // break; // case Major.Electrical: // properties = [.. SqlConnection.GetAll()]; // break; // case Major.Piping: // properties = [.. SqlConnection.GetAll()]; // break; // } // } // catch (Exception ex) // { // MessageBox.Show(ex.Message); // } // finally // { // SqlConnection.Close(); // } // //获取所有分类节点 // return properties; //} /// /// 获取轨道交通基本属性 /// /// public static List GetMetroCommonParameters() { SqlConnection.Open(); List properties = null; try { properties = [.. SqlConnection.GetAll()]; } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { SqlConnection.Close(); } //获取所有分类节点 return properties; } /// /// 初始化轨道交通树状节点,及属性表 /// /// 所有的分类节点(父子节点) /// 是否获取专项的属性 /// public static List InitTreeViewSource(List metroNodes, bool initProperties = false) { SqlConnection.Open(); IEnumerable result = null; try { //专项属性 var metroProps = SqlConnection.GetAll().ToList(); foreach (var model in metroNodes) { if (initProperties) { //model的属性集 model.Properties = [.. metroProps.Where(p => p.ParamTableIndex == model.ParamTableIndex)]; } //找到model的父节点 model.Parent = metroNodes.FirstOrDefault(t => t.CategoryName == model.ParentName); //找到model的子节点 model.Children = [.. metroNodes.Where(t => t.ParentName == model.CategoryName)]; } //所有父节点 result = metroNodes.Where(t => t.Parent == null && t.ParentName == null); } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { SqlConnection.Close(); } return [.. result]; } } }