380 lines
14 KiB
C#
380 lines
14 KiB
C#
|
|
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);
|
|
///// <summary>
|
|
///// 获取建筑指定专业下的所有标识
|
|
///// </summary>
|
|
///// <param name="major"></param>
|
|
///// <returns></returns>
|
|
//public static List<string> GetArchiSigns(Major major)
|
|
//{
|
|
// var archiProps = GetArchiMajorParameters(major).DistinctBy(p => p.Category).ToList();
|
|
|
|
// var archiSigns = new List<string>();
|
|
// 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;
|
|
//}
|
|
/// <summary>
|
|
/// 获取轨道交通所有标识
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static List<string> GetMetroSigns()
|
|
{
|
|
List<string> signs = new List<string>();
|
|
try
|
|
{
|
|
SqlConnection.Open();
|
|
var metroProps = SqlConnection.GetAll<MetroDedicatedParameter>().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;
|
|
}
|
|
/// <summary>
|
|
/// 获取轨道交通所有分类
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static List<MetroNode> GetMetroClassificationModels()
|
|
{
|
|
List<MetroNode> models = null;
|
|
|
|
try
|
|
{
|
|
SqlConnection.Open();
|
|
models = [.. SqlConnection.GetAll<MetroNode>()];
|
|
//获取所有分类节点
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
SqlConnection.Close();
|
|
}
|
|
|
|
return models;
|
|
}
|
|
/// <summary>
|
|
/// 建筑工程共享参数
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static List<ArchiSharedParameter> GetArchiSharedParameters()
|
|
{
|
|
List<ArchiSharedParameter> parameters = null;
|
|
try
|
|
{
|
|
SqlConnection.Open();
|
|
parameters = [.. SqlConnection.GetAll<ArchiSharedParameter>()];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
SqlConnection.Close();
|
|
}
|
|
return parameters;
|
|
}
|
|
/// <summary>
|
|
/// 轨道交通工程共享参数
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static List<MetroSharedParameter> GetMetroSharedParameters()
|
|
{
|
|
List<MetroSharedParameter> parameters = null;
|
|
try
|
|
{
|
|
SqlConnection.Open();
|
|
parameters = [.. SqlConnection.GetAll<MetroSharedParameter>()];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
SqlConnection.Close();
|
|
}
|
|
return parameters;
|
|
}
|
|
/// <summary>
|
|
/// 获取轨道交通工程的特定标识的所有参数
|
|
/// </summary>
|
|
/// <param name="sign"></param>
|
|
/// <returns></returns>
|
|
public static List<AfcaMetroBaseParameter> GetMetroSignParameters(string sign)
|
|
{
|
|
List<AfcaMetroBaseParameter> parameters = null;
|
|
try
|
|
{
|
|
SqlConnection.Open();
|
|
var metrobaseProps = SqlConnection.GetAll<MetroCommonParameter>();
|
|
var metroProps = SqlConnection.GetAll<MetroDedicatedParameter>().Where(e => e.Categories.Contains(sign));
|
|
parameters = [.. metrobaseProps, .. metroProps];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
SqlConnection.Close();
|
|
}
|
|
return parameters;
|
|
}
|
|
|
|
///// <summary>
|
|
///// 获取建筑工程对应专业的特定标识的所有参数
|
|
///// </summary>
|
|
///// <param name="major"></param>
|
|
///// <param name="SignParamName"></param>
|
|
///// <returns></returns>
|
|
//public static List<AfcaArchiBaseCategory> GetArchiSignParameters(Major major, string SignParamName)
|
|
//{
|
|
// var allProperties = GetArchiMajorParameters(major);
|
|
// var signProperties = new List<AfcaArchiBaseCategory>();
|
|
// 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;
|
|
//}
|
|
///// <summary>
|
|
///// 获取对应专业的建筑工程属性条目
|
|
///// </summary>
|
|
///// <param name="major">专业</param>
|
|
///// <returns></returns>
|
|
//public static List<AfcaArchiBaseCategory> GetArchiMajorParameters(Major major)
|
|
//{
|
|
// List<AfcaArchiBaseCategory> properties = null;
|
|
|
|
// SqlConnection.Open();
|
|
|
|
// try
|
|
// {
|
|
// switch (major)
|
|
// {
|
|
// case Major.Architecture:
|
|
// properties = [.. SqlConnection.GetAll<AfcaArchitectureCategory>()];
|
|
// break;
|
|
// case Major.Structure:
|
|
// properties = [.. SqlConnection.GetAll<AfcaStructureParameter>()];
|
|
|
|
// break;
|
|
// case Major.Mechanical:
|
|
// properties = [.. SqlConnection.GetAll<AfcaMechanicalParameter>()];
|
|
|
|
// break;
|
|
// case Major.Electrical:
|
|
// properties = [.. SqlConnection.GetAll<AfcaElectricalParameter>()];
|
|
|
|
// break;
|
|
// case Major.Piping:
|
|
// properties = [.. SqlConnection.GetAll<AfcaPipingParameter>()];
|
|
// break;
|
|
// }
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// MessageBox.Show(ex.Message);
|
|
// }
|
|
// finally
|
|
// {
|
|
// SqlConnection.Close();
|
|
// }
|
|
|
|
// //获取所有分类节点
|
|
// return properties;
|
|
//}
|
|
|
|
/// <summary>
|
|
/// 获取轨道交通基本属性
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static List<MetroCommonParameter> GetMetroCommonParameters()
|
|
{
|
|
SqlConnection.Open();
|
|
List<MetroCommonParameter> properties = null;
|
|
try
|
|
{
|
|
properties = [.. SqlConnection.GetAll<MetroCommonParameter>()];
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
SqlConnection.Close();
|
|
}
|
|
|
|
//获取所有分类节点
|
|
return properties;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化轨道交通树状节点,及属性表
|
|
/// </summary>
|
|
/// <param name="metroNodes">所有的分类节点(父子节点)</param>
|
|
/// <param name="initProperties">是否获取专项的属性</param>
|
|
/// <returns></returns>
|
|
public static List<MetroNode> InitTreeViewSource(List<MetroNode> metroNodes,
|
|
bool initProperties = false)
|
|
{
|
|
SqlConnection.Open();
|
|
IEnumerable<MetroNode> result = null;
|
|
try
|
|
{
|
|
//专项属性
|
|
var metroProps = SqlConnection.GetAll<MetroDedicatedParameter>().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];
|
|
}
|
|
}
|
|
} |