As the Walrus said, now "the time has come ... to talk of many things", including the highlights of the new Revit API functionality, so here we go!
Welcome to my first post on the Revit 2015 API, disregarding the RevitLookup migration to Revit 2015, of course.
A couple of posts on upcoming Revit 2015 product functionality were already published in the past week or so, e.g.:
- Overview of new features by synergiscad
- Feature list by Revit.King
- Highlighted features and enhancements by Paradigm shift
- Screen snapshots by cadline
- Videos by BIMopedia
I will therefore skip all product related stuff and dive straight into the API instead.
Here is the Revit 2015 DevDays Online recording material, based on the presentations shown at the confidential Autodesk DevDays conferences in and around December 2013.
- Presentation slide deck (23 MB)
- Presentation recording with table of contents navigation (354 MB)
- Presentation notes (198 KB)
- Sample code incl. RVT models (45 MB)
- Sample code excl. RVT models (1.5 MB)
The next thing I want to do is to publish the "What's New" section from the updated Revit API help file RevitAPI.chm, to ensure it is available for and easily found by online searches, as for the past few releases:
- What's New in the Revit 2010 API
- What's New in the Revit 2011 API
- What's New in the Revit 2012 API
- What's New in the Revit 2013 API
- What's New in the Revit 2014 API
That is always the first place to explore if you have any questions about or problems with your migration or the new functionality provided.
I wish you lots of fun and excitement exploring the new possibilities provided by the Revit 2015 API!
Right Click Circle of Commands GUI Design for Revit
Sticking with what we already have for the moment, another interesting this that just came up on the Revit API forum is this discussion thread initiated by Ryan on GUI design for Revit.
Ryan suggests developing a secondary user-infterface for Revit, like the right-click command in Fusion 360, or Inventor, a wheel (or circle) showing a pre-determined list of commands.
The Revit user interface could look something like this:
Commands placed on circle segments:
Interactive command population:
In his own words:
I think a lot can be achieved with the postcommand function. Hope you don't mind but i took your idea and gave it a crack....
Firstly i created a form with the wheel as the background. I created a public property on the form which is the id of the command to issue:
Public CommandToIssue As RevitCommandId
I then created transparent picture boxes over the various icons. Clicking on a picturebox asigns a command id and closes the form:
Private Sub PictureBox2_Click( _ ByVal sender As Object, _ ByVal e As EventArgs) _ Handles PictureBox2.Click CommandToIssue _ = RevitCommandId.LookupPostableCommandId( _ PostableCommand.StructuralColumn) Close() End Sub
Under the forms show event i added code to locate the form at the mouses current position:
Private Sub WheelForm_Shown( _ ByVal sender As Object, _ ByVal e As EventArgs) _ Handles Me.Shown Location = New System.Drawing.Point( _ CInt(MousePosition.X - (Me.Width / 2)), _ CInt(MousePosition.Y - (Me.Width / 2))) End Sub
Finally I setup a command to display the wheel, and post the command:
Option Strict On Option Explicit On Imports Autodesk.Revit.Attributes Imports Autodesk.Revit.UI Imports BrevitTools.UI.Wheel <Transaction(TransactionMode.Manual)> _ Public Class Wheel Implements IExternalCommand Public Function Execute( _ ByVal cmdData As ExternalCommandData, _ ByRef message As String, _ ByVal elements As Autodesk.Revit.DB.ElementSet) _ As Result Implements IExternalCommand.Execute Dim form As New WheelForm form.ShowDialog() If form.CommandToIssue IsNot Nothing Then cmdData.Application.PostCommand( form.CommandToIssue) End If Return Result.Succeeded End Function End Class
To display the wheel inside revit I assigned a shotcut key (ww).
Here is link to a video of it in action.
I think there is loads of potential for this. You could easily add code to check what elements are preselected and then display a contextual wheel.
Thank you very much, Ryan, for the interesting suggestion, and Brett, for sharing this fine implementation!