645 lines
26 KiB
C#
645 lines
26 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Collections.ObjectModel;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Net.NetworkInformation;
|
||
using System.Reflection;
|
||
using System.Text;
|
||
using System.Windows;
|
||
using System.Windows.Media.Media3D;
|
||
|
||
using Bentley.DgnPlatformNET;
|
||
using Bentley.DgnPlatformNET.Elements;
|
||
using Bentley.DgnPlatformNET.SmartFeature;
|
||
using Bentley.ECObjects.Instance;
|
||
using Bentley.ECObjects.Schema;
|
||
using Bentley.GeometryNET;
|
||
using Bentley.MstnPlatformNET;
|
||
|
||
using CenterCurveAddins;
|
||
|
||
using CustomOpenItemAddins;
|
||
|
||
using Microsoft.Win32;
|
||
|
||
using Mstn.Toolkit.Extensions;
|
||
using Mstn.Toolkit.External;
|
||
using Mstn.Toolkit.Helpers;
|
||
|
||
using Newtonsoft.Json;
|
||
|
||
using QuickModeling;
|
||
using QuickModeling.Models;
|
||
using QuickModeling.ViewModels;
|
||
using QuickModeling.Views;
|
||
|
||
using TunnelZYJSCSAddins;
|
||
|
||
using ZYJSCSMsAddins;
|
||
|
||
|
||
//using static Bentley.DgnPlatformNET.DropGeometry;
|
||
|
||
//using MstnMixedAssistant;
|
||
|
||
namespace ShrlAlgo.MsAddIns
|
||
{
|
||
internal class Commands
|
||
{
|
||
public static Element Union(List<Element> elements)
|
||
{
|
||
var dgnModel = Session.Instance.GetActiveDgnModel();
|
||
Element resultElem = default;
|
||
SolidKernelEntity target = default;
|
||
List<SolidKernelEntity> solidKernels = new List<SolidKernelEntity>();
|
||
foreach (Element elem in elements)
|
||
{
|
||
resultElem = elem;
|
||
var status = Convert1.ElementToBody(out var entity, elem, true, false, false);
|
||
|
||
if (status == BentleyStatus.Success)
|
||
{
|
||
solidKernels.Add(entity);
|
||
target = entity;
|
||
}
|
||
}
|
||
try
|
||
{
|
||
var array = solidKernels.ToArray();
|
||
var status = Modify.BooleanUnion(ref target, ref array, 1);
|
||
if (status == BentleyStatus.Success)
|
||
{
|
||
Convert1.BodyToElement(out resultElem, target, null, dgnModel);
|
||
resultElem.AddToModel();
|
||
}
|
||
else
|
||
{
|
||
MessageCenter.Instance.ShowInfoMessage("合并实体失败", $"", false);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageCenter.Instance.ShowInfoMessage("异常", $"{ex.Message}", false);
|
||
}
|
||
return resultElem;
|
||
}
|
||
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
|
||
{
|
||
var assemblyName = new AssemblyName(args.Name).Name;
|
||
var assemblyPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), $"{assemblyName}.dll");
|
||
if (File.Exists(assemblyPath))
|
||
{
|
||
return Assembly.LoadFrom(assemblyPath);
|
||
}
|
||
return null;
|
||
}
|
||
/// <summary>
|
||
/// 修改单位和数值
|
||
/// </summary>
|
||
/// <param name="elem"></param>
|
||
private static void ModifyUnit(Element elem)
|
||
{
|
||
var dgnFile = Session.Instance.GetActiveDgnFile();
|
||
|
||
var host = new CustomItemHost(elem, false).CustomItems;
|
||
|
||
foreach (var instance in host)
|
||
{
|
||
var ecClass = instance.ClassDefinition;
|
||
var label = ecClass.DisplayLabel;
|
||
var lib = ecClass.Schema;
|
||
var libLabel = lib.DisplayLabel;
|
||
ItemTypeLibrary itemTypeLibrary = ItemTypeLibrary.FindByName(libLabel, dgnFile);
|
||
var itemType = itemTypeLibrary.GetItemTypeByName(label);
|
||
if (instance.ContainsValues)
|
||
{
|
||
foreach (var propValue in instance)
|
||
{
|
||
if (propValue.TryGetNativeValue(out var value))
|
||
{
|
||
|
||
var prop = propValue.Property;
|
||
var propDefin = itemType.GetPropertyByName(prop.Name);
|
||
var units = propDefin.Units;
|
||
if (units.ECUnitName == "MILLIMETRE")
|
||
{
|
||
instance.SetValue(prop.DisplayLabel, propValue.DoubleValue / 1000.0);
|
||
propDefin.Units = new DgnECUnit("METRE");
|
||
itemType.Library.Write();
|
||
|
||
instance.WriteChanges();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 通过属性名设置属性值,多个同名属性会同时设置
|
||
/// </summary>
|
||
/// <param name="elem">元素</param>
|
||
/// <param name="propName">属性名</param>
|
||
/// <returns></returns>
|
||
private static void SetECPropertyValues(Element elem, string propName, object value)
|
||
{
|
||
var instances = new CustomItemHost(elem, false).CustomItems;
|
||
try
|
||
{
|
||
foreach (var instance in instances)
|
||
{
|
||
instance.SetValue(propName, value);
|
||
instance.WriteChanges();
|
||
}
|
||
}
|
||
catch (Exception)
|
||
{
|
||
}
|
||
}
|
||
public static void Command(string unparsed)
|
||
{
|
||
//RingPlacementAddin.Commands.PlaceRings(string.Empty);
|
||
//return;
|
||
//long elementId = Convert.ToInt64(3159);
|
||
//var elem = Session.Instance.GetActiveDgnModel().FindElementById(new ElementId(ref elementId));
|
||
//var tran1 = DTransform3d.Rotation(0, Angle.FromDegrees(0.53));
|
||
//var tran2 = DTransform3d.Rotation(1, Angle.FromDegrees(149));
|
||
//var tran3 = DTransform3d.Rotation(2, Angle.FromDegrees(-179));
|
||
//var d1 = DTransform3d.Multiply(tran2, tran3);
|
||
//var d2 = DTransform3d.Multiply(tran1, d1);
|
||
//var d1 = DTransform3d.Multiply(tran2, tran1);
|
||
//var d2 = DTransform3d.Multiply(tran3, d1);
|
||
|
||
//return;
|
||
|
||
#if false
|
||
OpenFileDialog dialog = new OpenFileDialog()
|
||
{
|
||
Filter = "管环定位配置 (*.json)|*.json",
|
||
Title = "打开文件",
|
||
Multiselect = false,
|
||
InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
|
||
};
|
||
if (dialog.ShowDialog() == true)
|
||
{
|
||
var jsonFilePath = dialog.FileName;
|
||
try
|
||
{
|
||
RingInfoList rings = RingInfoReader.Read(jsonFilePath);
|
||
var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||
var cellPath = Path.Combine(dir, "Cell", "Ring.cel");
|
||
if (!File.Exists(cellPath))
|
||
{
|
||
MessageBox.Show($"单元库文件不存在:{cellPath}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
||
return;
|
||
}
|
||
//DTransform3d trans = DTransform3d.Identity;
|
||
//trans.Translation = new DVector3d(100000, 200000, 300000);
|
||
//var ts = DTransform3d.Rotation(DVector3d.FromXYZ(1000, 0, 0), Angle.PI * 0.25);
|
||
//var ts1 = DTransform3d.Multiply(ts, trans);
|
||
//var matrix3d = ts1.Matrix;
|
||
//var de = matrix3d.Determinant();
|
||
//var rigid = matrix3d.IsRigid();//刚性
|
||
//var diagonal = matrix3d.IsDiagonal();//对角线
|
||
//var orthogonal = matrix3d.IsOrthogonal();//正交
|
||
//var uniform = matrix3d.IsUniformScale(out var max);
|
||
//var rigidWithScale = matrix3d.IsRigidWithScale(out var maxtric, out var s);
|
||
double uorMeter = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter;
|
||
Dictionary<string, object> parameters = new()
|
||
{
|
||
{ "管片宽度", 1.2}, //转换为米
|
||
};
|
||
//CellHelpers.ImportParametricCellElement(cellPath, "管环", ts1);
|
||
//return;
|
||
foreach (var ring in rings.Rings)
|
||
{
|
||
//var b1 = ring.Transform3d.IsDiagonal();
|
||
//DTransform3d trans = DTransform3d.Identity;
|
||
//trans.Translation = ring.Transform3d.Translation; //UOR unit
|
||
|
||
CellHelper.ImportParametricCellElement(cellPath, "管环", ring.Transform3d, parameters);
|
||
}
|
||
//CellHelpers.AttachCellLib(cellPath);
|
||
|
||
//foreach (var ring in rings.Rings)
|
||
//{
|
||
// CellHelpers.CreateParametricCell("管环", null, ring.Transform3d);
|
||
//}
|
||
//CellHelpers.DetachCellLibs();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message);
|
||
}
|
||
|
||
}
|
||
|
||
return;
|
||
#endif
|
||
//var agenda = new ElementAgenda();
|
||
//SelectionSetManager.BuildAgenda(ref agenda);
|
||
//var element = agenda.GetFirst();
|
||
|
||
#if False
|
||
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
|
||
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
|
||
try
|
||
{
|
||
|
||
ConfigurationPropsAttachView attachView = new ConfigurationPropsAttachView();
|
||
//让窗口始终在应用程序顶部
|
||
attachView.Owner = Application.Current.MainWindow;
|
||
attachView.DataContext = new ConfigurationPropsAttachViewModel();
|
||
attachView.Show();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message);
|
||
}
|
||
//finally
|
||
//{
|
||
// AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
|
||
//}
|
||
return;
|
||
#endif
|
||
|
||
//JsonConvert.SerializeObject(configs, Formatting.Indented);
|
||
//return;
|
||
|
||
#if false
|
||
|
||
//OpenFileDialog openFileDialog = new OpenFileDialog
|
||
//{
|
||
// Filter = "DGN Files (*.dgn)|*.dgn|All Files (*.*)|*.*",
|
||
// Title = "选择DGN文件"
|
||
//};
|
||
//if (openFileDialog.ShowDialog() == true)
|
||
//{
|
||
// string filePath = openFileDialog.FileName;
|
||
// var schema = SchemaHelpers.DefineECSchemaFromXml(filePath);
|
||
// SchemaHelpers.ImportSchema(schema);
|
||
//}
|
||
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
|
||
ConfigurationPropsAttachView view = new();
|
||
view.Show();
|
||
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
|
||
|
||
return;
|
||
|
||
#endif
|
||
|
||
#if false
|
||
var cs = ZYJSCSHelpers.GetDataByLevelName("JG_ZYJSCS");
|
||
StringBuilder sb = new StringBuilder();
|
||
foreach (var model in cs)
|
||
{
|
||
sb.AppendLine($"{model.Name},{model.Measurement},{model.Result}");
|
||
}
|
||
MessageBox.Show(sb.ToString());
|
||
|
||
return;
|
||
#endif
|
||
//List<Element> elements = GetSelectedElements();
|
||
//中线
|
||
#if true
|
||
StringBuilder sb = new StringBuilder();
|
||
//var dgnModel = Session.Instance.GetActiveDgnModel();
|
||
//var elements = dgnModel.GetElements().Where(e => e is not MeshHeaderElement && e.GetLevel().DisplayName == "JG_ZYJSCS").ToList();
|
||
//var resultelement = Union(elements);
|
||
//var volume = CustomOpenItemHelpers.GetPropertiesByName(resultelement, "Volume")?.FirstOrDefault();
|
||
//if (volume != null)
|
||
//{
|
||
// var uorMeter = dgnModel.GetModelInfo().UorPerMeter;
|
||
// volume.TryGetNativeValue(out var value);
|
||
// double d = Convert.ToDouble(value) / (uorMeter * uorMeter * uorMeter);
|
||
//}
|
||
|
||
Dictionary<Element, double> dic = TunnelLengthHelper.GetMeshProjectLength("XL_ZXX");
|
||
var total = 0.0;
|
||
string str = string.Empty;
|
||
try
|
||
{
|
||
int n = 0;
|
||
foreach (var item in dic)
|
||
{
|
||
sb.AppendLine($"{n + 1} 元素ID:{item.Key.ElementId}--投影长度:{item.Value}");
|
||
n++;
|
||
total += item.Value;
|
||
str += item.Key.ElementId + ";";
|
||
}
|
||
//MessageBox.Show(sb.ToString());
|
||
}
|
||
catch (Exception)
|
||
{
|
||
|
||
throw;
|
||
}
|
||
sb.AppendLine($"合计:{total}");
|
||
sb.AppendLine(str);
|
||
MessageBox.Show(sb.ToString());
|
||
return;
|
||
#endif
|
||
#if false
|
||
DgnModelRef dgnModelRef = Session.Instance.GetActiveDgnModelRef();
|
||
StringBuilder sb = new StringBuilder();
|
||
//dgnModel.GetLevelCache().GetLevelByName("JG_ZYJSCS");
|
||
try
|
||
{
|
||
var dict1 = CustomOpenItemHelpers.GetCutstomItemByLevelName("JG_ZYJSCS");
|
||
var dict = TunnelZYJSCSHelpers.GetDataByLevelName("JG_ZYJSCS");
|
||
var v = dict.Values.FirstOrDefault(item => !string.IsNullOrEmpty(item.Formula));
|
||
foreach (var item in dict)
|
||
{
|
||
sb.AppendLine($"{item.Key}:{item.Value}");
|
||
}
|
||
LogHelper.WriteLine(sb.ToString());
|
||
var result = v?.Result;
|
||
}
|
||
catch (Exception)
|
||
{
|
||
|
||
}
|
||
return;
|
||
#endif
|
||
|
||
//获取当前选择的元素集
|
||
//var agenda = new ElementAgenda();
|
||
//SelectionSetManager.BuildAgenda(ref agenda);
|
||
|
||
//var element = agenda.GetFirst();
|
||
////var elementId = long.Parse("65256");
|
||
////var element = dgnModel.FindElementById(new ElementId(ref elementId));
|
||
//var value = element.GetProperyValues("Volume").FirstOrDefault();
|
||
//var val = element.GetProperyValues("体积").FirstOrDefault();
|
||
|
||
|
||
SelectElementTest();
|
||
|
||
//CustomTool.InstallNewTool();
|
||
//UserPickTool.Setup(e => true, e =>
|
||
//{
|
||
// StringBuilder sb = new();
|
||
// for (uint i = 0; i < e.GetCount(); i++)
|
||
// {
|
||
// var elem = e.GetEntry(i);
|
||
// var host = new CustomItemHost(elem, false);
|
||
// var instances = host.CustomItems;
|
||
// //host.CopyCustomItems(host.CustomItems, false);
|
||
// foreach (var lib in instances)
|
||
// {
|
||
// var str = lib.GetType().FullName;
|
||
// }
|
||
// //elem.AttachItemType()
|
||
// }
|
||
//});
|
||
|
||
//var data = ZYJSCSHelpers.GetCutstomItemLevelName("JG_ZYJSCS");
|
||
//var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "算量.txt");
|
||
|
||
//foreach (var model in data)
|
||
//{
|
||
// //SharedCellElement
|
||
// //sb.AppendLine($"{model.Name}-{model.MeasurementStr}-{model.Result}");
|
||
// //var d = model.Result;
|
||
// //var str = model.Message?.ToString();
|
||
// File.AppendAllText(path, $"{model.Name}-{model.MeasurementStr}-{model.Result}\n");
|
||
//}
|
||
return;
|
||
|
||
#if false
|
||
UserPickTool.Setup(
|
||
e => true,
|
||
e =>
|
||
{
|
||
for (uint i = 0; i < e.GetCount(); i++)
|
||
{
|
||
var elem = e.GetEntry(i);
|
||
var count = elem.GetChildren();
|
||
ChildElementEnumerator enumeratorPro = new ChildElementEnumerator(elem);
|
||
List<Element> childElementsPro = new List<Element>();
|
||
while (enumeratorPro.MoveNext())
|
||
{
|
||
if (enumeratorPro.Current != null)
|
||
{
|
||
childElementsPro.Add(enumeratorPro.Current);
|
||
}
|
||
}
|
||
DgnModel dgnModel = Session.Instance.GetActiveDgnModel();
|
||
//var items = dgnModel.GetGraphicElements();
|
||
//var filters = items.Where(e => e.ParentElement.ElementId == elem.ElementId);
|
||
//GraphicProcessor process = new GraphicProcessor();
|
||
if (elem is ExtendedElementElement extended)
|
||
{
|
||
var list = extended.GetChildren();
|
||
SolidKernelEntity entity = null;
|
||
Element newElement = null;
|
||
var status = SmartFeatureUtil.GetSolidKernelEntity(ref entity, elem);
|
||
if (SmartFeatureElement.IsSmartFeature(elem))
|
||
{
|
||
|
||
var c = SmartFeatureElement.GetSmartFeatureDependentCount(extended);
|
||
try
|
||
{
|
||
var statusInt = SmartFeatureElement.GetOrCreateSmartFeature(
|
||
ref newElement,
|
||
null,
|
||
dgnModel,
|
||
elem,
|
||
true,
|
||
true,
|
||
true,
|
||
true);
|
||
}
|
||
catch (Exception)
|
||
{
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
//ElementGraphicsOutput.Process(elem, process);
|
||
}
|
||
});
|
||
|
||
UserPickTool.Setup(
|
||
e => e is MeshHeaderElement,
|
||
a =>
|
||
{
|
||
for (uint i = 0; i < a.GetCount(); i++)
|
||
{
|
||
//long l = Convert.ToInt32(unparsed);
|
||
//var id = new ElementId(ref l);
|
||
//var elem = dgnModel.FindElementById(id);
|
||
|
||
var elem = a.GetEntry(i) as MeshHeaderElement;
|
||
//int[] iArrMeshDivide = { };//元素id
|
||
|
||
//bool bRet = ClrCode.GeneralToolClr.DivideMesh(elem.ElementId.GetHashCode(), ref iArrMeshDivide);
|
||
//if (bRet && iArrMeshDivide.Count() > 0)
|
||
//{
|
||
// var sb = new StringBuilder();
|
||
// int n = 1;
|
||
// foreach (var iEle in iArrMeshDivide)
|
||
// {
|
||
// ulong lEle = (ulong)iEle;
|
||
// var id = new ElementId(ref lEle);
|
||
// var elemSub = Session.Instance.GetActiveDgnModel().FindElementById(id);
|
||
// //sb = elem.ReadAllProperties();
|
||
// sb.AppendLine(
|
||
// $"{n}、图层ID:{elem.LevelId},图层:{elem.GetLevel().DisplayName},元素ID:{elem.ElementId},元素类型名称:{elemSub.TypeName},元素描述:{elem.Description},元素类型:{elem.ElementType}\n");
|
||
// File.WriteAllText(
|
||
// Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "元素集.txt"),
|
||
// sb.ToString());
|
||
// }
|
||
//}
|
||
try
|
||
{
|
||
|
||
//var pots = TunnelLengthHelper.GetBoundariesFromMeshByProject(elem);
|
||
|
||
|
||
//ElementCreationHelpers.CreateShape(pots.ToArray());
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageCenter.Instance.ShowInfoMessage(ex.Message, ex.StackTrace, false);
|
||
}
|
||
|
||
}
|
||
});
|
||
#endif
|
||
|
||
}
|
||
|
||
private static void SelectElementTest()
|
||
{
|
||
UserPickTool.Setup(e => true, e =>
|
||
{
|
||
List<Element> elems = new List<Element>();
|
||
//StringBuilder sb = new();
|
||
for (uint i = 0; i < e.GetCount(); i++)
|
||
{
|
||
var elem = e.GetEntry(i);
|
||
elems.Add(elem);
|
||
|
||
//ModifyUnit(elem);
|
||
//var count = elem.GetChildren();
|
||
|
||
//if (elem is SharedCellElement sharedCell)
|
||
//{
|
||
// DropGeometry geom = new DropGeometry();
|
||
// geom.SetOptions(DropGeometry.Options.OPTION_SharedCells);
|
||
// geom.SetSharedCellOptions(DropGeometry.SharedCells.SHAREDCELL_Geometry);
|
||
// ElementAgenda agenda = new ElementAgenda();
|
||
// var status = MstnMixedAssistant.ElementOperation.DropElement(elem, out agenda, geom);
|
||
// if (status == StatusInt.Success)
|
||
// {
|
||
// for (uint j = 0; j < agenda.GetCount(); j++)
|
||
// {
|
||
// var elem = agenda.GetEntry(j);
|
||
// }
|
||
// }
|
||
// //var definition = sharedCell.GetDefinition(Session.Instance.GetActiveDgnFile());
|
||
// //foreach (var child in definition.GetChildren())
|
||
// //{
|
||
// //}
|
||
//}
|
||
|
||
//var l = elem.GetLevel().DisplayName;
|
||
//MessageBox.Show(l);
|
||
|
||
//sb.AppendLine($"Id:{elem.ElementId}");
|
||
//sb.AppendLine($"Type:{elem.GetType().FullName}");
|
||
//sb.AppendLine($"ElementType:{elem.ElementType}");
|
||
//sb.AppendLine($"Description:{elem.Description}");
|
||
//elem.ReadAllProperties();
|
||
}
|
||
var groups = elems.GroupBy(e => e.GetProperyValues("土岩分类").FirstOrDefault().StringValue);
|
||
var list = new Dictionary<string, string>();
|
||
StringBuilder sb = new StringBuilder();
|
||
|
||
foreach (var g in groups)
|
||
{
|
||
sb.AppendLine(g.Key);
|
||
double volume = 0;
|
||
foreach (var elem in g)
|
||
{
|
||
var temp = elem.GetProperyValues("Volume").FirstOrDefault().DoubleValue / (Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter * Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter * Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter);
|
||
volume += temp;
|
||
sb.AppendLine($"元素ID:{elem.ElementId}--元素描述:{elem.Description}--体积:{temp}");
|
||
//list.Add(g.Key + volume, );
|
||
}
|
||
sb.AppendLine($"总体积:{volume}");
|
||
}
|
||
//foreach (var item in list)
|
||
//{
|
||
// sb.AppendLine($"{item.Key}");
|
||
|
||
// foreach (var el in item.Value)
|
||
// {
|
||
// sb.AppendLine($"{el.ElementId}");
|
||
// }
|
||
//}
|
||
MessageBox.Show(sb.ToString());
|
||
});
|
||
}
|
||
|
||
private static void ExportItemTypeToJson()
|
||
{
|
||
var libs = QuickModeling.ItemTypesHelpers.GetItemTypeLibraries();
|
||
var configs = new List<ComponentConfig>();
|
||
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
|
||
try
|
||
{
|
||
foreach (var lib in libs)
|
||
{
|
||
ComponentConfig config = new ComponentConfig()
|
||
{
|
||
ComponentType = ComponentType.SegmentRing,
|
||
Guid = Guid.NewGuid(),
|
||
Name = lib.Name,
|
||
};
|
||
|
||
config.Parameters = new ObservableCollection<Parameter>();
|
||
//通过Ascii判断是否是英文字母开头
|
||
char firstChar = lib.Name[0];
|
||
if ((firstChar < 'A' || firstChar > 'Z') && (firstChar < 'a' || firstChar > 'z'))
|
||
{
|
||
foreach (var item in lib.ItemTypes)
|
||
{
|
||
|
||
var props = QuickModeling.ItemTypesHelpers.GetProperties(item);
|
||
foreach (var prop in props)
|
||
{
|
||
Parameter paramter = new Parameter()
|
||
{
|
||
Group = item.Name,
|
||
Name = prop.Name,
|
||
DataType = (TypeKind)prop.Type,
|
||
Value = prop.DefaultValue,
|
||
};
|
||
config.Parameters.Add(paramter);
|
||
}
|
||
}
|
||
}
|
||
configs.Add(config);
|
||
}
|
||
var jsonStr = JsonConvert.SerializeObject(configs, Formatting.Indented);
|
||
string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Configs", "Configurations.json");
|
||
if (!File.Exists(path))
|
||
{
|
||
File.Create(path).Close();
|
||
}
|
||
File.WriteAllText(path, jsonStr);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show(ex.Message);
|
||
}
|
||
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
|
||
}
|
||
|
||
}
|
||
}
|