# Plant 3D 2026 DwgQuery / ModelFiles API contract ## Scope and method This report is based on metadata-only inspection of the installed Plant 3D 2026 assemblies. The assemblies were read from `` and were not copied into the repository. Metadata-only inspection was necessary because the normal PowerShell host cannot load the product's .NET 8 dependencies safely. Legacy source at the documented local path was not present on this machine, so there is no legacy API claim in this report. ## Confirmed assemblies | Assembly | Version | Relevant type | | --- | --- | --- | | `PnPDwg2dDef` | `0.0.0.0` | `Autodesk.ProcessPower.Drawings2d.DwgQuery`, `IDwgQuery`, `DwgViewDef`, `IDwgViewDef`, `DwgSheetDef`, `IDwgSheetDef` | | `PnPDwg2dUtil` | `0.0.0.0` | `Autodesk.ProcessPower.Drawings2d.ModelFile` | | `PnP3dOrthoProjectPart` | `17.0.60.1` | Ortho project-part integration assembly; the metadata scan found no public DwgQuery declaration there | `PnPDwg2dDef` and `PnPDwg2dUtil` use `0.0.0.0` assembly versions in the installed metadata. The supported runtime contract is therefore identified by the exact public type names below, not by an invented product-version number. ## Confirmed contract ```text Autodesk.ProcessPower.Drawings2d.IDwgViewDef.DwgQuery : Autodesk.ProcessPower.Drawings2d.IDwgQuery Autodesk.ProcessPower.Drawings2d.IDwgQuery.ModelFiles : Autodesk.ProcessPower.Drawings2d.ModelFile[] Autodesk.ProcessPower.Drawings2d.ModelFile.ModelFileName : System.String Autodesk.ProcessPower.Drawings2d.ModelFile.ModelFileGuid : System.String ``` `DwgViewDef` implements `IDwgViewDef`; `DwgQuery` implements `IDwgQuery` and `IDisposable`; `ModelFile` implements `IComparable`. `ModelFiles` is an array, not an untyped enumerable. `ModelFileName` is the only confirmed string field representing the model-file reference. `ModelFileGuid` is a separate identity field. `IsReferencedDwg` and `Xform` describe reference state and transform, not a substitute path. ## Public members relevant to source resolution `IDwgViewDef` exposes `DwgQuery`, `ViewName`, layout/orientation properties, and `SetClippingPlanes`, `SetLayout`, `SetOrientation`, `Erase`, and `New`. `IDwgQuery` exposes `ModelFiles`, `Execute`, and `Erase`. `ModelFile` exposes `ModelFileName`, `ModelFileGuid`, `IsReferencedDwg`, and `Xform`; its constructors accept a file-name string and optional transform, reference flag, and GUID. `IDwgSheetDef.DwgViewDefs` exposes the view-definition collection. Sheet `DwgName`/`DwgPath` identify the Ortho sheet and must not be used as the source of Piping DataLinks. ## Current and legacy usage The original adapter used reflection and tried several possible names (`ModelFileName`, `Value`, and arbitrary string values). That was not a valid Plant 3D 2026 contract. The production read path now uses the confirmed typed chain only: ```text IDwgViewDef.DwgQuery.ModelFiles[].ModelFileName ``` The legacy source path was unavailable locally, so no legacy source-model or DataLinks workaround has been imported. ## Runtime evidence Static metadata cannot prove whether `ModelFileName` is project-relative or absolute in a concrete Ortho fixture, or whether a particular view has zero, one, or multiple model files. In DryRun only, setting `P_REC_ANNOT_DIAGNOSTICS=OrthoStructure` enables a sanitized structure probe. It records type names, collection counts, null state, string length, and a one-way value hash; it does not emit paths or engineering data. On the local DryRun fixture, the runtime probe recorded one view with one `ModelFile`. The concrete types were `DwgViewDef`, `DwgQueryByBox`, and `ModelFile[]`; `ModelFileName` was non-null and an absolute fixture-model reference. The path itself was not retained in repository evidence. The resolver resolves that reference to exactly one `PipingProject.GetPnPDrawingFiles()` entry by normalized full-path equality, then uses the confirmed `DataLinksManager.SelectAcPpRowIds(int dwgid)` overload with the resolved `PnPProjectDrawing.Id`. It does not open or query the active Ortho database for Piping rows. The production resolver has no fallback property-name search. If the exact contract is unavailable at runtime it reports `ORTHO_MODEL_FILES_API_UNSUPPORTED` rather than guessing.