添加项目文件。

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,150 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Bentley.GeometryNET;
using Bentley.MstnPlatformNET;
using Newtonsoft.Json;
namespace RingPlacementAddin
{
//[JsonObject(MemberSerialization.OptIn)]
internal class RingInfo
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("transform")]
public List<List<double>> Transform { get; set; }
//[JsonProperty("Translation")]
//public List<double> Translation { get; set; }
//public DPoint3d Origin
//{
// get
// {
// if (Translation == null || Translation.Count != 3)
// throw new ArgumentException("Translation must be a list of three doubles.");
// double uorMeter = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter;
// return DPoint3d.FromXYZ(Translation[0], Translation[1], Translation[2]) * uorMeter;
// }
//}
[JsonIgnore]
public DTransform3d Transform3d => ToTransform3d(Transform);
//private DTransform3d ToTransform3d()
//{
// var translation = DTransform3d.Identity;
// translation.Translation = Origin;
// DTransform3d rotation = DTransform3d.FromRotationAroundLine(DPoint3d.Zero, Axis, Angle.FromDegrees(Degrees));
// return DTransform3d.Multiply(translation, rotation);
//}
private DTransform3d ToTransform3d(List<List<double>> transform)
{
StringBuilder sb = new StringBuilder();
if (transform.Count != 4 || transform.Any(t => t.Count != 4))
throw new ArgumentException("Invalid transform format. Expected a 4x4 matrix.");
double uorMeter = Session.Instance.GetActiveDgnModel().GetModelInfo().UorPerMeter;
var trans = DTransform3d.Identity;
var origin = DPoint3d.FromXYZ(
transform[0][3],
transform[1][3],
transform[2][3]) * uorMeter;
trans.Translation = origin;
//Z轴的旋转角度偏航角yaw
var zAngle = Math.Atan2(transform[1][0], transform[0][0]);
//X轴的旋转角度俯仰角pitch
var xAngle = Math.Atan2(transform[2][1], transform[2][2]);
//Y轴的旋转角度滚转角roll
var yAngle = Math.Atan2(transform[2][0], transform[0][0]);
var ax = Angle.FromRadians(xAngle);
var ay = Angle.FromRadians(yAngle);
var az = Angle.FromRadians(zAngle);
sb.AppendLine($"{Name}修正前X夹角: {ax.Degrees}, Y夹角: {ay.Degrees}, Z夹角: {az.Degrees}");
if (Math.Abs(ay.Degrees) > 90)
{
if (ay.Degrees > 90)
{
ay = Angle.FromDegrees(180 - ay.Degrees);
}
else
{
ay = Angle.FromDegrees(-180 - ay.Degrees);
}
//ax += Angle.FromDegrees(180);
//az += Angle.FromDegrees(180);
}
//if (ay.Degrees < -90)
//{
// ay = Angle.FromDegrees(180 + ay.Degrees);
//}
sb.AppendLine($"{Name}修正后X夹角: {ax.Degrees}, Y夹角: {ay.Degrees}, Z夹角: {az.Degrees}");
sb.AppendLine();
var rox = DTransform3d.Rotation(0, ax);
var roy = DTransform3d.Rotation(1, ay);
var roz = DTransform3d.Rotation(2, az);
var d1 = DTransform3d.Multiply(roy, roz);
var d2 = DTransform3d.Multiply(rox, d1);
var fin = DTransform3d.Multiply(trans, d2);
//sb.AppendLine($"绕X轴变换矩阵ColumnX: {rox.ColumnX}");
//sb.AppendLine($"绕X轴变换矩阵ColumnY: {rox.ColumnY}");
//sb.AppendLine($"绕X轴变换矩阵ColumnZ: {rox.ColumnZ}");
//sb.AppendLine($"绕Y轴变换矩阵ColumnX: {roy.ColumnX};");
//sb.AppendLine($"绕Y轴变换矩阵ColumnY: {roy.ColumnY};");
//sb.AppendLine($"绕Y轴变换矩阵ColumnZ: {roy.ColumnZ};");
//sb.AppendLine($"绕Z轴变换矩阵ColumnX: {roz.ColumnX}");
//sb.AppendLine($"绕Z轴变换矩阵ColumnY: {roz.ColumnY}");
//sb.AppendLine($"绕Z轴变换矩阵ColumnZ: {roz.ColumnZ}");
//sb.AppendLine($"绕Y轴和Z轴变换矩阵ColumnX: {d1.ColumnX}");
//sb.AppendLine($"绕Y轴和Z轴变换矩阵ColumnY: {d1.ColumnY}");
//sb.AppendLine($"绕Y轴和Z轴变换矩阵ColumnZ: {d1.ColumnZ}");
//sb.AppendLine($"绕ZYX轴旋转矩阵ColumnX: {d2.ColumnX}");
//sb.AppendLine($"绕ZYX轴旋转矩阵ColumnY: {d2.ColumnY}");
//sb.AppendLine($"绕ZYX轴旋转矩阵ColumnZ: {d2.ColumnZ}");
//sb.AppendLine($"最终变换矩阵ColumnX: {fin.ColumnX}");
//sb.Append($"最终变换矩阵ColumnY: {fin.ColumnY}");
//sb.Append($"最终变换矩阵ColumnZ: {fin.ColumnZ}");
//LogHelper.WriteLine(sb.ToString());
return fin;
}
//public DVector3d Axis => DVector3d.FromXYZ(RotationAxis[0], RotationAxis[1], RotationAxis[2]);
//[JsonProperty("Rotation axis")]
//public List<double> RotationAxis { get; set; }
//[JsonProperty("Rotation angle")]
//public double Degrees { get; set; }
public override string ToString()
{
return $"Name: {Name}, Transform: {Transform3d}";
}
}
internal class RingData
{
[JsonProperty("models")]
public List<RingInfo> Rings { get; set; }
}
internal class RingInfoReader
{
public static RingData Read(string filePath)
{
//var dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
//var filePath = Path.Combine(dir, "Pose.json");
return JsonConvert.DeserializeObject<RingData>(File.ReadAllText(filePath));
//return JsonConvert.DeserializeObject<RingData>(json);
}
}
}