包含: - furniture-3d-system:Next.js 16 全栈应用(资产中心、产品管理、3D装配动画) - autocad-plugin:AutoCAD 家具导出插件源码 - 资产中心改造:编辑弹窗化、删除功能、Toast反馈、自定义Select组件 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
754 lines
20 KiB
C#
754 lines
20 KiB
C#
using System.Collections.Generic;
|
||
|
||
namespace FurnitureExporter;
|
||
|
||
/// <summary>
|
||
/// 导出数据(JSON 根对象)
|
||
/// </summary>
|
||
public class ExportData
|
||
{
|
||
/// <summary>
|
||
/// 数据格式版本
|
||
/// </summary>
|
||
public string Version { get; set; } = "2.4";
|
||
|
||
/// <summary>
|
||
/// 导出时间 (ISO 8601)
|
||
/// </summary>
|
||
public string ExportedAt { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 源文件名
|
||
/// </summary>
|
||
public string SourceFile { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 导出软件
|
||
/// </summary>
|
||
public string Software { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 插件版本
|
||
/// </summary>
|
||
public string PluginVersion { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 板材模型文件名
|
||
/// </summary>
|
||
public string ModelFile { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 板材数量
|
||
/// </summary>
|
||
public int PanelCount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 图纸单位(毫米/厘米/米等)
|
||
/// </summary>
|
||
public string Units { get; set; } = "毫米";
|
||
|
||
/// <summary>
|
||
/// 原点偏移 [X, Y, Z] (mm)
|
||
/// 所有坐标已应用此偏移,使模型居中于原点
|
||
/// </summary>
|
||
public double[]? OriginOffset { get; set; }
|
||
|
||
/// <summary>
|
||
/// 模型边界尺寸 [宽, 高, 深] (mm)
|
||
/// </summary>
|
||
public double[]? ModelBounds { get; set; }
|
||
|
||
/// <summary>
|
||
/// 板材列表(v2.0 新增)
|
||
/// </summary>
|
||
public List<PanelInfo> Panels { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 孔位列表(v2.0 新增)
|
||
/// </summary>
|
||
public List<HoleInfo> Holes { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 被过滤/排除的孔位列表(兜底用)。
|
||
///
|
||
/// 说明:
|
||
/// - Holes 是“默认展示/默认参与关联”的孔位;
|
||
/// - ExcludedHoles 用于排查/兜底模式:当过滤规则误判导致漏孔时,Web 端可让设计师手动复核并启用。
|
||
/// - Reason 必须为中文,便于非技术用户理解。
|
||
/// </summary>
|
||
public List<ExcludedHoleInfo>? ExcludedHoles { get; set; }
|
||
|
||
/// <summary>
|
||
/// 逻辑孔位分组(v2.2.4 新增)
|
||
/// 典型用法:偏心件孔(大孔+侧孔)在几何上是两个圆柱孔,但业务上希望计为 1 个“孔位”。
|
||
/// </summary>
|
||
public List<HoleGroupInfo> HoleGroups { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 逻辑孔位数量(v2.2.4 新增)
|
||
/// 计算方式:以 HoleGroupId 合并计数(HoleGroupId 为空则按 Hole.Id 计数)。
|
||
/// </summary>
|
||
public int? LogicalHoleCount { get; set; }
|
||
|
||
/// <summary>
|
||
/// 边缘特征列表(倒角/圆角)(v2.1 新增)
|
||
/// </summary>
|
||
public List<EdgeFeatureInfo> EdgeFeatures { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 五金件类型列表
|
||
/// </summary>
|
||
public List<HardwareType> HardwareTypes { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 图层信息映射(v2.2 新增)
|
||
/// key: 图层名称, value: 图层分类信息
|
||
/// </summary>
|
||
public Dictionary<string, LayerInfo> Layers { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 五金件按图层分类汇总(v2.2 新增)
|
||
/// </summary>
|
||
public List<HardwareLayerSummary> HardwareSummary { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 装配语义导出层(v2.4 草稿)
|
||
/// 说明:
|
||
/// - 仅导出“板件如何与其他板件/五金发生装配关系”的语义线索;
|
||
/// - 不包含最终安装顺序,安装顺序仍由 Web 端人工设定。
|
||
/// </summary>
|
||
public AssemblyData? Assembly { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 装配语义导出层
|
||
/// </summary>
|
||
public class AssemblyData
|
||
{
|
||
/// <summary>
|
||
/// 装配语义格式版本
|
||
/// </summary>
|
||
public string Version { get; set; } = "1.0";
|
||
|
||
/// <summary>
|
||
/// 每块板件的装配语义
|
||
/// </summary>
|
||
public List<PanelAssemblyInfo> PanelAssemblies { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 板件之间的连接关系
|
||
/// </summary>
|
||
public List<AssemblyConnectionInfo> Connections { get; set; } = new();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 单块板件的装配语义
|
||
/// </summary>
|
||
public class PanelAssemblyInfo
|
||
{
|
||
public string PanelId { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 装配模式:slide_in / drop_in / rotate_into_place / unknown
|
||
/// </summary>
|
||
public string MountMode { get; set; } = "unknown";
|
||
|
||
/// <summary>
|
||
/// 主装配轴(单位向量,表示从最终位往外拉开的方向)
|
||
/// </summary>
|
||
public double[] AssemblyAxis { get; set; } = new double[3];
|
||
|
||
/// <summary>
|
||
/// 离散装配方向:left / right / front / back / top / bottom / unknown
|
||
/// </summary>
|
||
public string AssemblyDirection { get; set; } = "unknown";
|
||
|
||
/// <summary>
|
||
/// 进入装配前建议预偏移向量(mm)
|
||
/// </summary>
|
||
public double[]? PreAssembleOffset { get; set; }
|
||
|
||
/// <summary>
|
||
/// 建议装配移动距离(mm)
|
||
/// </summary>
|
||
public double TravelDistance { get; set; }
|
||
|
||
/// <summary>
|
||
/// 依赖的支撑/目标板件 ID
|
||
/// </summary>
|
||
public List<string> DependsOn { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 主要支撑板件 ID
|
||
/// </summary>
|
||
public string? PrimarySupportPanelId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 目标板件 ID 列表
|
||
/// </summary>
|
||
public List<string> TargetPanelIds { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 板件级配合面映射(left/right/front/back/top/bottom)
|
||
/// </summary>
|
||
public PanelAssemblyMateMap Mates { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 语义置信度(0-1)
|
||
/// </summary>
|
||
public double Confidence { get; set; }
|
||
|
||
/// <summary>
|
||
/// 风险/歧义提示
|
||
/// </summary>
|
||
public List<string> Warnings { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 是否为自动推导结果
|
||
/// </summary>
|
||
public bool AutoGenerated { get; set; } = true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 板件之间的连接关系
|
||
/// </summary>
|
||
public class AssemblyConnectionInfo
|
||
{
|
||
public string SourcePanelId { get; set; } = "";
|
||
public string TargetPanelId { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 连接类型:hole_group_hardware / hole_hardware / panel_hardware / adjacent_face / panel_type_fallback
|
||
/// </summary>
|
||
public string ConnectionType { get; set; } = "adjacent_face";
|
||
|
||
public string SelfFace { get; set; } = "unknown";
|
||
public string TargetFace { get; set; } = "unknown";
|
||
public double Confidence { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 板件级配合面映射
|
||
/// </summary>
|
||
public class PanelAssemblyMateMap
|
||
{
|
||
public List<string>? Left { get; set; }
|
||
public List<string>? Right { get; set; }
|
||
public List<string>? Front { get; set; }
|
||
public List<string>? Back { get; set; }
|
||
public List<string>? Top { get; set; }
|
||
public List<string>? Bottom { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 板材信息(v2.0 新增)
|
||
/// </summary>
|
||
public class PanelInfo
|
||
{
|
||
/// <summary>
|
||
/// 板材 ID(自动生成,如 panel_001)
|
||
/// </summary>
|
||
public string Id { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 源实体句柄
|
||
/// </summary>
|
||
public string SourceHandle { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 源图层名
|
||
/// </summary>
|
||
public string? SourceLayer { get; set; }
|
||
|
||
/// <summary>
|
||
/// 推断的板件类型(v2.2 新增)
|
||
/// </summary>
|
||
public string? PanelType { get; set; }
|
||
|
||
/// <summary>
|
||
/// 中心位置 [X, Y, Z] (mm)
|
||
/// </summary>
|
||
public double[] Position { get; set; } = new double[3];
|
||
|
||
/// <summary>
|
||
/// 尺寸 [长, 宽, 厚] (mm),已排序
|
||
/// </summary>
|
||
public double[] Size { get; set; } = new double[3];
|
||
|
||
/// <summary>
|
||
/// 板材法向量(厚度方向)[X, Y, Z]
|
||
/// </summary>
|
||
public double[] Normal { get; set; } = new double[3];
|
||
|
||
/// <summary>
|
||
/// 边界框
|
||
/// </summary>
|
||
public BoundingBox3D? BoundingBox { get; set; }
|
||
|
||
/// <summary>
|
||
/// 该板材上的孔位列表
|
||
/// </summary>
|
||
public List<HoleInfo> Holes { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 该板件上的逻辑孔位分组(v2.2.4 新增)
|
||
/// </summary>
|
||
public List<HoleGroupInfo> HoleGroups { get; set; } = new();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 被排除的孔位(用于兜底/排查模式)
|
||
/// </summary>
|
||
public class ExcludedHoleInfo
|
||
{
|
||
/// <summary>
|
||
/// 孔位数据(与 Holes 相同结构)
|
||
/// </summary>
|
||
public HoleInfo Hole { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 排除原因(中文)
|
||
/// </summary>
|
||
public string Reason { get; set; } = "";
|
||
}
|
||
|
||
/// <summary>
|
||
/// 孔位信息(v2.0 新增)
|
||
/// </summary>
|
||
public class HoleInfo
|
||
{
|
||
/// <summary>
|
||
/// 孔位 ID(如 panel_001_hole_001)
|
||
/// </summary>
|
||
public string Id { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 孔中心位置 [X, Y, Z] (mm)
|
||
/// </summary>
|
||
public double[] Position { get; set; } = new double[3];
|
||
|
||
/// <summary>
|
||
/// 孔方向(法向量)[X, Y, Z]
|
||
/// </summary>
|
||
public double[] Normal { get; set; } = new double[3];
|
||
|
||
/// <summary>
|
||
/// 孔直径 (mm)
|
||
/// </summary>
|
||
public double Diameter { get; set; }
|
||
|
||
/// <summary>
|
||
/// 孔半径 (mm)
|
||
/// </summary>
|
||
public double Radius { get; set; }
|
||
|
||
/// <summary>
|
||
/// 孔深度 (mm)
|
||
/// </summary>
|
||
public double Depth { get; set; }
|
||
|
||
/// <summary>
|
||
/// 所属板材 ID
|
||
/// </summary>
|
||
public string PanelId { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 孔位检测来源:
|
||
/// - brep:来自板件实体 Brep 真孔
|
||
/// - marker:来自图纸标注/块/点位兜底识别
|
||
/// </summary>
|
||
public string DetectionSource { get; set; } = "brep";
|
||
|
||
/// <summary>
|
||
/// 孔位与板件的绑定来源:
|
||
/// - panel_brep:在当前板件实体内直接提取
|
||
/// - marker_face:标注孔贴面匹配到板件
|
||
/// - marker_box:标注孔按包围盒退化匹配到板件
|
||
/// </summary>
|
||
public string BindingSource { get; set; } = "panel_brep";
|
||
|
||
/// <summary>
|
||
/// 孔位与板件绑定的置信度(0-1)
|
||
/// </summary>
|
||
public double BindingConfidence { get; set; } = 1.0;
|
||
|
||
/// <summary>
|
||
/// 绑定原因说明(调试/回放)
|
||
/// </summary>
|
||
public string? BindingReason { get; set; }
|
||
|
||
/// <summary>
|
||
/// 孔类型:"through"(通孔)| "blind"(盲孔)
|
||
/// </summary>
|
||
public string Type { get; set; } = "blind";
|
||
|
||
/// <summary>
|
||
/// 逻辑孔位分组 ID(v2.2.4 新增)
|
||
/// 偏心件等复合孔会被分到同一个 HoleGroupId,便于“按孔位”计数与展示。
|
||
/// </summary>
|
||
public string? HoleGroupId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 逻辑孔位分组类型(v2.2.4 新增)
|
||
/// 例如:eccentric_screw
|
||
/// </summary>
|
||
public string? HoleGroupType { get; set; }
|
||
|
||
/// <summary>
|
||
/// 当前孔在分组中的角色(v2.2.4 新增)
|
||
/// 例如:main(主孔)/ side(侧孔)
|
||
/// </summary>
|
||
public string? HoleGroupRole { get; set; }
|
||
|
||
/// <summary>
|
||
/// 推断的用途(根据直径)
|
||
/// </summary>
|
||
public string? InferredUsage { get; set; }
|
||
|
||
/// <summary>
|
||
/// 针对该孔位的紧固件建议(v2.3 新增)
|
||
/// 说明:
|
||
/// - 这是“插件端基于几何特征的候选建议”,不是最终装配 BOM。
|
||
/// - 常见场景:通过孔径/深度/通孔或盲孔特征,把孔映射到更可能的螺丝直径(例如 4.8mm 的盲孔导孔通常更像 M6)。
|
||
/// - Web 端可以直接展示 Top1/Top2,并在低置信度时引导人工复核(不要求设计师额外操作)。
|
||
/// </summary>
|
||
public List<FastenerSuggestion>? SuggestedFasteners { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 紧固件建议(v2.3 新增)
|
||
/// </summary>
|
||
public class FastenerSuggestion
|
||
{
|
||
/// <summary>
|
||
/// 建议类别:screw(螺丝)/ connector(连接件)等
|
||
/// 当前版本主要用于 screw
|
||
/// </summary>
|
||
public string Category { get; set; } = "screw";
|
||
|
||
/// <summary>
|
||
/// 公称直径(mm),例如 6 表示 M6
|
||
/// </summary>
|
||
public double NominalDiameter { get; set; }
|
||
|
||
/// <summary>
|
||
/// 常见规格示例(来自五金标准库的“常用项”,用于 UI 展示/人工复核)
|
||
/// 注意:孔的几何通常无法唯一推断螺丝长度,所以这里给的是候选样例。
|
||
/// </summary>
|
||
public List<string>? CommonSpecs { get; set; }
|
||
|
||
/// <summary>
|
||
/// 置信度(0-1),用于排序与低置信度提示
|
||
/// </summary>
|
||
public double Confidence { get; set; }
|
||
|
||
/// <summary>
|
||
/// 可读原因(给调试/回放用)
|
||
/// </summary>
|
||
public string? Reason { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 逻辑孔位分组(v2.2.4 新增)
|
||
/// </summary>
|
||
public class HoleGroupInfo
|
||
{
|
||
/// <summary>
|
||
/// 分组 ID(如 panel_001_group_001)
|
||
/// </summary>
|
||
public string Id { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 所属板件 ID
|
||
/// </summary>
|
||
public string PanelId { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 分组类型:eccentric_screw / unknown 等
|
||
/// </summary>
|
||
public string GroupType { get; set; } = "unknown";
|
||
|
||
/// <summary>
|
||
/// 该逻辑孔位包含的几何孔 ID 列表
|
||
/// </summary>
|
||
public string[] HoleIds { get; set; } = System.Array.Empty<string>();
|
||
|
||
/// <summary>
|
||
/// 逻辑孔位参考点(默认取主孔中心)[X, Y, Z] (mm)
|
||
/// </summary>
|
||
public double[] Position { get; set; } = new double[3];
|
||
|
||
/// <summary>
|
||
/// 逻辑孔位参考方向(默认取主孔法向)[X, Y, Z]
|
||
/// </summary>
|
||
public double[] Normal { get; set; } = new double[3];
|
||
|
||
/// <summary>
|
||
/// 置信度(0-1),用于调试与后续 Web 端提示
|
||
/// </summary>
|
||
public double Confidence { get; set; }
|
||
|
||
/// <summary>
|
||
/// 可读原因(调试/回放)
|
||
/// </summary>
|
||
public string? Reason { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 3D 边界框
|
||
/// </summary>
|
||
public class BoundingBox3D
|
||
{
|
||
/// <summary>
|
||
/// 最小点 [X, Y, Z]
|
||
/// </summary>
|
||
public double[] Min { get; set; } = new double[3];
|
||
|
||
/// <summary>
|
||
/// 最大点 [X, Y, Z]
|
||
/// </summary>
|
||
public double[] Max { get; set; } = new double[3];
|
||
}
|
||
|
||
/// <summary>
|
||
/// 五金件类型(按几何特征分组)
|
||
/// </summary>
|
||
public class HardwareType
|
||
{
|
||
/// <summary>
|
||
/// 类型 ID (导出时生成,如 type_001)
|
||
/// </summary>
|
||
public string TypeId { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 几何特征(用于匹配五金件库)
|
||
/// </summary>
|
||
public GeometrySignature Signature { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 此类型的所有实例(安装位置)
|
||
/// </summary>
|
||
public List<HardwareInstance> Instances { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 匹配到的五金件库 ID(服务端填充)
|
||
/// </summary>
|
||
public string? MatchedHardwareId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 主要来源图层名(v2.2 新增)
|
||
/// </summary>
|
||
public string? PrimaryLayerName { get; set; }
|
||
|
||
/// <summary>
|
||
/// 根据图层名推断的五金件类型(v2.2 新增)
|
||
/// </summary>
|
||
public string? InferredHardwareType { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 几何特征签名(用于五金件匹配)
|
||
/// </summary>
|
||
public class GeometrySignature
|
||
{
|
||
/// <summary>
|
||
/// 边界框宽度 (mm) - 最大尺寸
|
||
/// </summary>
|
||
public double Width { get; set; }
|
||
|
||
/// <summary>
|
||
/// 边界框高度 (mm) - 中间尺寸
|
||
/// </summary>
|
||
public double Height { get; set; }
|
||
|
||
/// <summary>
|
||
/// 边界框深度 (mm) - 最小尺寸
|
||
/// </summary>
|
||
public double Depth { get; set; }
|
||
|
||
/// <summary>
|
||
/// 体积 (mm³),0 表示未知
|
||
/// </summary>
|
||
public double Volume { get; set; }
|
||
|
||
/// <summary>
|
||
/// 图块名(如果是图块引用)
|
||
/// </summary>
|
||
public string? BlockName { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 五金件实例(单个安装位置)
|
||
/// </summary>
|
||
public class HardwareInstance
|
||
{
|
||
/// <summary>
|
||
/// 安装位置 (mm)
|
||
/// </summary>
|
||
public Position3D Position { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 旋转角度 (弧度)
|
||
/// </summary>
|
||
public Rotation3D Rotation { get; set; } = new();
|
||
|
||
/// <summary>
|
||
/// 缩放比例
|
||
/// </summary>
|
||
public Scale3D? Scale { get; set; }
|
||
|
||
/// <summary>
|
||
/// 源图层名
|
||
/// </summary>
|
||
public string? SourceLayer { get; set; }
|
||
|
||
/// <summary>
|
||
/// 源实体句柄
|
||
/// </summary>
|
||
public string? SourceHandle { get; set; }
|
||
|
||
/// <summary>
|
||
/// 源图块名(如果是图块)
|
||
/// </summary>
|
||
public string? SourceBlockName { get; set; }
|
||
|
||
// ========== v2.0 新增:关联信息 ==========
|
||
|
||
/// <summary>
|
||
/// 最近的孔位 ID(CAD 层面的初步判断)
|
||
/// </summary>
|
||
public string? NearestHoleId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 主绑定板件 ID(优先由孔位/孔组反推)
|
||
/// </summary>
|
||
public string? PrimaryPanelId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 次绑定板件 ID(常见于连接两块板件的五金)
|
||
/// </summary>
|
||
public string? SecondaryPanelId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 主绑定逻辑孔组 ID(如偏心件孔组、合页孔组)
|
||
/// </summary>
|
||
public string? BoundHoleGroupId { get; set; }
|
||
|
||
/// <summary>
|
||
/// 当前五金件绑定到的孔位 ID 列表
|
||
/// </summary>
|
||
public string[]? BoundHoleIds { get; set; }
|
||
|
||
/// <summary>
|
||
/// 绑定模式:
|
||
/// - hole_group:按逻辑孔组绑定
|
||
/// - hole:按单孔绑定
|
||
/// - panel_bbox:按板件包围盒绑定
|
||
/// - panel_center:按板件中心邻近绑定
|
||
/// - none:未绑定
|
||
/// </summary>
|
||
public string? BindingMode { get; set; }
|
||
|
||
/// <summary>
|
||
/// 五金件绑定置信度(0-1)
|
||
/// </summary>
|
||
public double? BindingConfidence { get; set; }
|
||
|
||
/// <summary>
|
||
/// 绑定原因说明(调试/回放)
|
||
/// </summary>
|
||
public string? BindingReason { get; set; }
|
||
|
||
/// <summary>
|
||
/// 附近的板材 ID 列表
|
||
/// </summary>
|
||
public string[]? NearbyPanelIds { get; set; }
|
||
|
||
/// <summary>
|
||
/// 与最近孔位的距离 (mm)
|
||
/// </summary>
|
||
public double? DistanceToNearestHole { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 3D 位置
|
||
/// </summary>
|
||
public class Position3D
|
||
{
|
||
public double X { get; set; }
|
||
public double Y { get; set; }
|
||
public double Z { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 3D 旋转
|
||
/// </summary>
|
||
public class Rotation3D
|
||
{
|
||
public double X { get; set; }
|
||
public double Y { get; set; }
|
||
public double Z { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 3D 缩放
|
||
/// </summary>
|
||
public class Scale3D
|
||
{
|
||
public double X { get; set; } = 1;
|
||
public double Y { get; set; } = 1;
|
||
public double Z { get; set; } = 1;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 图层信息(v2.2 新增)
|
||
/// </summary>
|
||
public class LayerInfo
|
||
{
|
||
/// <summary>
|
||
/// 图层名称
|
||
/// </summary>
|
||
public string Name { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 图层分类:panel(板件)| hardware(五金件)| other(其他)
|
||
/// </summary>
|
||
public string Category { get; set; } = "other";
|
||
|
||
/// <summary>
|
||
/// 推断的五金件类型(如:hinge, screw, connector 等)
|
||
/// </summary>
|
||
public string? HardwareType { get; set; }
|
||
|
||
/// <summary>
|
||
/// 该图层上的实体数量
|
||
/// </summary>
|
||
public int EntityCount { get; set; }
|
||
}
|
||
|
||
/// <summary>
|
||
/// 五金件按图层汇总(v2.2 新增)
|
||
/// </summary>
|
||
public class HardwareLayerSummary
|
||
{
|
||
/// <summary>
|
||
/// 图层名称
|
||
/// </summary>
|
||
public string LayerName { get; set; } = "";
|
||
|
||
/// <summary>
|
||
/// 推断的五金件类型
|
||
/// </summary>
|
||
public string HardwareType { get; set; } = "unknown";
|
||
|
||
/// <summary>
|
||
/// 数量
|
||
/// </summary>
|
||
public int Count { get; set; }
|
||
|
||
/// <summary>
|
||
/// 该类型的所有实例 ID
|
||
/// </summary>
|
||
public List<string> InstanceIds { get; set; } = new();
|
||
}
|