feat: add p-rec-annot Plant connector relationship reader
This commit is contained in:
@@ -82,6 +82,19 @@ public sealed record LineConnectionBoundaryCandidate(
|
||||
AnnotationPoint Position,
|
||||
double Rotation);
|
||||
public sealed record LineConnectionBoundaryPlan(string StableId, string Text, AnnotationPoint Position, double Rotation, IReadOnlyList<string> Reasons);
|
||||
public sealed record PlantConnectorRelationshipSnapshot(
|
||||
string StableId,
|
||||
long ConnectorRowId,
|
||||
long FirstPartRowId,
|
||||
long SecondPartRowId,
|
||||
long FirstLineGroupRowId,
|
||||
long SecondLineGroupRowId,
|
||||
IReadOnlyList<string> Diagnostics);
|
||||
public sealed record PlantConnectorRelationshipReadResult(bool Success, IReadOnlyList<PlantConnectorRelationshipSnapshot> Connectors, string? FailureCode = null);
|
||||
public interface IPlantConnectorRelationshipReader
|
||||
{
|
||||
PlantConnectorRelationshipReadResult Read();
|
||||
}
|
||||
public sealed record LineNumberOwnedRow(string SourceStableId, int MarkerNumber, string Text, AnnotationPoint MarkerAttributePosition);
|
||||
public sealed record LineNumberRowMutation(string SourceStableId, int PreviousMarkerNumber, int MarkerNumber, string Text, AnnotationPoint? MarkerAttributePosition);
|
||||
public sealed record LineNumberTextAsset(string Layer, string TextStyle, double Size, string TextValue, Point2Dto Position);
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
using Autodesk.ProcessPower.DataLinks;
|
||||
using PRecAnnot.Abstractions;
|
||||
|
||||
namespace PRecAnnot.Plant3D2026;
|
||||
|
||||
// Reads the two P3dPartConnection edges and their line-group relationships.
|
||||
// This is the Plant 2026 equivalent of the legacy PXP-ALC connector discovery
|
||||
// pass; it deliberately returns row identities only, never PnP/AutoCAD
|
||||
// objects, so Core remains Autodesk-free.
|
||||
internal sealed class PlantConnectorRelationshipReader(DataLinksManager dataLinks) : IPlantConnectorRelationshipReader
|
||||
{
|
||||
public PlantConnectorRelationshipReadResult Read()
|
||||
{
|
||||
try
|
||||
{
|
||||
var database = dataLinks.GetPnPDatabase();
|
||||
var rows = database.Tables["PnPDataLinks"].Select("RowClassName='P3dConnector'")
|
||||
.OrderBy(row => Convert.ToInt64(row["RowId"]))
|
||||
.ToArray();
|
||||
var result = new List<PlantConnectorRelationshipSnapshot>();
|
||||
foreach (var row in rows)
|
||||
{
|
||||
var connector = Convert.ToInt64(row["RowId"]);
|
||||
var first = dataLinks.GetRelatedRowIds("P3dPartConnection", "Part1", (int)connector, "Part2");
|
||||
var second = dataLinks.GetRelatedRowIds("P3dPartConnection", "Part2", (int)connector, "Part1");
|
||||
if (first.Count != 1 || second.Count != 1) continue;
|
||||
var firstPart = first.First();
|
||||
var secondPart = second.First();
|
||||
var firstGroups = dataLinks.GetRelatedRowIds("P3dLineGroupPartRelationship", "Part", firstPart, "LineGroup");
|
||||
var secondGroups = dataLinks.GetRelatedRowIds("P3dLineGroupPartRelationship", "Part", secondPart, "LineGroup");
|
||||
if (firstGroups.Count != 1 || secondGroups.Count != 1) continue;
|
||||
result.Add(new($"pnp-connector:{connector}", connector, firstPart, secondPart, firstGroups.First(), secondGroups.First(), Array.Empty<string>()));
|
||||
}
|
||||
return new(true, result.OrderBy(value => value.StableId, StringComparer.Ordinal).ToArray());
|
||||
}
|
||||
catch (DLException) { return new(false, Array.Empty<PlantConnectorRelationshipSnapshot>(), "CONNECTOR_DATALINKS_READ_FAILED"); }
|
||||
catch (Exception) { return new(false, Array.Empty<PlantConnectorRelationshipSnapshot>(), "CONNECTOR_RELATIONSHIP_READ_FAILED"); }
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
using PRecAnnot.Abstractions;
|
||||
|
||||
namespace PRecAnnot.Core.Tests;
|
||||
|
||||
public sealed class PlantConnectorRelationshipContractTests
|
||||
{
|
||||
[Fact]
|
||||
public void Snapshot_SeparatesConnectorPartsAndLineGroups()
|
||||
{
|
||||
var value = new PlantConnectorRelationshipSnapshot("pnp-connector:7", 7, 10, 11, 21, 22, []);
|
||||
Assert.NotEqual(value.FirstPartRowId, value.SecondPartRowId);
|
||||
Assert.NotEqual(value.FirstLineGroupRowId, value.SecondLineGroupRowId);
|
||||
Assert.Equal("pnp-connector:7", value.StableId);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user