添加项目文件。

This commit is contained in:
GG Z
2026-02-28 21:01:57 +08:00
parent 9fe4e5a9aa
commit 7a229067cc
175 changed files with 18060 additions and 0 deletions

View File

@@ -0,0 +1,644 @@
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;
}
}
}