AU Day Two, IFC and Revit API Panel

The second day.

I finally got to attend Angel Velez' IFC class – it always clashed with my own in previous years – followed by the product keynote and the Revit API panel discussion:

Before diving into that, here is a handful of snapshots from AU day two:

AU2016 Day Two

Angel Velez on IFC

Here are the slides and handout from Angel Velez' class AR20462 IFC Technical Overview and Survey of Autodesk Products, including Revit 2017:

Their content is not identical, so you might want to go through both.

Angel Velez

I took a very few notes on some of the slides:

Especially noteworthy: the number of downloads of the open source implementation over the course of the years, currently well over 140k:

IFC open source download numbers over time from 2011 until today

I snapped up one Forge and IFC related question:

[Q] What settings are used by the Forge RVT IFC translation?

[A] Forge RVT IFC translation uses default settings. We are discussing internally how to enable users to set specific additional options.

Product Keynote

Extremely fragmentary notes from the product keynote:

Revit API Panel

My last session of AU day two was the Revit API Panel SD20891 Revit API Expert Roundtable: Open House on the Factory Floor:

Panel Members

We have the following panel members:

This represents an ideal combination of API designers, users and supporters.

Now we just await the participants input.

And here it comes!

Questions and Answers

Q. We heard that wishes now go into Revit Idea Station:

Will you pre-populate it with existing wish list items?

A. Please report them again. Please refer to the existing wish list numbers. We would like to clean up and separate the external ones from internal ones. All the existing wish list items still exist!

Q. How to separate product features and API requests?

A. Use the API tag.

Q. Access to the scale list?

A. We don’t know off-hand.

Q. Will you be exposing APIs for old missing objects, like ceilings?

A. All new functionality is required to be equipped with an API. Other than that, get many votes for it on Idea Station. Cut-off is currently 50, apparently.

Q. Suppressing messages?

A. There are several levels, cf. The Building Coder topic group on Detecting and Handling Dialogues and Failures.

Tell us what specific messages you have problems with. If all else fails, there is a Windows API that you can use as a workaround.

Q. Task dialogue ids are undocumented. We are forced to debug and reverse engineer to determine which id to catch. All info is in the UIFrameworkRes.dll, so it’s available. Could it be documented?

A. You can solve this more easily using logging. Every command can be logged. The log includes the id. Implement a log for everything you do, log all the dialogue info, the more info you have the better.

Q. Instantiating thousands of family instances (millions of bricks, in fact!) takes a long time. Also, a simple transformation. AutoCAD does this much faster.

A. Revit is more complicated. Submit a very specific reproducible case. We need a file to analyse. Analyse whether you can make it more effective. Revit was not designed for that kind of scale. Group things differently. Don’t model individual bricks, for instance.

Q. Multithreading support in the API?

A. Revit runs all API operations in a single thread. We cannot change this easily. We can move other operations into other threads. This applies to model modification. Extraction can conceivably run in a different worker thread. That might be exposed to the API sometime.

Q. Copy monitor in API?

A. No.

Q. Support programmatic material creation with images?

A. Look at the public Revit roadmap:

It is on there (applause).

Q. Is there a significant difference between the size of a Revit family inside versus outside a project?

A. They should be pretty close. The contents are copied from the family into the project, some things are shared, reducing size, nested stuff increases it, …

Q. Does the size matter?

A. High level yes, but it depends. A few instances make no difference. Millions of instances do. So does complex geometry and complex joins. We have worked hard at improving scalability and performance. Views and navigation has been speeded up.

Q. Can I edit a group?

A. No, sorry. Ungroup and regroup.

Q. New functionality coming out is built using the API. How many developers are working on that kind of thing?

A. A lot of our teams. We build as many features as we can on top of the API. They may be working on internal functionality at the same time. API and core functionality…

Q. Can you provide more examples using Python?

A. Nothing planned at this point. Good idea though. Log it.

Q. Point snapping when you manually instantiate. Can that be monitored? We would like to snap to specific points. A snap filter.

A. Not currently.

Q. Documentation has very little detail. Could this be published in a wiki-style format, so we can add comments?

A. We are looking at that. We need something more scalable. There are challenges.

By the way, look at Revit API docs, web-hosted CHM content:

Q. Can we get location points from free-form elements? And rotation?

A. Use DirectShape instead. We use that a lot, and it is being actively developed.

Q. Can we use free-form surfaces with DirectShape?

A. The Revit 2015 API introduced the tessellated shape builder. In 2017 the b-rep shape builder was added for curved surfaces. The original Dynamo builder was built early. If the B-rep builder fails, it tries to use the tessellated one.

Q. In the worksharing tooltip info, can the dates be exposed as well?

A. Not to our knowledge.

Q. How can I know when PostCommand is complete? Or a modal window?

A. Maybe using the Idling event? Or the progress changed notification?

Q. Can I host a fixture to linked elements?

A. We guess not. One participant adds: I wouldn’t do that. We tried it. As an MEP coordinator, we explicitly un-host things for many reasons. Another participant copies the fixture to keep track of …

Q. How much custom development was done to integrate Dynamo?

A. Dynamo uses the Revit API. It may use one or two undocumented API hooks, but definitely nothing fundamental. If it was, it should be made public.

Q. Is the Dynamo player supported by the API?

A. It has no additional API at all. It is simply built on top of Dynamo and the public Revit API.

Q. Can I control the visibility state of face edges, hide specific face edges? E.g., for multiple tessellated faces, hide internal edges.

A. No. In the UI, you might be able to manually override. In direct shape, you have control over categories, and could use those to control visibility.

Q. What do you say about ODA Teigha BIM?

A. No comment. We do however see that there is considerable interest for that sort of thing out there.

Q. Will we see Forge design automation support for Revit?

A. Yes, we are looking at that. The Forge model derivative API already supports generating IFC and DWG from RVT.

Q. Access to link visibility settings?

A. No.

Q. Access to element relationships? Stair to handrail, e.g.

A. In many cases there is a one-directional relationship. You can easily invert it, cf. blog post number 16 from 2008 on the relationship inverter.

You can use filtered element collectors to very effectively implement such a relationship inverter.

Q. Debug and continue?

A. Yes! Please refer to the recent blog post on edit and continue using 'attach to process' and the AddInManager.

Q. New database connections, e.g. SQL server 2016?

A. Please submit to Revit Idea Station.

Q. Will you recycle aging Revit Idea Station entries?

A. Yes, if a wish sits for months with few votes it will be archived.

Q. Is 50 the right threshold for API wishes?

A. The number one API wish list has been implemented and had more votes than that. We may consider lower rated wishes as well.

Notes from Previous Revit API Panel Sessions

Here are the notes from previous similar Revit API panel sessions:

Session Materials

Here are the class materials: