Revitalizer shared two important hints: a performance issue using
ElementTransformUtils and a problem reporting mechanism built into the
First, though, let's highlight an even more important upcoming event, the series of DevDays online webinars
– Register now for Autodesk DevDays online webinars
– Avoid using
ElementTransformUtils for batches
– Finding cause of
DirectShape generation problem...
I'll begin the new year by discussing a bunch of topics addressing various aspects of
– Updated DirectShapeFromFace
– Improve loft form creation speed using
DirectShape instead of conceptual mass
– Create surface from face
DirectShape from solid
DirectShape colour and material
– Improve family performance suppressing
DirectShape from room...
Two recent Revit MEP related cases brought up some new information on the pipe
K factor table and custom calculations for pipe fittings, the Forge DevCon class recordings are now available, and I discovered Konrad Sobon's wonderful archi+lab Revit API blog, which helps resolve an installation and setup issue
K factor table
K factor calculation for pipe fittings
– Dynamo code to change loss coefficient
– Forge DevCon 2017 class recordings
– Revit add-in installer and buttons...
I'm trying to retrieve connected framing elements through the API.
My end goal is to select a beam and retrieve the element id of the elements its ends are framing into.
I have been able to do this by checking location intersection of all other beams, but this scales by
n^2 based on the number of beams for the check.
I read the article on finding connected structural elements, but I'm confused on the actual implementation of it.
Has anybody come across a working example showing how to
Let's discuss the Revit API enhancements added since the initial release of Revit 2018 – Revit 2018.2 Product Update and Resolved API Issues – Revit 2018.2 SDK Update – Major Additions to the Revit 2018.1 API – Material API additions – Geometry API additions – BrowserOrganization API additions – IFC additions – Rebar API additions – Major Additions to the Revit 2018.2 API – Fabrication API additions...
I went on my first ski tour this season...
lots of interesting issues in
the Revit API discussion forum...
a Japanese case on programmatically generating a mass floor, enabling us to mention yet another hitherto unmentioned Revit API usility class,
Please tell me if a method exists to generate a mass floor using the API...
Alexander Ignatovich shares an exceedingly elegant solution for automatic wall creation, illustrating a number of important concepts and implementing the following functionality very succinctly indeed
– Retrieve all the
cube family instances
– Retrieve their
height parameter value
– Retrieve their solids making use of the .NET
– Extract their horizontal outline contours using an
– Create walls along each contour curve segment
– Place a door family instance at the midpoint of each wall...
Question: How can I set the Material Render Appearance through the API?
I can see there is the
Autodesk.Revit.DB.Visual.Asset class, but how do I add to the list of
Autodesk.Revit.DB.Visual.AssetProperty objects for a new material?
Answer: The good news is that this is possible in Revit 2018.1 using the Visual Materials API.
Check out Boris Shafiro's class at AU to learn about it...
Migrating a Revit add-in to a new release of the Revit API is generally very easy. The API features slight changes from version to version. Modifications are announced a year or two in advance, and signalled during compilation by deprecated API usage warnings. If you clean up your code every year or two and remove all API usage that causes warning messages, you will normally have very little to do to migrate it later on...
A "don't miss" list of the main highlights and a heads-up on some of the biggest happenings – See into the future of Forge with partner and executive keynotes – Choose from over 50 AU classes on ways to take advantage of cloud solutions – Visit the Village, an exclusive exhibit open only to Forge DevCon attendees – Demo and witness first hand the new AR/VR Toolkit – Get to know Amazon Web Services through these classes and exhibits...
My plans changed and I will not be visiting Las Vegas this year after all. The most important participants in the Revit API session that I was preparing to host are the members of the Revit development team, anyway. I very strongly urge you to not miss the chance to attend both AU and the preceding Forge developer conference, though – Forge DevCon highlights and reasons to join your peers – Sneak peek at the Forge DevCon keynotes – Visit the exclusive Forge DevCon village on Monday – Get one on one with Amazon Web Services – Decide now...
A quick geometrical question on retrieving geometry from a basic wall being used as a panel in a curtain wall.
I am struggling to retrieve the geometry data from a curtain wall that contains a Basic wall in one of the curtain wall panels. My example curtain wall has two panels. With one of the panels, a basic wall type is associated. I need to get the geometry data (i.e., the faces) for the entire curtain wall. When I reach the second panel in my code, the
SymbolGeometry contains zero objects, so my code cannot retrieve any geometry for it...
Here is an official answer from the Revit development team on the long-standing and recurrent issue on retrieving the path to a specific material texture bitmap file
– Question: I am working on an exporter plugin for Revit that exports all geometry from selected objects using the
When extracting object materials, I can successfully get most of the information, but I can't seem to find the path to the material texture
I completed the presentation and recording of my presentation yesterday on Rational BIM programming using Revit and Forge at Autodesk University in Darmstadt, Germany
– Rational BIM Programming recording
– Pleasant walks in the Odenwald
– Some of my favourite recent books
– Where to continue after finishing school
– New AlphaGo Zero is completely self-taught
I am attending Autodesk University in Darmstadt, Germany, and putting the final touches to my presentation tomorrow on Rational BIM programming using Revit and Forge. Here are the slides and the handout document in their current state in PDF format – Slide deck – Handout document – For your convenience, here is the full text of the latter as well...
I am attending the Forge DevCon conference in Darmstadt, Germany, right now, and putting the final touches to my presentation on Rational BIM programming using Revit and Forge at the European Autodesk University on Wednesday. We discussed several different approaches to retrieve the outer loop of a planar face. Richard Thomas recently shared a possible solution to determine the outer-most EdgeLoop. He now posted a new approach: I found a more straightforward and likely reliable way of getting outer loops of planar faces. This method also allows for faces made up of disjointed parts...
I am back from a nice break in Italy. Next, I am attending the European Autodesk University in Darmstadt, Germany. Meanwhile, solutions for two issues on keeping Revit focused and on top when working with a modeless form, and an important heads-up warning from the Revit development team on a future change coming. We here at Ideate Software are seeing what appears to be Revit add-in ownership issues with Revit's main window. The behavior has changed between Revit 2017 and Revit 2018 for modeless add-ins. For Revit 2018, when a modeless add-in is closed, Revit does not retain is focus; it is pushed behind another application...
As usual, I am answering Revit API cases and maintaining the documentation and training material. What I really should be doing is preparing my upcoming class for Autodesk University in Darmstadt. Here are some of the things I dealt with today – API changes from Revit 2013 to Revit 2017 – ADN Xtra Revit API Labs for Revit 2018 – Access to modified combo box setting...
The Revit 2018.1.1 hotfix was released last week and solves an API issue that was already being discussed in the Revit API discussion forum. Further, Gui Talarico updated the online Revit API documentation for Revit 2018.1 – Revit and Revit LT 2018.1.1 released – CropBox setting in Revit 2018 API fixed – CropBox setting workaround – Revit 2018.1 API documentation online...
I'll be attending the two Autodesk University conferences in Darmstadt, Germany, October 17-18, and Las Vegas, USA, November 14-16. Both of these are preceded by a Forge DevCon developer conference. You may be interested only in Revit and its API or other desktop oriented programming and asking yourself why you should care about Forge and all that cloud stuff. If so, you might want to expand your horizon and take a look at Stephen Preston's analysis and explanation in his article on 'developing for Autodesk desktop software? Here's why you should care about Forge DevCon (and Autodesk University)'...
Alexander Ignatovich answered several interesting questions in the Revit API discussion forum
ExtentElem and duplicating legend components
– Obtaining generic model square face references for dimensioning
– Preparing family with reference planes for dimensioning
– Creating a line perpendicular to another...
I spent last week working on a new little BIM sample showing a round trip connection between Revit and Forge, and an automated way of generating and populating shared parameters from spreadsheet data – RvtMetaProp – Revit meta property add-in – CSV and JSON input file format – Forge configurator sample – Round-Trip Forge meta property editor – BipGroupList lists built-in parameter group enums and labels – Two options to add custom properties to the Revit BIM – Translation of shared parameters to Forge – Handling BIM floors in Forge...
Håvard Dagsvik of Symetri implemented code to automatically generate a dictionary mapping the Revit
DisplayUnitType to corresponding
UnitSymbolType display strings. The developer guide describes these classes like this
– UnitType – type of physical quantity to be measured, for example length or force (UT_Length or UT_Force)
– DisplayUnitType – units and display format used to format numbers as strings or convert units (i.e. DUT_METERS)
– UnitSymbolType – unit symbol displayed in the formatted string representation of a number to indicate the units of the value (i.e. UST_M)...
A biggish post rather late in the week... still answering too many cases – Forge for AEC demos and sample code – Determining the starting view – Detecting installed Revit version – Detecting installed C3D version – Moving items inside a detail group – Filtering for family instances and types by family name...
Forge versus Revit programming – Access Revit BIM data and element ids from BIM360 – Unique IDs for Forge viewer elements – Edit and export Revit properties in Forge – Upcoming Forge accelerators – Updated Visual Studio Revit add-in wizard installation – Question on RevitLookup installation – RevitLookup cannot snoop everything...
Summer is here. Autodesk shut down for the first week of July. I went on a few mountain hikes. Explorations to apply artificial intelligence in construction projects are under way. World-wide Autodesk University, Forge Accelerator and BIM360 events have been announced – Forge accelerators in India and France – BIM 360 online hackathon – BIM 360 integration and partnering webinar recording – Call for add-in developers using dockable pane and point cloud engine – Forge at Autodesk University in China, Japan, Germany and Las Vegas – Deep learning analyses photos and videos of industrial sites...
Depending on circumstances, interactively picked family instance geometry may be returned in the global Revit world coordinate system WCS, or in the family instance definition local coordinate system LCS. A family instance may have its own non-empty solid, or use the symbol geometry. The symbol geometry requires keeping track of the instance transform to map it to the actual instance project location – Question on Incorrect Face Normal – Working Plane has no Effect – Non-Picked Face Normals are Correct – Solution – Detecting When to Use LCS versus WCS – Retrieval of Picked Geometry Face from Instance is Untransformed...
Here is another brilliant and super succinct solution provided by Fair59, answering the Revit API discussion forum thread on how to get cutting void instances in the floor using the
FindInserts method – Question: I have a floor on which a family instance is inserted on the face of the floor (the instance host is also the floor). I checked in the family the "Cut with Void When Loaded" parameter, so that the void is created in the floor. Now, I want to retrieve all the instances that create voids in the floor...
A rather hard struggle led to a rather simple solution for determining the start and end points of dimension segments. In summary, the solution looks like this – A
Dimension element is either single- or multi-segment; these two cases need to be handled separately – In case of a single segment, the dimension element itself has a line, an origin and a value; the line is indeed the dimension line. However, it may be unbounded...