diff --git a/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Core/ProductionSettingsContract.cs b/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Core/ProductionSettingsContract.cs index 4ff2c39..1e5d8b6 100644 --- a/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Core/ProductionSettingsContract.cs +++ b/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Core/ProductionSettingsContract.cs @@ -18,7 +18,8 @@ public sealed record ProductionSettingsContract( string SetLayer, double? FixedSupportPlusLength, string? ScriptFolder, - LineNumberMarkerSettings? LineNumberMarker) + LineNumberMarkerSettings? LineNumberMarker, + SupportTopViewSettings? SupportTopView) { public static ProductionSettingsContract Parse(string xml) { @@ -45,6 +46,16 @@ public sealed record ProductionSettingsContract( TryParseLegacyNumber(marker.Attribute("maskscalefactor")?.Value, out var mask) ? mask : null, ParseLine(marker.Element("Line")), ParseText(marker.Element("Text"))); + var supports = root.Element("SupportsInTopView"); + SupportTopViewSettings? parsedSupports = supports is null ? null : new( + supports.Attribute("undefinedsize")?.Value, + supports.Elements("Support").Select(value => new SupportRule( + Required(value, "scriptname"), + TryParseLegacyNumber(value.Attribute("nominaldiameter")?.Value, out var diameter) ? diameter : null, + value.Attribute("nominalumit")?.Value, + int.TryParse(value.Attribute("lastdigit")?.Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var lastDigit) ? lastDigit : null, + TryParseLegacyNumber(value.Attribute("scale")?.Value, out var scale) ? scale : null, + value.Attribute("selectionvalue")?.Value)).ToArray()); return new( copy, layers, @@ -59,7 +70,8 @@ public sealed record ProductionSettingsContract( setLayer, parsedPlusLength, root.Element("ScriptFolder")?.Attribute("path")?.Value, - parsedMarker); + parsedMarker, + parsedSupports); } private static LineGeometrySettings? ParseLine(XElement? value) => value is null ? null : new( @@ -92,3 +104,5 @@ public sealed record LayerSetupRule(string FilterType, string FilterValue, int? public sealed record LineNumberMarkerSettings(string Layer, double? MaskScaleFactor, LineGeometrySettings? Line, TextAnnotationSettings? Text); public sealed record LineGeometrySettings(double? StartX, double? StartY, double? EndX, double? EndY, string? Layer); public sealed record TextAnnotationSettings(string? Layer, string? TextStyle, double? Size, string? TextValue, double? PositionX, double? PositionY); +public sealed record SupportTopViewSettings(string? UndefinedSize, IReadOnlyList Rules); +public sealed record SupportRule(string ScriptName, double? NominalDiameter, string? NominalUnit, int? LastDigit, double? Scale, string? SelectionValue); diff --git a/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/ProductionSettingsContractTests.cs b/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/ProductionSettingsContractTests.cs index b376682..4c002c4 100644 --- a/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/ProductionSettingsContractTests.cs +++ b/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/ProductionSettingsContractTests.cs @@ -54,4 +54,16 @@ public sealed class ProductionSettingsContractTests Assert.Equal(-1.0607, result.LineNumberMarker.Line!.StartX); Assert.Equal(2.5, result.LineNumberMarker.Text!.Size); } + + [Fact] + public void ParsesLegacySupportTopViewRules() + { + const string xml = "
"; + var result = ProductionSettingsContract.Parse(xml); + Assert.NotNull(result.SupportTopView); + var rule = Assert.Single(result.SupportTopView!.Rules); + Assert.Equal(50.0, rule.NominalDiameter); + Assert.Equal(0.04, rule.Scale); + Assert.Equal("DN50", rule.SelectionValue); + } }