From 07ab3c436f2199531a82efd4f46f3365046dd862 Mon Sep 17 00:00:00 2001 From: codex Date: Tue, 4 Aug 2026 14:43:59 +0300 Subject: [PATCH] fix: open source database for Ortho placement --- .../P_Rec_Annot/src/PRecAnnot.Plant3D2026/PlantReadPath.cs | 4 +++- .../tests/PRecAnnot.Core.Tests/PxpOaRegistrationTests.cs | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Plant3D2026/PlantReadPath.cs b/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Plant3D2026/PlantReadPath.cs index 346d822..b140aad 100644 --- a/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Plant3D2026/PlantReadPath.cs +++ b/Plant3D2026/P_Rec_Annot/src/PRecAnnot.Plant3D2026/PlantReadPath.cs @@ -483,7 +483,9 @@ internal sealed class PlantViewportMembershipReader try { var openedByQuery = false; - var sourceDatabase = sourceId.GetDatabase(false, ref openedByQuery); + // The source model is normally not an active document in an Ortho /b session. + // Ask MdObjectId to open its source database read-only and dispose it below when it did. + var sourceDatabase = sourceId.GetDatabase(true, ref openedByQuery); try { stage = "StartTransaction"; diff --git a/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/PxpOaRegistrationTests.cs b/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/PxpOaRegistrationTests.cs index d1cb61a..82f101d 100644 --- a/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/PxpOaRegistrationTests.cs +++ b/Plant3D2026/P_Rec_Annot/tests/PRecAnnot.Core.Tests/PxpOaRegistrationTests.cs @@ -37,4 +37,5 @@ public sealed class PxpOaRegistrationTests [Fact] public void ScriptDrivenPxpOa_UsesPreparedFixtureContextBeforeImplicitLookup() => Assert.Contains("TryGetPreparedContext(document, out var scriptContext)", Entry); [Fact] public void ScriptDrivenPrepare_SelectsCanonicalTargetAndRetainsReadOnlyContext() { Assert.Contains("preparedContext = context", Observer); Assert.Contains("selectedTargetSnapshotId = candidates[0]", Observer); } [Fact] public void PlacementReadFailure_IsDiagnosedInsteadOfBeingSilentlyDiscarded() { var source = File.ReadAllText(Path.Combine(ProjectRoot, "PlantReadPath.cs")); Assert.Contains("OrthoPipePlacementReadFailed", source); Assert.Contains("ORTHO_PIPE_PLACEMENT_UNAVAILABLE", source); } + [Fact] public void PlacementReader_OpensSourceDatabaseWhenItIsNotActive() { var source = File.ReadAllText(Path.Combine(ProjectRoot, "PlantReadPath.cs")); Assert.Contains("sourceId.GetDatabase(true, ref openedByQuery)", source); } }