feat: add p-rec-annot Plant connector relationship reader
This commit is contained in:
@@ -82,6 +82,19 @@ public sealed record LineConnectionBoundaryCandidate(
|
|||||||
AnnotationPoint Position,
|
AnnotationPoint Position,
|
||||||
double Rotation);
|
double Rotation);
|
||||||
public sealed record LineConnectionBoundaryPlan(string StableId, string Text, AnnotationPoint Position, double Rotation, IReadOnlyList<string> Reasons);
|
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 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 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);
|
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