- Jeremy Tammik
- Contact, Questions and Support
- Getting Started
- Reproducible Test Case
- License
- Disclaimer
- Topic groups
Jeremy Tammik
Jeremy is The Building Coder and The 3D Web Coder. He is a prolific author and passionate about cooperation and sharing, working with the Forge Partner Development team on Autodesk APIs and web services, providing developer support, training, conferences, presentations, and blogging on the Revit API and cloud and mobile technologies.
Jeremy joined Autodesk in 1988 as the European technology evangelist driving AutoCAD application development in Europe, the United States, Australia, and Africa. He co-founded ADGE, the AutoCAD Developer Group Europe. He left Autodesk in 1994 to work as an independent HVAC application developer and rejoined the company in 2005.
Jeremy graduated with degrees in mathematics and physics at Marburg University in Germany, worked as a teacher and translator of both computer and human languages and as a C++ programmer on early GUI and multitasking projects. He is fluent in six European languages, vegetarian, has four kids, two grandchildren, loves cooking, climbing, hiking, sports, nature, literature, music, dancing, adventure, survival, problem solving and challenges of all kinds.
Here are a totally incomplete and out-of-date CV and snapshot of what I did in 2013.
Contact, Questions and Support
Jeremy can be contacted by email and @jeremytammik, but please don't expect him to provide support.
If you have questions on Autodesk product usage, customisation or programming, please visit the appropriate Autodesk community discussion forum.
For Revit API questions, you can go straight to the dedicated
Revit API discussion forum.
If you prefer, you can also use the
revit-api
tag on Stack Overflow.
I always prefer to discuss everything I do in public and enable the entire community to contribute and share when possible.
Therefore, please avoid misusing any of the personal channels listed below for Revit API related questions:
- about.me
- Flickr
- Flickr2
- GitHub
- Google Plus
- PayPal
- StackOverflow
- Vimeo
- YouTube
Getting Started
Here are some suggestions on getting started with the Revit API:
First of all, before getting started, learn the Revit product from an end user point of view. Understand the optimal workflow and best practices. If you do not, the API will be hard to understand and not make much sense.
It is also useful to learn the basic of programming in general, and of the language you choose for addressing the Revit .NAT API specifically.
A good understanding of event-driven programming is very helpful, since the Revit API is entirely event driven.
Once you have that under the hood, determine an optimal end user workflow for the task that you intend to address with your add-in.
Any step that cannot be solved through the user interface can almost certainly not be automated either.
After that, it is time to start exploring the programming environment.
The Revit SDK or Software Development Kit includes API documentation and samples. You can download it from the Autodesk Revit Developer Center.
The most important piece of documentation is the Revit API help file RevitAPI.chm listing all classes, properties and methods. That information is also available online at www.revitapidocs.com.
Another very important piece of documentation is the Revit API Developers Guide included in the Revit product help.
The most effective way to get started learning and programming with the Revit API, including installation and use of the SDK, is to work through the step-by-step instructions provided by the DevTV and My First Revit Plugin video tutorials.
Next, you can dive in deeper still by working through the self-documenting ADN Revit API Training Labs. They consist of a series of hands-on lab exercises in both C# and VB.NET accompanied by detailed step-by-step training instruction documents.
If you are in a hurry and want to skip everything else, you can just check out the hello world walkthroughs in the developer guide.
The section on Add-In Integration presents detailed information on all you need to know about installing an add-in.
Here is an overview of the the rich collection of getting started material currently available:
- The Revit Developer Center
- Definitely your first port of call
- Work through the DevTV and My First Revit Plugin tutorials
- Download the Revit SDK including documentation and samples
- Install the Revit API help file
RevitAPI.chm
as a desktop shortcut and keep at hand at all times, or refer to the online Revit API documentation at www.revitapidocs.com - Install the SDK samples solution
SDKSamples.sln
for global source code searches - Install the
RvtSamples
external application to launch and debug the SDK samples - For more in-depth training, work through the ADN Revit API Training Labs, also included in The Building Coder AdnRevitApiLabsXtra
- The Revit API Developer Guide
- Go to the Revit 2024 Online Help (2023, 2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015) > Revit Developers Guide
- The Revit SDK provides the basic Revit API help file documentation in
RevitAPI.chm
, also available online at www.revitapidocs.com - The Revit API Developer Guide provides in-depth explanations
- The My First Revit Plug-in tutorial
- The archi+lab explanation how to create your own tab and buttons in Revit
- The DevTV Introduction to the Revit 2015 API
- The Visual Studio Revit add-in wizards
- Getting started
- Before getting started
- Revit API basic books and tutorials, starter kit and programming for beginners
- How to research to find a Revit API solution
- Intimate Revit database exploration with the Python Shell
- Getting started with the Revit API (late 2013)
- Getting started with the Revit 2013 API
- Getting started with the Revit 2012 API
- Preparing for a hands-on Revit API training
- Chinese Book on the Revit API
Reproducible Test Case
The best and clearest way to describe an API problem is normally by providing a non-confidential reproducible test case including a minimal sample macro embedded in a minimal project file to run it in and detailed step-by-step instructions specifying exactly what you are trying to achieve, the behaviour you observe, the difference between the two and how to reproduce the issue to analyse it in the debugger:
- A short exact description of what you are trying to achieve.
- The behaviour you observe versus what you expect, and why this is a problem.
- A complete yet minimal Revit sample model to run a test in.
- A complete yet minimal macro embedded in the sample model or Visual Studio solution with add-in manifest that can be compiled, loaded, run and debugged with a single click to analyse its behaviour live in the sample model.
- Detailed step-by-step instructions for reproducing the issue, e.g. which element to pick, what command to launch etc.
The purpose of this is both to enable us to reproduce and analyse the problem and to verify that it really has been resolved.
Another even more beneficial aspect for all involved is that creating a minimal reproducible case like this can help you discover for yourself what you were doing wrong, and the issue becomes moot.
P.S. Here is an additional clarification on the importance of a minimal reproducible case directly from the development team for a specific case: With the new info it does indeed look as if we need to explore this issue in more depth. However, I doubt it is on the managed side. Unfortunately, even if it does not look like it, we really need a sample to reproduce. Unless the problem occurs every time no matter what geometry is and what happens to the element the face was taken from, it is practically impossible for us to test it (I mean, in a reasonable time). We do not necessarily need your code – I can write the code myself – but we need a workflow to reproduce, and the workflow needs to be quite detailed; like – create this wall, of this type and this position and length, at this level; put this specific window there at this exact location; etc. Let me put it this way: if I receive a case from our QA team and the description does not specify each click exactly to get to the point of failure, no matter how trivial the commands are, I cannot take the case and return it to the reporter. Naturally I always try my best to deduce the actual scenario, but I can only do so much. So, please, if you can give us something very detailed and specific it will benefit both of us. Thank you.
P.P.S. If your add-in is too large or complex: I would love to dive in and try to help you debug this, but I am sorry to say I do not have the time. You will have to continue exploring it yourself. All I can suggest is to keep at it. One approach to debugging a problem like this is: (i) Simplify it down to something absolutely trivial and stupid that is guaranteed to work – dumb it down. (ii) Once that is working, add the required complications one by one until it either works completely or fails. Once you have determined the exact point of failure, you can narrow that down further and create a minimal reproducible case: With the minimal reproducible case in hand, I can either take a look myself of pass it on to the Revit development team for further analysis.
P.P.P.S. In order to simplify installation and debugging for the development team, the preferred method to submit your sample code snippet is to include it as a macro embedded in a minimal RVT document.
License
Copyright (c) 2008-2023 Jeremy Tammik
All material provided by The Building Coder is licensed under the terms of the MIT License:
Permission is hereby granted, free of charge, to any person obtaining a copy of the software published on this blog and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Disclaimer
Please note I provide no guarantee whatsoever that anything published on this blog is useful or even legal. Some of the projects discussed here make use of experimental or risky workarounds not covered by the officially supported usage recommended by Autodesk. They are by no means production-level solutions and should not be used as is for production use. Some code presented here is just a test showing some aspects of possible uses of the Revit API and other programming functionality. Nothing published here is guaranteed to work under any conditions whatsoever. Some explorations making use of undocumented aspects may not even be legal. If you make any use of anything here, you are doing so at your own risk. You are responsible for yourself and all the software you create.
Topic Groups
Here is a random collection of pointers to blog posts on specific topics that came up in recent developer queries:
5.1. Custom Exporter
- Graphics Pipeline Custom Exporter
- Texture Bitmap and UV Coordinates
- ADN Mesh Data Custom Exporter to JSON
- Determining Absolutely All Visible and Hidden Elements
- Access to Individual Elements in Linked Projects
- RvtVa3c – Revit Va3c Generic AEC Viewer JSON Export
- RvtVa3c Assembly Resolver
- TessellateSolidOrShell – Holes Versus Wholes
- Custom Exporter GetCameraInfo
- Revit Export Precision and Tolerance
- Using a Custom Exporter for 2D
- Controlling the Quality of the Geometry on Custom Export
5.2. 2D Booleans and Adjacent Areas
- Room and Wall Adjacency
- Room and Wall Adjacent Area
- Boolean Operations for 2D Polygons
- Space Adjacency
- GetPolygon Extension Methods
- Space Adjacency for Heat Load Calculation
- Boolean Operations for 2D Polygons
- Creating Topography Contours and Building Masses
- Fire Rating Zone Intersection
- 2D Boolean Interactive Real-Time Sketch Viewer
- Extrusion Analyser and 2D Boolean Element Outline
5.3. PostCommand
- Replacing Built-In Commands and Obtaining Their Ids
- What's New in the Revit 2014 API
- Wishlist Survey Reminder and New SDK Sample Overview
- Revit 2014 OBJ Exporter and New SDK Samples
- Revit 2014 Update Release 1
- Programmatic launching of custom add-in commands
- PostCommand Limitations, Rules and Exceptions
- Purge and PostCommand
- Using PostCommand with the Windows Automation API
- Using PostCommand to Close Document
5.4. Dockable Panels
- What's New in the Revit 2014 API
- A Simpler Dockable Panel Sample
- RevitRubyShell for Revit 2014
- Revit 2014 Update Release 1
- Open MEP Connector Warning
- Command Launching from Dockable Panel
- Revit 2014 Update Release 2
- A Dockable Web Browser
5.5. Material Management and Libraries
Please also note the related topic group 5.42 on Texture Bitmap and UV Coordinate Access.
- Add New Materials from List
- Material Assets and FBX
- Retrieving Materials
- Materials Collection and Filtering
- Pipe Insulation and Insulation Material
- Read Material Asset Parameter
- Accessing and Filtering by Ramp Material
- Using the Copy and Paste API to manage materials in adsklib or template files
- Adding New Materials from List Updated
- Adding New Materials from List Enhancements
- Getting Serious Adding New Materials from List
- Modifying Material Visual Appearance
- archi+lab few more comments about materials in Revit, Dynamo, APIs etc.
- Create New Material with Texture
5.6. Phase
- Create Room on Level in Phase
- Filter for View and Phase
- Phase Dependent Room Properties
- Family Instance Room Phase
5.7. Preview Control
- Preview control
- DevCamp session on the Revit 2013 UI API enhancements
- PreviewControlSimple
- UIAPI Revit SDK sample
- Preview control with linked document
- Using a preview control in a macro
- Zooming in a preview control
5.8. RstLink
- Utilizing Revit API Resources
- Back Again
- Revit Structure Resources
- Retrieve Structural Elements
- The Revit 2013 Structure API
5.9. Retrieving Elements Using FilteredElementCollector
In addition to the discussions and samples below, a large number of additional real-world filtering examples is provided by The Building Coder samples in the module CmdCollectorPerformance.cs.
- Do Not Filter For All Elements!
- Retrieving MEP Elements and Connectors
- Retrieving Structural Elements
- Filtered Element Collectors
- More Kevin Filtering Benchmarks
- Filtered Element Collector Sample Overview
- Exporting Parameter Data to Excel, and Re-importing
- Selecting Model Elements or Visible 3D Elements:
- Valid category and non-empty geometry
- Ditto, and eliminate certain categories
- Valid category and neither category nor element is hidden
- Based on the Category.HasMaterialQuantities property
- Based on the elements visible in a default 3D view
- Using a custom exporter
- Selecting all physical elements in model
- Using
ElementParameterFilter
to find possibleElementId
values for a specificParameter
- Efficiently retrieve crop box for given view
5.10. Filter for Family Symbols
- XML Family Usage Report
- Find Intersecting Elements
- More Kevin Filtering Benchmarks
- Filtered Element Collector Sample Overview
- Timer Code for Benchmarking
- Family Usage Filtered Element Collector Performance
5.11. Model Review
- Model Review
- Product Support Subscription Videos
- Model Review for Standards Compliance
- Subscription Packs
- Google for Revit Model Review
5.12. Wall Layers
Please refer to 5.17 – Wall Layers and Compound Structure.
5.13. GitHub
- The Building Coder samples repository
- Creating a repository on windows
- Defining a license
- Creating a release
- Summary and Mac command line usage
5.14. Moving a Cable Tray
- Cable tray placement, orientation and fittings
- Modifying cable tray shape
- Moving a duct or cable tray join
5.15. Room Boundaries
- Migrating the Building Coder Samples to Revit 2012
- Accessing Room Data
- Graphically Display Area Boundary Loops
- Room in Area Predicate via Point in Polygon Test
- What's New in the Revit 2012 API
- What's New in the Revit 2013 API
- Revit 2014 API and Room Plan View Boundary Loops
- Room Neighbours
5.16. Unit Testing
- Unit Testing in Revit
- Revit Add-in Unit Testing
- The Dynamo Revit Unit Test Framework
- StackOverflow discussions on Revit API Code Unit Testing and BDD/TDD with Revit API
- Revit Unit Test Framework Improvements
- TestRunner – Run Unit Tests in Revit
- AU Class – Automate your Revit Add-In Testing with Unit Testing
- Unit Test Your Revit Add-In
- speckle xUnitRevit: a test runner for Revit
5.17. Wall Layer Compound Structure
- Wall Compound Layers
- Compound Wall Layer Volumes
- Retrieving Detailed Wall Layer Geometry
- Interior Side of a Wall
- Identifying Wall Compound Layers and Parts
- Updating the Wall Compound Layer Structure
- Setting the Compound Structure Core and Shell Layers
- Creating an Offset Wall
5.18. Room Properties
- Phase Dependent Room Properties
- Unreliable Room Properties
- Family Instance Room Phase
- Filter for Family Instances in a Room
5.19. Pick Point
- What's New in the Revit 2011 API
- Creating and Inserting an Extrusion Family
- Point Cloud Snap and Freeze
- Pick a Point in 3D
- Placing a Duct
- Picking Two Points Consecutively
5.20. Visual Studio Revit Add-In Wizards
The Visual Studio Revit add-in wizards provide Visual Studio templates for generating C# and VB .NET Revit add-ins. They enable the instantaneous and automatic generation, installation and debugging of a new Revit add-in skeleton with one single click.
You can always get the most up-to-date version from the Visual Studio Revit Add-In Wizard GitHub repository.
- Add-In Wizards for Revit 2014
- Wizard Update
- Multi-Version Visual Studio Revit Add-In Wizard
- Add-In Wizards for Revit 2015
- Add-in Wizards for Revit 2016
- Updated Visual Studio Add-in Wizards for Revit 2016
- Revit Add-In Wizards on GitHub and Installer
- Visual Studio 2015 Revit 2017 Add-in Wizards
- Update to suppress the architecture mismatch warning
- Revit 2018 Visual Studio .NET Add-in Wizards
- User Profile for Visual Studio Revit Add-In Wizard Installation
- Revit 2018.1 API NuGet Packages
- Multi-Version Revit Add-In Template
- Revit 2019 Visual Studio .NET Add-in Wizards
- Revit 2020 C# and VB Visual Studio Add-in Wizards
- Built-In Zip Utility for Add-In Wizard
- VS Wizard Template Location
- Add-In Wizard Template in VS 2022
5.21. RoomEditorApp – Room Editor Revit Add-In
Please also refer to 5.35 – Autodesk Technical Summit 2014 – a generic cloud-based round-trip real-time 2D Revit BIM editor.
- External application to present the user interface
- Determine boundary loops for rooms
- Determine boundary loops for equipment and furniture family instances
- Transform Revit graphics to SVG path descriptions
- Temporary graphical display of the boundary loops for debugging purposes
- Represent the database model
- Interacting with the cloud database
- Utilities for unit conversion, formatting, messages, folder browser, etc.
5.22. Advanced Revit 2014 API Features and Samples
- Revit 2014 main product features
- Revit 2014 Update Release 1
- Revit 2014 Update Release 2
- Revit 2014 API highlights, DevDays presentation, recording and sample code
- What's New – a detailed overview of all enhancements
- List of Revit 2014 SDK samples
- Structural Analysis SDK, code checking and results builder
- DisplacementElementAnimation
- A Simpler Dockable Panel Sample, RevitRubyShell for Revit 2014 and other dockable panel topics
- Copy and paste API usage examples
- FreeFormElement and saving a solid to SAT
- PostCommand topics and launching custom add-in commands
- The Unit API, unit abbreviations and mapping display unit types to unit types
- User MEP Calculation Sample
- Custom exporter and related topics
5.23. Extensible Storage
- Extensible Storage
- Extensible Storage of a Map
- Extensible Storage Features
- Project Wide Data Storage
- DataStorage Element
- Multi-Version Add-in
- Extensible Storage Data Use in Schedules
- Effortless Extensible Storage
- Deleting and Updating Extensible Storage Schema
- Erasing Extensible Storage with Linked Files
- Accessing Extensible Storage on OwnerFamily in Project
- Add-ins in a Worksharing Environment
- Extensible Storage in a Worksharing Environment
- Named Guid Storage for Project Identification
- Storing a dictionary – use
DataStorage
, notProjectInfo
- Extensible storage – versioning best practices
- EstoreFile GitHub repository
- Extensible Storage at Autodesk University 2011:
- Class
- CP4451_tammik_estorage.pdf – handout document
- CP4451_tammik_estorage.zip – sample source code
- Lab
- CP6760-L_tammik_estorage.pdf – handout document
- CP6760-L_tammik_estorage_lab.zip – exercises
5.24. Control Element Colour and Material
- Model and Detail Curve Colour
- Change Element Colour
- Determine the Colour of an Element
- View Filter API
- Control DirectShape Colour and Material
- Assign different colour and material to each DirectShape face
5.25. Family API, Loading and Placing Family Instances
Families can be programmatically created, loaded and placed.
The Family API to create them is active in the RFA family context.
Family loading and instance placement works in both RVT projects and RFA family definitions.
5.25.1. Family API for Creating Family Definitions
- The Revit Family API
- Key Concepts of the Family Editor
- In-memory family creation, loading, and instance placement – a structural stiffener extrusion family
- Creating an Electrical Family
5.25.2. Family Instance Placement
- Place Family Instance
- Place Detail Instance
- Changing family instance symbol:
- NewFamilyInstance overloads
- Placing a Line Based Detail Item Instance
- Family API Add-in – Load Family and Place Instances
- Family API – Create Type, Select and Modify Instances
- Family API – Nested Type, Instance and Symbol Retrieval
- Family Instance Placement
- Text File Driven Automatic Placement of Family Instances
- Terminating a Family Instance Placement Loop with Esc
- PostRequestForElementTypePlacement Sample
- Re-Researching Lighting Family Instance Placement
5.25.3. Loading a Family
- Creating and placing an extrusion family
- Reloading a family
- Reloading a family again
LoadFamily
and collector iteration performance- Activate your family symbol before using it
- Modifying, saving and reloading families
- Renaming a family in a project
5.26. PushButtonData Usage Examples
- Revit 2010 Ribbon API
- MEP Sample Ribbon Panel
- Ribbon Embed Image
- Simulating a Ribbon Textbox Label
- Enable Ribbon Items in Zero Document State
- Multi-Version Add-in
- Structural Concrete Setout Point Add-in External Application and CmdData Class
- Roll Your Own Toggle Button
- A Simpler Dockable Panel Sample
- Family API sample external application implementation
- Minimal External Application
- RoomEditorApp External Application
5.27. FamilyElementVisibility
- The Revit Family API
- Revit Family Creation API Labs
- Family Element Visibility
- Set Detail Curve Visibility
5.28. Idling and External Events for Modeless Access and Driving Revit from Outside
- Official Autodesk Knowledge Network introduction to External Events
- Driving Revit from Outside
- Modeless Pressure Drop Tool
- Modeless Loose Connector Navigator
- Revit Webcam
- Idling Enhancements and External Events
- Custom Tooltips
- Drive Revit through a WCF Service
- Revit Ruby Shell
- Auto PDF Print
- AutoExport
- Command Launching from Dockable Panel
- RoomEditorApp
- Replacing an Idling Event Handler by an External Event
- Triggering Immediate External Event Execute
- Driving Revit from Outside
- Revit API Context Summary
- Batch Processing Revit Documents
- PostCommand from Modeless Context or Idling causes Internal Exception
- PickPoint from Modeless WPF Form and No Multithreading
- Use of the Revit API Requires a Valid Context
- Driving Revit from Outside through an External Event
- Extracting all Visible Text from the Revit Model and StringSearch 2016
- Idling and external events, DMU and DocumentChanged comparison
- Communication between AutoCAD and Revit
- Setting Active View During Idling
- External Access to the Revit API
- Batch Processing Revit Families and Documents
- Async and Await External Event Wrapper
- Revit.Async External Event Wrapper Using Task-Based Asynchronous Pattern (TAP)
5.28b Thoughts and Input on Revit I/O
Officially, you cannot currently use Revit as a server to create BIM models programmatically in a fully automated manner. However, several unofficial workarounds have been devised anyway, c.f. above, and the demarcation between driving Revit from a modeless context and using it as a server is vague.
The Autodesk Forge web services are currently being expanded to include support for RVT file read-write operations as part of the Forge Design Automation API.
- What Can Revit on the Cloud Do For You?
- Reading an RVT File without Revit
- BIM Cloud? Why?
- You cannot use Revit as a server
- Forge versus Revit Programming
- Autodesk University class, Las Vegas, November 2017: SD125457 – Design Automation: Building Web Applications with Revit Data on Forge
5.29. ExtrusionAnalyzer
- Extrusion Analyser and Plan View Boundaries
- Room and Furniture Loops Using Symbols
- Sun Direction, Shadow Calculation and Wizard Update
5.30. 3D Booleans, Cutting and Joining Elements
Please also refer to the topic group 5.48 – Element Intersection and Collision Detection.
- Boolean Operations and InstanceVoidCutUtils
- Bevelled Steel Beams
- AVF Displays Wall/Column Intersections and Highlights Rooms
- Element Intersection
- DevLab Munich > Availability of a Solid Modeller Inside a Revit Project
- Determining all family instances intersecting an element
5.31. Dynamic Model Updater Framework DMU
- Structural Dynamic Model Update Sample
- Power to the User (and Application)
- Access Deleted Element
- Removing a Stored Updater Reference
- Associative Section View SDK Sample
- Lock the Model, e.g. Prevent Deletion
- Intermediate API Update Releases
- Avoid Idling
- The Revit 2013 Structure API and RstAvfDmu Migration
- DocumentChanged versus Dynamic Model Updater
- Updater Queues Multi-Transaction Operation for Idling
- DevLab Munich > Dynamic Update of Elements that Mutually Influence each Other
- RevitPythonShell Dynamic Model Updater tutorial
5.32. Detecting and Handling Dialogues and Failures
- Dismiss Dialogue using Windows API
- Editing Elements inside Groups
- Suppress Unwanted Dialogue
- Closing the Active Document and Why Not To
- Synchronize with Central
- DialogBoxShowing event samples:
- Auto-Confirm Save Using DialogBoxShowing Event
- Journal File Replay
- Mirroring in a New Family and Changing Active View
- Application Versus Command Event
- Detach Workset and TaskDialog Command Link Order
- Export Wall Parts Individually to DXF
- Driving CNC Fabrication and Shared Parameters
- Spiderinnet:
- Failure API:
- Suppressing warning pop-ups and a general warning swallower
- Gathering and returning failure information
5.33. Need to Regenerate
- Manual regeneration option danger
- Regeneration option best practices
- To regenerate or not to regenerate...
- Refresh referencing sheet parameter display
- Setting text width requires regen
- Extra transaction or regeneration required
- Regenerate between plane and dimension creation
- Regenerate to avoid accessing stale data
- Need for regen in an updater
- TextNote Bounding Box Requires Regen
- Regeneration Performance Benchmark
- Isolating an Element in a Newly Created View Requires Two Transactions
- Sub-Transaction Requires Regeneration
- Setting a Parameter to Regenerate the Model
- Sometimes it’s not you by Boost Your BIM
5.34. BipChecker, the Revit Built-in Parameter Checker
- Unofficial Parameters and BipChecker
- Duplicate Built-in Parameter Values and BipChecker Update
- The ADN Xtra Labs Built-in Parameter Checker and BipChecker for Revit 2014
- BipChecker GitHub Repository and Migration to Revit 2015
- Built-in Parameter Checker for Revit 2016
- Built-in Parameter Checker included in ADN Revit API Training Labs Xtra
5.35. Autodesk Technical Summit 2014 – A Generic Cloud-based Round-trip Real-time 2D Revit BIM Editor
Please also refer to 5.21 – RoomEditorApp – Room Editor Revit Add-In, describing the initial base implementation for Autodesk Technical Summit 2013.
- Initial plan
- Accepted proposal
- Sheet and category selection, loop enhancements
- Migrating RoomEditorApp to Revit 2015
- Sheet-view-element transforms
- Room editor round-trip element property editing
5.36. Source Code Colourizer
- The Building Coder Source Code Colourisation
- Presenting Colour Coded Source Code
- Source Code Coloriser
- Python Mac Pasteboard Access
- RoomEditorApp for Revit 2015 and CopySourceAsHtml for Visual Studio 2012
- Installing VS 2015 PowerTools Copy HTML Markup
5.37. Creating and Setting Up a 3D View
- Crop 3D View to Room
- What's New in the Revit 2013 API > View API > View Creation
- Setting up your ViewOrientation3D
- Exporting Image and Setting a Default 3D View Orientation
- Saving a Solid to a SAT File Implementation
- Setting the View Display Background
- Setting up a 3D View like a Section View
5.38. Creating and Setting Up a Section View
- Elevation and Section Views
- Section View Creation
- Associative Section View SDK Sample
- Section View Geometry
- Section View Geometry Not Cropped
- Change Section View Type and Hide Cut Line
- Create Section View Parallel to Wall
- Set View Section Box to Match Scope Box
- Language Independent Section View Type Id Retrieval
- Set View Section Box to Match Scope Box for Revit 2014
- CreateAndPrintSheetsAndViews – Dynamically generate from scratch and print on the fly to PDF and JPG an individual sheet and top, side, front and isometric views for each individual element in an HVAC ductwork system, all without committing a single transaction
5.39. Splitting an Element into Parts
- Retrieving Detailed Wall Layer Geometry
- Identifying Wall Compound Layers and Parts
- Parts, Assemblies, PartUtils and DivideParts
- DivideParts in F# and Line Styles
- Export Wall Parts Individually to DXF
- ExportCncFab on GitHub
- Driving CNC Fabrication and Shared Parameters
5.40. The ADN Revit MEP HVAC and Electrical Sample AdnRme
- MEP Sample Code for Revit 2012
- The ADN MEP Sample AdnRme for Revit MEP 2013
- Simple MEP System Traversal
- ADN Revit API Training Material Update and Vacation
- The ADN Sample AdnRme for Revit MEP 2014
- RevitLookup on GitHub and Invitation to Collaborate
- AdnRme Progress Bar and Exceptions in Revit 2015
- AdnRme Migrated to Revit MEP 2015 on GitHub
- AdnRme for Revit MEP 2016
5.41. Revit and Its API is Different
- Programming for a Parametric BIM versus Freely Defined Geometry
- Porting an AutoCAD Application
- Revit API Aspects and Features
- Reactions on the Revit API Features
- How to Modify Family Instance Geometry
5.42. Texture Bitmap and UV Coordinate Access
- Texture Data UV Coordinates and FBX
- Material Assets and FBX
- OBJ Model Export Considerations
- Graphics Pipeline Custom Exporter
- Texture Bitmap and UV Coordinates
- Revit 2014 OBJ Exporter and New SDK Samples
- Custom Exporter Framework Feedback
- Material Asset Textures, Forge Webinar Recordings
- Material Texture Path
- Setting Material Texture Path in EditScope
- Create New Material with Texture
5.43. Point Clouds
- Point Cloud Snap and Freeze
- Point Cloud Overview
- Point Cloud Unit Conversion
- Point Cloud Feature Extraction
- Point Cloud Request Batching
5.44. Creating a Floor
- Editing a Floor Profile
- Hole in a Floor
- Floor Creation
- Pick Corners and Create Floor
- Create a Floor with an Opening or Complex Boundary
- Creating a Sloped Floor
5.45. Creating Dimensioning
- The Revit Family API Labs
- Family Lab 2 – Create L-Shaped Column
- Creating a Dimension Label
- Dimension Walls by Iterating Faces
- Dimension Walls using FindReferencesByDirection
- Create Dimension between Two Lines
- Dimensioning Family Instance Origin
5.46. Autodesk View and Data API
- Sneak Peek at the Autodesk 360 Viewer
- Autodesk View and Data API
- View and Data API Presentation Material
- Autodesk View and Data API Webinar
- ADVA Webinar notes
- ADVA Hackathon Workshop Notes and Samples
5.47. Exporting Individual Element Geometry
- Exporting walls and floors to SAT:
- Exporting wall parts to DXF for CNC fabrication:
- Export Wall Parts Individually to DXF
- ExportCncFab on GitHub and RevitLookup Update
- AU 2013 Class FB2938 – Design to Fabrication
- Driving CNC Fabrication and Shared Parameters
- Saving a solid to a SAT file:
5.48. Element Intersection and Collision Detection
Please also refer to the topic group 5.30 – 3D Booleans, Cutting and Joining Elements.
- Intersection between elements
- Find intersecting elements
- Using AVF to display intersections and highlight rooms
- Filter for touching beams using solid intersection
- Element intersection
- Determining intersecting elements
- Using an Intersection Filter for Linked Elements
5.49. Edit and Continue, Debug without Restart, Live Development
- Reload an Add-In to Debug
- Dynamically Load and Debug Plug-ins
- Debugging an Add-in Without Restarting Revit
- Reload Add-in for Debug Without Restart
- Visual Studio 2013 Supports 64 Bit Edit and Continue
- Debugging Revit 2014 API with Visual Studio 2013
- Visual Studio 2013 May Partially Support Edit and Continue
- Live Development
- Using AddInManager and Attach to Process to Edit and Continue
- Debug and Continue in a Revit Add-In
- Apply Code Changes Debugging Revit Add-In
5.50. DirectShape Element
- DirectShape Performance and Minimum Size
- DirectShape versus Families, Category and Texture
- From Hack to App – OBJ Mesh Import to DirectShape
- Creating a DirectShape Element from a Face Mesh
- Simpler DirectShape on Picked Face Using Total Transform
- Flatten All Elements to DirectShape
- Updated DirectShapeFromFace
- Improve loft form creation speed using DirectShape
- Create DirectShape instead of conceptual mass
- Create surface from face
- Create DirectShape from solid
- Control DirectShape colour and material
- Improve family performance suppressing DirectShape generation
- Create DirectShape from room
- Create Swept Blend DirectShape in C++
- Assign different colour and material to each DirectShape face
5.51. Spatial Adjacency and Thermal Energy Analysis Model
- What's New in the Revit 2012 API – Analysis of room and space 3D geometry, Detailed Energy Analysis API, Conceptual Energy Analysis API
- What's New in the Revit 2013 API – Thermal properties and gbXML Export
- Space Adjacency for Heat Load Calculation
- Calculating Gross and Net Wall Areas
- Gross and Net Wall Area Calculation Enhancement
Please also refer to the topic group 5.2 – 2D Booleans and Adjacent Areas.
5.52. The Revit API Util Classes are Often Overlooked
- Not a real Util class: RevitAddInUtility, later for 32 and 64 Bit Systems
- Label: User Visible Enumeration Value Labels
- Label: Built-in Parameter Name and LabelUtils
- All: Handy Utility Classes
- Naming: Unique Names and the NamingUtils Class
- IFC: ExporterIfcUtils Curve Loop Sort and Validate
- Worksharing: WorksharingUtils
- IFC: UsesInstanceGeometry
- Valid `FilterRule` parameters: ParameterFilterUtilities
5.53. Handling Transactions and Transaction Groups
Please note that transaction handling is sometimes also related with the need to regenerate.
- Transactions
- Transaction Responsibility
- Extra Transaction Required
- Transaction Migration Errors
- Scope and Dispose of Transactions
- Using Using Automagically Disposes and Rolls Back
- Read-only and Automatic Transaction Modes
- Disposal of Revit API Objects
- The Temporary Transaction Trick
- Updater Queues Multi-Transaction Operation for Idling
- Extra Transaction or Regeneration Required
- Transactions, Sub-Transactions and Transaction Groups
- Handling Transaction Status and Errors
- Using Transaction Groups
- Avoid Brain Racking by Using Using
5.54. Structural Extensions, REX and Results Builder
- The REX SDK
- Extensions for Revit 2012
- REX Content Generator
- Security, Framing Cross Section Analyser and REX
- Framing Cross Section Analyser and REX in Revit 2015 ^
- REX Add-In Development and Migration
- REX SDK FreezeDrawing Sample
- REX Extensions versus Revit Add-Ins
- RST and the Structural Analysis SDK
- REX SDK Templates for Revit Structure 2019
- REX SDK and Structural Analysis SDK 2020
5.55. DA4R – Design Automation for Revit
- The Field of View Overview of DA4R Resources
- Swallowing StairsAutomation Warnings
- Auto-Run an Add-In for Design Automation
- Forge Design Automation for Revit
- Design Automation for Revit at AU and in Public
- IfcSpaceZoneBoundaries add-in
- Before Getting Started with Design Automation
5.56. Element Identifiers in RVT, IFC, NW and Forge
- UniqueId, DWF and IFC GUID
- Element Id – Export, Unique, Navisworks and Other Ids
- Understanding the Use of the UniqueId
- Consistency of IFC GUID and UniqueId
- Unique IDs for Forge Viewer Elements
- RevitLookup Search by Element and Unique Id
- Element Identifiers in RVT, IFC, NW and Forge
- Unique Id and IFC GUID Parameter