Sunday, December 4, 2016

Wood Framing Wall+ Version 2017.17 Released, Plus New Affordable 'Frame My Project' Service

Editor's Note: The version mentioned in the title of this post is the version compatible with Revit 2017. This add-in is also available in 2016 and 2015 versions. Use AGACAD's free Tools4BIM Dock to install the release for your Revit version.

From the AGACAD website:

New Wood Framing Wall+ versions have been released!

Check out the newest versions of Wood Framing Wall+. From custom joins to offsets, the increased options give you more flexibility in modelling your project.

  • The possibility of creating custom joins under V Connections has been added.

User can predefine each stud position, type, rotation, alignment, etc. The scheme which is predefined by the user is visible in the Symbolic Preview.


Cut Opening Version 2017.5 Released (Updated)

Originally published on November 25, 2016. Updated on December 4, 2016 to include additional features from the manufacturer. Specifically, the sections headed "Standardization" and "Real life tips".

Editor's Note: The version mentioned in the title of this post is the version compatible with Revit 2017. This add-in is also available in 2016 and 2015 versions. Use AGACAD's free Tools4BIM Dock to install the release for your Revit version.

From the AGACAD website:

New Cut Opening Version Released. Missing functionality has been implemented

We’ve just released a new version of Cut Opening with lots of new features. Some of them were implemented together with our customers from Clancy Consulting,Mott MacDonald and NIRAS teams. You can read the short descriptions down below.


Gary Royle @ Clancy Consulting

"We would like to use round holes for cable trays but can’t seem to change. Is this possible?? In answer to your question, it is felt that it is cheaper to create a circular opening in a piece of steel than it is to create a rectangular hole. Therefore for small cable trays such as 50mm x 30mm it is felt that it would be cheaper to create a circular hole of around 75mm diameter."

We opened the possibility to add round openings for all rectangular MEP objects (Ducts, Cable Trays).

The software calculates the diagonal length of the rectangular object and adds a round opening with a specific diameter. This feature allows BIM users to build models as they do out in the industry.


Otto E Stallworth @ Mott MacDonald

"We’ve noticed that the “Insert/Modify MEP Openings” interface keeps a history of all elements used in the process. We have over 1500 items in some models and it causes extreme decreases in performance, double and triple the processing time. Is there a way to clear this history? At this stage in the project we are only running the software on each station one time which is followed by a thorough review. During this review is when we plan to Modify the openings, therefore we feel we can break the link between the openings and the plugin. Since this plugin was introduced very late in this project, we have a lot of openings created by editing profiles so we must do a manual check regardless. So is it possible to break this link and would it increase efficiency? "

Insert/Modify MEP Opening has been split into two different parts: Insert MEP Openings and MEP Openings’ Revision. Now when you insert a new opening by a new *.xml, the software won’t read the whole model, so the insertion of new openings will be much faster than before. To review or edit an opening, use MEP Openings’ Revision.

GenMEP – Route MEP Systems Without Clashes, Including in Point Clouds

From the BuildingSP website:

GenMEP is an add-on to the Autodesk Revit family of products. The core feature of GenMEP is the ability to algorithmically route MEP systems without clashes.

These are the specific features of GenMEP:

Fixed Angle Routing

Auto-routes at 90 degree angles only, any angles, or combinations of 45-degree and 90-degree angles for conduit.

Batch Routing

Includes support for batch files to save routes for future routing or to explore route options.

Revit Links

Routing within point clouds, linked files, or imported IFC files.

Route Clearance

Includes support for per-route custom clearances.

Room Control

Optional per-room routing control.

Saturday, December 3, 2016

RTC 2016 EUR – Boost Your BIM's Harry Mattison Granted Revit API Wishes (Update #3)

Originally published on October 22, 2016.

As he often does around the larger Revit conferences, Harry Mattison took and granted Revit API wishes at RTC 2016 EUR.

Wishes could be posted on Boost Your BIM or tweeted to @BoostYourBIM.

  • Updated on 10/21/2016 to add the third and fourth items.
  • Updated on 10/22/2016 to add the fifth item.
  • Updated on 10/22/2016 to add the sixth and final item, and to re-frame the article in the past-tense.

#RTCEUR API Wish #1: Purging Types and Families

"The first wish granted from Porto is for Phil who wished for 'a solution to purging unused Revit elements from a Revit model'. Different elements need to be purged in different ways. This code will clean up unused system and loadable families and their types."

Read Harry's solution here.

#RTCEUR Wish 2: Pipe Split and Hanger Creation

"Brian wished for 'splitting MEP Pipework at certain distances on the horizontals with Revit MEP Hangers. Here’s a look at how the API can be used to create a new set of pipes of a specified length to replace one long pipe. Hangers are placed at the start and end of each new pipe."

Read Harry's solution here.

Making change (or select pipe lengths) at #RTCEUR

"Building on yesterday’s post about pipe splitting, you may want a semi-intelligent way to choose quantities of pre-cut lengths to use when you break apart a long element into fabricated pieces. Fortunately, this is the same challenge as how to make change for a given amount of money."

Read more here.

RTC 2016 NA – Boost Your BIM's Harry Mattison Granted Revit API Wishes

From the Boost Your BIM website:

MallerComplexity Family tool goes open-source

During RTCNA Boost Your BIM collaborated with Kelly Cone and Matt Mason to create a tool to measure complexity of Revit families. It is named in honor of Aaron Maller who makes some of the most sophisticated families around.

It scores each family and its top-level nested families based on the # of family parameters and # of operators (‘>’, ‘<‘, ‘+’, ‘-‘, ‘*’, ‘/’) in parameter formulas.

Thinking that others might like to continue the development of this tool, Boost Your BIM has created a public repository for the code and looks forward to seeing the enhancements that others might implement.

Git repository:

Discussion at Revit Forum:

#RTCNA wish granted – Design Option Set info

Rabi asked

I am curious if you have figured a way to get the Design Options Set from Revit API

Here’s what it seems we can do with the parameters OPTION_SET_ID and PRIMARY_OPTION_ID

For the source code, see this article

#RTCNA wish almost granted – clear keynote when duplicating types

Clearing out my RTC API Wishlist Inbox… (do you have more wishes? RTCEUR is coming in 3 months)

Nicklas asks

Is it possible to create a macro that resets keynote when a family is duplicated?

The code and video below shows how Dynamic Model Update can be used to clear the Keynote parameter’s value any time a new Element Type is added to the file. But the problem with this is that it does not distinguish the different ways that a new Element Type can be added.

You can duplicate a type (the scenario that Nicklas wants to capture) but it also triggers when you load a family (a scenario that probably should not clear the keynote values for the just loaded families). The solution to this might include subscribing to the DocumentChanged event and using the GetTransactionNames Method to differentiate between a Duplicate and Load Family.

For the source code, see this article

RTC 2015 EUR – Boost Your BIM's Harry Mattison Granted Revit API Wishes

From the Boost Your BIM website:

#RTCEUR Wish 5! View Template (partially) exported

T.R. wished for the ability to “compare two view templates to identify/highlight differences. Or a way to spit them to txt/xls for compare”

We can get the data from all parameters stored as numbers, text, and element ids. We can also query the properties of the View class. In the sample code, this is done using reflection so code does not need to be written for each property individually.

Also, GetNonControlledTemplateParameterIds returns a list of parameters that are not marked as included when this view is used as a template. GetTemplateParameterIds returns a list of parameter ids that may be controlled when this view is assigned as a template.

For the source code, see this article

#RTCEUR Wish 4 granted! Change parameter value in multiple families

Doug asked ” How about a routine to change the value of a shared parameter in all families in a folder to the same specified value.”

For the source code, see this article

#RTCEUR Wish 3 continued & discussed – automatic revision clouds

In the previous post I showed how the API can create a revision and cloud for elements selected by the user. Now, what if you wanted the revisioning to be done automatically every time the user makes a change, addition, or deletion?

It works nicely when the table is moved or a new, wall is created that does not join with other walls.

But what happens when a window is moved or a wall that joins to other walls is created? Too many elements are included in the revision cloud – not good! This is because when the user modifies an element hosted by the wall, Revit makes changes to both the hosted element (such as the door) and also the wall that hosts the door. The same issue comes up when a new wall joins with existing walls – they all are changed. GetModifiedElementIds does not let us differentiate between the element that the user changed and the elements that Revit changed because of the user change.

It might be possible to get the selected element using the Idling event, store its element id, and then in the updater only create the revision cloud around this element if it was modified.

Automatically creating a revision cloud around an element’s former location after it has been deleted is even harder. GetDeletedElementIds gives the ids of the deleted elements, but because they are deleted they no longer have a bounding box or location that you can get to define the curves of the revision cloud. To do this you would need to store the id and bounding box coordinates of every element in the model, and then retrieve that data after the element is deleted. If smoke starts coming out of your computer from doing this, don’t say I didn’t warn you.

For the source code, see this article

RTC 2015 NA – Boost Your BIM's Harry Mattison Granted Revit API Wishes (Update #3)

Originally published on July 23, 2015.

There was A LOT of activity on Twitter today around the Revit Technology Conference North America (RTC NA, @RTCNA on Twitter) 2015, which started today in Washington DC. Signifying the importance of the event, there was also a lot of activity by Revit add-in developers in the leadup to the event. More on this aspect in subsequent posts.

Harry Mattison, he of the excellent Boost Your BIM blog, is holding a veritable one-man hackathon to grant your Revit API wishes during RTC NA 2015, which runs through Saturday. Simply express your wish and Harry will try to write a solution while he's at the convention.

That dude's nuts...

Here are links to example wishes granted from past years: RTC EU 2014 & RTC NA 2014.

Wish 1 granted! Export wall type layer information.
Wish 2 granted! Create view for every level for every view type.

Updated 7/24/2015 to include wishes 3-8.
Wish 3 granted! Join all walls and floors.
Wish granted!    Combine dimensions into a single string.
Wish 4 granted! Delete empty tags.
Wish 5 granted! Toposurface from Sokkia SDR file.
Wish 6 granted! Create assemblies from groups.
Wish 7 granted! Isolated 3d view for each workset.
Wish 8 granted! Delete unused elevation markers.

Updated 7/27/2015 AM to include wishes 9 & 10.
Wish 9 granted! Place instances of multiple families.
Wish 10 granted! Material replacement.

Update 7/27/2015 PM to include the after party.
Leftover – know your StorageType.

And one wish that was not grantable.

To put Harry to work for you, er... I mean, to express your own RTC NA 2015 Revit API wish, leave a comment to this post on Boost Your BIM.

Great job Harry!

RTC 2014 EUR – Boost Your BIM's Harry Mattison Granted Revit API Wishes

From the Boost Your BIM website:

#RTCEUR Wish 3: Scheduling adaptive point location values

Brian asked how to schedule the location value for placement points in adaptive components.

In a post at I showed how user-defined parameters can be automatically updated with XYZ values of adaptive component points.

If instead what you’d like to do is schedule point parameters such as Measurement Type, Chord Length, and Measure From, the workflow could be something like this:

  1. Create user parameters for each point for each of these parameters
    1. Measurement Type 1
    2. Point Location 1
    3. Measurement Type 2
    4. Point Location 2
    5. etc
  2. Use the API to set these values for every family instance
  3. Use dynamic model update to:
    1. automatically update these user parameters any time the reference point parameters change
    2. automatically update the reference point parameters any time the user parameters change

This code does step 2 listed above. The approach for Step 3 is covered in the post linked above.

You will note that the Measurement Type is stored internally as an integer and we need to convert from that integer to the corresponding string (Chord Length, Segment Length…) so that we can get the length value from the parameter of the same name.

For the source code, see this article

RTC 2014 NA – Boost Your BIM's Harry Mattison Granted Revit API Wishes

From the Boost Your BIM website:

#RTCNA Wish 6: Save all groups to file

In response to a tweet asking to save all groups, I responded that there is no API for Save Group. That’s true, but all hope is not lost.

This video shows how the API can be used to generate a text file listing all model groups. Then this text file is used as input to a journal file that saves each group to its own file.

For the source code, see this article

#RTCNA Wish 5: Delete (almost) all revisions

Scott sent a tweet about deleting all revisions from a project. The tricky part is that, just like how the UI grays out the Delete button when there is only one revision in the project, we can’t use the API to delete the last revision.

For the source code, see this article

#RTNCA Wish 4: Dimension creation

Last night at the API Open House, we talked about the power and limitations of the Dimensions API.

This example shows how to create dimensions that reference two parallel faces. The video shows running the command in a locked 3D view and selecting the end faces of beams. It is also necessary to set the view’s workplane so that the direction of the dimension lies in this plane.

More automated creation of these dimensions could be achieved by programatically getting the faces from the beams so that the user need only select the beam instead of the 3 faces shown in this sample.

For the source code, see this article

#RTCNA Wish 3: Copy rooms from one phase to another

Matt and some others asked how to “Copy All Rooms/Spaces to all phases in project”. This example shows how we can specify a “source phase” and create new rooms for each of those rooms in a “target phase”.

For the source code, see this article

AU2013 – Boost Your BIM's Harry Mattison Granted Revit API Wishes

From the Boost Your BIM website:

#AU2013 Wish granted – Delete topo points in elevation range

Kelly asked “Is it possible to delete points within a range of elevation values?”


For the source code, see this article

#AU2013 Wish granted! Convert multiple dimensions into one

Brok asked “Can you via #Revit API combine individual dims into a single string and remove the old dims?”


The tricky part was figuring out how to avoid creating zero-length dimension segments between the references used by adjacent dimensions.

For the source code, see this article

#AU2013 Wish 4 – API-Based Performance Benchmarking

PragmaticPrxs says it would be great to have an API-based performance benchmarking tool.

This macro opens every view in the RVT, does some zoom in/zoom out, and iterates through all display styles.  With the Revit 2014 rac_basic_sample_project.rvt, how long does it take to run on your machine?

For the source code, see this article