AEC | Architecture - Automating Drawing Package Duplication for Hawkins\Brown

Revit offered no way to duplicate sheets once views were placed on them - a major bottleneck for architects producing drawing packages for planning applications. We engineered a WPF application that bypassed this limitation, allowing the design team to clone entire drawing packages, remap view templates, and enforce the practice's naming conventions in a single automated workflow.

Client
Hawkins\Brown
Timeline
2019 - 2020

The Engineering Challenge

For architecture practices, producing drawing packages for different planning applications means duplicating dozens of sheets and swapping their view templates to show the information each submission requires. At the time, a sheet with views placed on it could not be duplicated in Revit - architects had to create each new sheet by hand, duplicate and re-place every view, and re-assign view templates one at a time. Duplicating a single drawing package this way took from a few hours on small projects to several days - sometimes a week - on the large projects that made up most of the practice's workload, where each package demanded extensive drawing updates. The manual process was error-prone: sheet numbering frequently drifted from the firm's internal drawing standards, which required every new number to increment from the current sheet sequence. On top of that, any solution had to preserve the practice's sheet and view organization: duplicated packages needed to land in the same hierarchy in the Revit Project Browser as their source sheets and views.

The Solution Architecture

The Architectural Core

The plugin is architected as a WPF application (.NET Framework 4.7.2) targeting Revit 2019 through 2023, built on a strict Model-View-ViewModel (MVVM) pattern. The UI layer integrates Material Design to deliver a refined, modern user experience, while the underlying architecture ensures complete separation of concerns: Views contain zero business logic, and Models encapsulate Revit API interactions. A multi-page wizard, driven by WPF's Frame-based navigation, guides users through sheet selection, view configuration, and view template mapping - two pages sharing a single unified ViewModel.

Key Design Patterns
  • Strategy Pattern (Polymorphism): We implemented an IViewDuplicator interface with concrete strategies (ParentView, DependentView, IndependentView) to handle Revit's complex view hierarchies dynamically. The tool detects parent-dependent relationships through the Revit API's GetPrimaryViewId() and GetDependentViewIds() methods and selects the appropriate duplication strategy automatically.
  • Composite Validation: A chainable IInputValidation system allows multiple rules (character checks, uniqueness, nulls) to execute in real time, providing immediate feedback via the Material Design UI.
  • Command Pattern: ICommand implementations bind directly to UI actions, managing the CanExecute state to dynamically control the UI based on validation logic.
Revit API Mastery & Performance
  • O(1) Caching Strategy: A multi-level caching system (SheetCache, ViewCache, TemplateMapperCache) uses nested dictionaries and HashSets to provide O(1) lookups for view names and sheet numbers, keeping real-time validation responsive during operations that process hundreds of views across dozens of sheets.
  • Smart Transaction Management: To minimize expensive Document.Regenerate() calls, we orchestrate creation order—generating all sheets first, regenerating once, then batch-processing view duplication.
  • Edge Case Handling: The solution actively manages "silent failures" in the API, such as empty views that pass validation but fail on placement, or Assembly views that cannot be duplicated as dependents. It also skips title block-hosted revision schedules, which must not be duplicated, and recognizes reusable view types like drafting views that can be placed on multiple sheets without duplication.
  • Parameter Synchronization: A dedicated ParameterSetter utility synchronizes viewport parameters - crop regions, annotation crops, and viewport types - between original and duplicated elements, so duplicates match their sources.
Platforms.
Revit
Core Technology.
C#
.NET
Design System.
WPF
Material Design

The Result

The Sheet Duplicator became the #1 most utilized tool within the practice. By automating documentation setup, it saved countless man-hours per project: architects could clone an entire drawing package - dozens of sheets, hundreds of views - in a single automated pass.

  • Pre-Flight Configuration: Sheets and views are renamed, view templates re-assigned, and numbering set before duplication runs - eliminating the painstaking work of re-templating each view afterwards.
  • Clash Prevention: The tool warns the user whenever a duplication would produce clashing sheet or view names.
  • Standards Enforcement: Sheet numbering and naming follow the practice's internal drawing conventions, incrementing from the current sheet number - every sheet the tool creates lands on-standard.
  • Hierarchy Preservation: Duplicated sheets and views retain the same sheet and view hierarchy in the Revit Project Browser as the source package.
#1
Most utilized internal tool across the practice
Zero
Views re-templated by hand after duplication
100%
Sheet and view hierarchy preserved on duplication

Need this level of efficiency?

Book a discovery call

We'll start with a short, no-obligation discovery call.