# Ortho source-model mapping ## Confirmed Plant 3D 2026 read path ```text Active Ortho document → OrthoProject.DwgSheetDefinitions → IDwgSheetDef.DwgViewDefs → IDwgViewDef.DwgQuery.ModelFiles[].ModelFileName → PipingProject.GetPnPDrawingFiles() → exact normalized-path match to PnPProjectDrawing → PnPProjectDrawing.Id → DataLinksManager.SelectAcPpRowIds(int dwgid) → GetObjectClassname / GetAllProperties → independent PlantObjectSnapshot → AnnotationPlanBuilder ``` `PlantOrthoViewportReader.ReadViewports` reads the typed DwgQuery contract and creates an Ortho viewport snapshot. `PlantObjectReader.ReadObjects` resolves the resulting model-file reference through the Piping project drawing list and reads DataLinks by project drawing ID. The active Ortho database is not a Piping-row source. All calls are read-only. The adapter opens no write transaction and does not save a drawing, DCF, or project metadata. ## Diagnostics The source reader returns stable telemetry diagnostics rather than suppressing the result of a failed query: `ORTHO_SOURCE_DRAWING_NOT_RESOLVED`, `ORTHO_SOURCE_DRAWING_NOT_IN_PROJECT`, `ORTHO_SOURCE_DRAWING_AMBIGUOUS`, `PIPING_PROJECT_PART_NOT_FOUND`, `SOURCE_DATALINKS_UNAVAILABLE`, `SOURCE_DATALINKS_NO_ROWS`, `SOURCE_DATABASE_READ_FAILED`, `SOURCE_PIPE_ROWS_NOT_FOUND`, or `SOURCE_DATALINKS_READ`. Exact membership of a source object in a particular Ortho viewport is not yet implemented. A source-level DryRun plan must not be presented as proof of viewport membership.