Kia ora Dynamo people,
We have been hard at work on the Dynamo 2.12 release, an absolutely massive release introduces a huge swathe of changes, including a few long-asked-for improvements. So massive that we’ve had to split this blog post into two! Come download it, give it a spin and let us know what you think.
TL:DR
Node Autocomplete now has a new UI, works with custom nodes and output ports and has an updated layout algorithm, a reimagined and modern Menu UI, introduction of a Preferences panel to capture all user-defined settings, large improvements to package management, the introduction of graph properties, new OpenXML nodes that mean you don’t need Excel installed, geometry improvements to documentation, memory optimization and fixing long-standing bugs. As usual, there is a whole bunch more so please do check out the release notes!
What is Dynamo and its flavours?
What is Dynamo Core?
Dynamo Core is a collection of bundled components that consist of the graphical interface, the compute engine, the scripting language DesignScript and the out-of-the-box nodes that are not specific to another program like Revit or Civil 3d.
What is Dynamo for <INSERT HOST HERE>?
Dynamo for [Revit, Civil 3d, FormIt, Advance Steel, Robot Structural Analysis, or Alias] is a collection of host specific nodes that work with Dynamo Core and runs inside of said host.
What is Dynamo Sandbox?
Dynamo Sandbox is for package developers and other folks working with Dynamo code who want to stay up to date with the latest and greatest stuff coming out. Sandbox is Dynamo’s “Core” functionality distributed in a way that doesn’t interfere with other Dynamo installations and doesn’t require any other applications (except for a few windows components and some optional extras). You can read more about this distinction here.
Where can I get my hands on <AWESOME NEW FEATURE or IMPROVEMENT>?
At release, you can use all of the following Core content in Dynamo Sandbox and we plan to make Dynamo 2.12 available in our host integrations at a future date.
So, what’s fresh in Dynamo Core 2.12?
Cleaning House
As part of our Dynamo Visual Refresh project (Spoiler alert: We’re modernizing Dynamo’s look, feel and interaction paradigms as we speak…) we wanted to clean up and reorganize the Dynamo Menu: We have removed icons as they were inconsistent and only for certain menu items, created a dedicated Extensions top-level menu item that will become the go-to location for View Extensions, created a dedicated Dynamo top-level menu item that houses the About, Agreement to Collect Usability Data, Preferences and Exit Dynamo, and we have removed all of the Settings menu items and put them into a dedicated Preferences Panel that is the new home for all Dynamo Settings.
The Extensions top-level menu item is currently optional for View Extension authors to add their extensions to, and in future we intent to have this as the default location should you not specify somewhere else for it to live. This means you, dear users, know where to go to see all extended features and content inside of your Dynamo install. Out of the box in Dynamo 2.12 this location will house the Workspace References, Documentation Browser and Graph Properties extensions. If you install TuneUp or Generative Design they will also surface here, and we encourage Extension authors to also add their extensions to this new menu!
- [ 1 ] New
Dynamo
top-level menu that contains the About box, Agreement to Collect Usability Data tickboxes, Exit Dynamo button and the newPreferences Panel
. This one’s a goodie team - [ 2 ] The File top-level menu has been cleaned up, collapsing all
Export
menus into sub-menus, making Dynamo visually easier on the eye - [ 3 ] The View top-level menu no longer houses View Extensions and is thus smaller. Woohoo for simplicity!
- [ 4 ] The Packages top-level menu item no longer houses the Manage Packages dialog, which now finds itself living in the Preferences panel with a bunch of new friends
- [ 5 ] The Help top-level menu item now has
updated text calling out what it is
(i.e. Go to Project Wiki –> Dynamo Project Wiki) and has given away the About box to the Dynamo menu - [ 6 ] New
Extensions
top-level menu that houses all the out-of-the-box View Extensions and will become home for the Extensions of the future, both Dynamo team and user created
Our brand new Preferences Panel is now home to all of Dynamo’s settings, collected under the categories of General, Features, Visual Settings, and Package Manager, with a series of expanding sub-panels, toggles and drop-down selections. When you make changes inside of this dialog, they will save at point of change automatically so you may experience some slowness if changing settings that kick off a graph re-run, such as Geometry Scaling. It’s also pretty smooth, sporting a modern look and swanky new interaction paradigms. Fancy!
The Preferences Panel is the first major piece of work inside our Visual Refresh project, aimed at lowering the barrier to entry and making it easier for you and your colleagues to find success (and things!) in Dynamo. It is now your one-stop-shop for all user settings – so come hang out, have a look and tell us what you think. Expect the Preferences dialog to grow in the future as new features are added to Dynamo. Among all the cool settings you know and love, a few have been added or amended as below:
- [ 7 ] A new
Node Font Size
stub menu item is integrated, currently in read-only mode. A future release will allow the user to control the font size on nodes to help with aging eyes, or give you back screen real-estate! - [ 9 ] A new
Language
setting will pull from the host integration as a read-only mode. Future releases will enable the user to change this should the host allow it. - [ 8 ] The existing, but under-utilized
Show Run Preview
toggle will, in Manual mode only, show you which nodes need to get re-executed in your graph when you make changes by highlighting those nodes in orange. This is a direct representation of delta-compute: What nodes will run through the Dynamo Virtual Machine to be re-executed are orange, and which other nodes which have not changed will not and simply return that same value at graph execution. - [ 10 ]
Node Autocomplete
is still in Experimental mode, meaning we’re not quite done with it yet and things can change as we settle them. What is cool though is there is a brand new link to documentation on Node Autocomplete! Click the question mark icon to get there and have a read to sate your knowledge hunger. Read more about this in the Node Autocomplete section of this blog post. - [ 11 ] A new
Reset CPython
button has been added that enables you to reset the CPython engine. Read more about this in the Python section of this blog post!
A major improvement has been made to how you Manage Packages, which now finds a home in the Preferences Panel! A dedicated Package Manager sub-panel houses all the package management related settings as your one-stop-shop. There are two expanders that live here, the Node and Package Paths
expander and the Installed Packages
expander. Both have undergone a tune up, paint job and paradigm modernization. So let’s take a journey into the realm of package management and how you can micro-manage all of the awesomeness that Dynamo package have to offer.
Under the Node and Package Paths
expander, there is a New Package Download Directory that is a read-only dropdown of locations from your Package Paths list and, as it says on the box, will simply be your package download location when you find a cool package on the Package Manager and download it for you to test drive. The Package/Library Search Paths section contains the default package location, in the %AppData% location, and this fancy new thing called Dynamo Built-In Packages. We’ll cover this in depth in future, but suffice it to say that we’re looking at ways to ship functionality as a package that enables us to better serve epic content to you, such as better Mesh support.
All three of these default paths cannot be deleted, but they can be modified up and down. This is really important as it’s a way for you to control which packages load first in instances where you have multiple package locations
. This gives us the control to have things in the Built-In Packages file path that need to load first as a dependency of other things, but also you the control choose not to have that happen! It means you can also have multiple versions of the same package downloaded to different locations and Dynamo will only load the first one that it finds. Might not sound like much too many of you, but this is a game changer for people who manage things centrally! You will still get a conflict message, but you will also be able to actually have the package load. Pure class.
- [ 12 ] Use the
New Package Download Directory
dropdown to select where you want to have your packages download to. It is a read-only dropdown that enables selection from the default %AppData% path, to any of your user input options - [ 13 ] The
Add Paths
button enables you to add paths to where Dynamo will look for package content. You can choose a central location, link direct to .DLL’s on your system and a bunch of other funky things - [ 14 ] Dynamo now comes with
three default paths
, all read-only and uneditable. The Dynamo Built-In Packages will be a location for out-of-the-box content, enabling us to ship content easier to you. Work is actively in play around using this. Think things like MeshToolkit (A mesh library from the Dynamo team) living here in the not to distant future. Waahoo for more stuff native! The two other locations of ProgramData and AppData Dynamo has used forever, with AppData being the download default location for package content - [ 15 ]
Arrow buttons
enable you to modify the respective location of each of these locations. This is important as the higher ranking on this list means that Dynamo will first look there for packages and try to load them. So if you have two different versions of a package (i.e. a conflict situation) you can control the package loading order to first load dependencies - [ 16 ] Any non default paths will also live in this list, but will allow you to
Modify or Delete their path
- [ 17 ] Packages are demarcated by the
Package Name
, ranked alphabetically - [ 18 ] The package
version number
is also shown at the top level, easily enabling you to check what version you have installed - [ 19 ] The
Context Menu
gives you all options available to you as a package consumer, or package author - [ 20 ]
Verbose package contents
are explored via the chevron expander, showing things like Additional Libraries and Additional Files
We have also added documentation around Publishing a Package, accessible via the question mark icon in the publish dialog window. This covers all of the fields you interact with, covering both the mandatory and optional fields – explaining what they are and how to engage with them.
Node additions and improvements
Introducing two brand new nodes, the Data.OpenXMLImportExcel (An alternative to Data.ImportExcel) and Data.OpenXMLExportExcel (An alternative to Data.ExportToExcel). These two nodes level the playing field by allowing any user to interact with .XLSX data, regardless of whether or not they have Excel installed on their machine, and will allow you to get around compatibility issues should other users in your office or on your project, have set-ups that don’t match. These two nodes will return useful information when run in the form of a True or False, and have new sample files created for them. Pretty big stuff for seamless interop!
And for the frustrated If node users the long wait is over! For those of you who participated in the [Request for Feedback] If Node thread, thank you. You actively helped us get to a revamped and improved If Node while still catering to existing behavior, but now has additional lacing support and behavioural improvements. We now support the full gamut of capabilities; Input lists of varying length, lacing, List@Level, and correct Empty Lists and Null value parsing. This means the If node will no longer truncate the lengths of list inputs that has long been a sense of confusion, behaving correctly in some instances and not correctly in others. We have also added a warning message to existing If nodes, informing you in product and giving you the option of replacing the If node to gain access to this new functionality.
We took our time on this one as it’s a seminal node in Dynamo – something that almost all of you have touched, or will touch in your Dynamo journey. It enables you to curate data flow through your graph should certain conditions be met, and we wanted to do it justice.
- [ 21 ]
Warning
that will show on existing If Nodes when you open up a graph in Dynamo 2.12 and onwards, explaining how to get access to the new node. All new If Nodes placed will exhibit the new behavior - [ 22 ] Existing If Node
was inconsistent
, resulting in some strange behavior. This example shows a mishmash of both the True and False list, even though as a user you would only want to return the False list in it’s entirety - [ 23 ] Among many other new awesome things, the
new If Node
corrects this mishmash. Hurrah for all conditional graph builders!
We have also updated the output of the CopyFile node to now return a success or failure message, rather than simply null. This also takes into account a DestinationPath validation meaning Dynamo will tell you can’t copy things to places that don’t exist, or that you do not have permissions to… Previously it simply failed and also failed to give you a message that it failed. Big, err, failure on our part there. We have also improved the description of the List.IndexOf node to reduce confusion on usage. This node requires a hard match, object type to object type, and presented a description that alluded to a different way of working.
Geometry fixes and behavioral changes
We have foundationally improved all geometry nodes, improving their performance and their optimizing memory for the render pipeline. Point and curve tessellation have a linear speed and memory improvement, but mesh improvement is dramatic, so expect to see much better interaction with geometry from 2.12 and beyond! We had gains such as a 2x - 5x speed boost
, and a memory allocation of half as much
, also enabling massive workflows to no longer crash.
Mesh test cases:
# Meshes | Now (s) | Memory Allocation | Before (s) | Memory Allocation |
---|---|---|---|---|
~10000 | 7.95s | 334mb | 17.12s | 668mb |
~30000 | 17s | 1.1gb | 86s | 2.1gb |
~68000 | 38s | 2.6gb | Crash | NA |
All intersection and point projection workflows now correctly work with Plane geometry which is now fully treated as infinite geometry. For those of you working in large, civil scale workflows this now means nodes such as Point.Project and Geometry.Intersect with planes should return correct results.
We have also improved the description of all Geometry nodes, akin to the other out-of-the-box node description improvements made in Dynamo 2.10 and Dynamo 2.11, and have fixed a bug with the Sweep operation when using a PolyCurve as the sweep path.
This blog is Part 1/2 of a two part blog series covering the Dynamo Core 2.12 release, so please continue to read all about it in Part 2/2.