Visualization is currently a Revit-host feature. It renders transient geometry through Revit DirectContext3D when Revit geometry objects are written through the logging path (Trace.Write). Visualization does not own picks.
Last updated: 2026-09-18
| Area | Path |
|---|---|
| Revit geometry listener | source/RevitDevTool/Logging/Listeners/GeometryListener.cs |
| Server base/contracts | source/RevitDevTool/Visualization/Contracts/ |
| Concrete servers | source/RevitDevTool/Visualization/Server/ |
| Render helpers | source/RevitDevTool/Visualization/Helpers/ |
| Render buffer cache | source/RevitDevTool/Visualization/Render/RenderingBufferStorage.cs |
| Settings view models | source/RevitDevTool/ViewModel/Settings/Visualization/ |
| Settings views | source/RevitDevTool/View/Settings/Visualization/ |
flowchart TB
Script["Script / command\nTrace.Write(geometry)"]
Listener["GeometryListener\nRevit host"]
Router["Type routing"]
Servers["Visualization servers\nCurve, Face, Solid, Mesh, XYZ, BoundingBox"]
Buffer["RenderingBufferStorage"]
DC3D["Revit DirectContext3D"]
Text["Normal text logging"]
Script --> Listener
Listener -->|"Revit geometry"| Router
Listener -->|"not geometry"| Text
Router --> Servers
Servers --> Buffer
Servers --> DC3D
Geometry visualization is coupled to Revit API types and DirectContext3D. Other hosts should add their own visualization adapters rather than reuse this implementation directly.
| Server | Geometry |
|---|---|
PolylineVisualizationServer |
Revit Curve / tessellated polyline |
FaceVisualizationServer |
Revit Face |
SolidVisualizationServer |
Revit Solid |
MeshVisualizationServer |
Revit Mesh |
XyzVisualizationServer |
Revit XYZ |
BoundingBoxVisualizationServer |
Revit BoundingBoxXYZ |
PlaneVisualizationServer |
Revit plane-like data |
Servers are registered as concrete singletons in Revit host DI. Keep new Revit geometry types aligned with this pattern.
sequenceDiagram
participant Revit as Revit View
participant Server as VisualizationServer
participant Buffer as RenderingBufferStorage
participant Helper as RenderHelper
participant DC3D as DirectContext3D
Revit->>Server: Draw frame
Server->>Buffer: Query cached tessellation
alt Cache miss
Server->>Server: Tessellate geometry
Server->>Buffer: Store render data
end
Server->>Helper: Build draw primitives
Helper->>DC3D: Issue draw calls
RenderingBufferStorage avoids repeated tessellation where possible. Servers are responsible for lifecycle and frame rendering.
Visualization settings are Revit-host settings. View models live under source/RevitDevTool/ViewModel/Settings/Visualization/ and are wired by RevitHostingExtensions.AddApplicationServices().
- Do not move Revit API geometry types into shared
DevTools.LoggingorDevTools.Presentation. - Keep host-neutral logging behavior intact for non-geometry trace output.
- Add new Revit geometry rendering as a dedicated server plus settings if needed.
- For non-Revit hosts, create host-specific visualization adapters.
docs/architecture/Logging/README.mddocs/agents/host-boundaries.mddocs/architecture/Execution/README.md