feat: model legacy support annotation settings
This commit is contained in:
@@ -18,7 +18,8 @@ public sealed record ProductionSettingsContract(
|
|||||||
string SetLayer,
|
string SetLayer,
|
||||||
double? FixedSupportPlusLength,
|
double? FixedSupportPlusLength,
|
||||||
string? ScriptFolder,
|
string? ScriptFolder,
|
||||||
LineNumberMarkerSettings? LineNumberMarker)
|
LineNumberMarkerSettings? LineNumberMarker,
|
||||||
|
SupportTopViewSettings? SupportTopView)
|
||||||
{
|
{
|
||||||
public static ProductionSettingsContract Parse(string xml)
|
public static ProductionSettingsContract Parse(string xml)
|
||||||
{
|
{
|
||||||
@@ -45,6 +46,16 @@ public sealed record ProductionSettingsContract(
|
|||||||
TryParseLegacyNumber(marker.Attribute("maskscalefactor")?.Value, out var mask) ? mask : null,
|
TryParseLegacyNumber(marker.Attribute("maskscalefactor")?.Value, out var mask) ? mask : null,
|
||||||
ParseLine(marker.Element("Line")),
|
ParseLine(marker.Element("Line")),
|
||||||
ParseText(marker.Element("Text")));
|
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(
|
return new(
|
||||||
copy,
|
copy,
|
||||||
layers,
|
layers,
|
||||||
@@ -59,7 +70,8 @@ public sealed record ProductionSettingsContract(
|
|||||||
setLayer,
|
setLayer,
|
||||||
parsedPlusLength,
|
parsedPlusLength,
|
||||||
root.Element("ScriptFolder")?.Attribute("path")?.Value,
|
root.Element("ScriptFolder")?.Attribute("path")?.Value,
|
||||||
parsedMarker);
|
parsedMarker,
|
||||||
|
parsedSupports);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static LineGeometrySettings? ParseLine(XElement? value) => value is null ? null : new(
|
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 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 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 TextAnnotationSettings(string? Layer, string? TextStyle, double? Size, string? TextValue, double? PositionX, double? PositionY);
|
||||||
|
public sealed record SupportTopViewSettings(string? UndefinedSize, IReadOnlyList<SupportRule> Rules);
|
||||||
|
public sealed record SupportRule(string ScriptName, double? NominalDiameter, string? NominalUnit, int? LastDigit, double? Scale, string? SelectionValue);
|
||||||
|
|||||||
@@ -54,4 +54,16 @@ public sealed class ProductionSettingsContractTests
|
|||||||
Assert.Equal(-1.0607, result.LineNumberMarker.Line!.StartX);
|
Assert.Equal(-1.0607, result.LineNumberMarker.Line!.StartX);
|
||||||
Assert.Equal(2.5, result.LineNumberMarker.Text!.Size);
|
Assert.Equal(2.5, result.LineNumberMarker.Text!.Size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ParsesLegacySupportTopViewRules()
|
||||||
|
{
|
||||||
|
const string xml = "<Main><CopyMissingObjects/><LayersSetup/><Annotations layer='TEXT' textstyle='GOSTC' multileaderstyle='PXP'/><LinenumberConnections polylinelayer='AXIS' textlayer='TEXT' textstyle='GOSTC'/><Elevations layer='THIN' textstyle='GOSTC'/><SupportsInTopView undefinedsize='UNKNOWN'><Support scriptname='CS_SUP' nominaldiameter='50,0' nominalumit='mm' lastdigit='1' scale='0,04' selectionvalue='DN50'/></SupportsInTopView><SetLayer name='AXIS'/></Main>";
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user