Kia ora everyone,
As we close in on the year end festivities, and move swiftly towards the new year we are happy to announce our final release of 2020, Dynamo 2.10, which is the release that is now available for host integrators. It is a little smaller in nature, but still packs a reasonable punch so read on!
TL:DR
We have made a bunch of improvements to the Node Autocomplete UI and suggestion mechanism, with some hardcoded results in the short-term, dramatically improved the usefulness of extensions as they are now able to pop-out and pop-in to the sidebar panel and honor a users location choice between sessions, introduced new seed valued nodes to the random class, fixed long-standing curve.offset and list.shuffle bugs, and finally suppress erroneous Revit .dll notifications. 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, 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.
So, what’s new with Dynamo 2.10?
Node Autocomplete Improvements
Following on from the debut of our Node Autocomplete MVP (Minimal Viable Product – basically the smallest set of stuff we can include to get some valid feedback on!) in Dynamo 2.9 we have been hard at work making improvements as we start to move into Node Autocomplete Phase 2: Where we enable output port support, begin testing in host environments such as Revit, improve the node hierarchy and overall search feature, and add in multi-port support.
As a recap on Node Autocomplete, our new experimental feature in Dynamo, which is being introduced to lower the barrier to entry for new users as well as help advance users construct dynamo workflows faster. In both cases, it should increase the fidelity of graphs created (No more errors for plugging in non-viable nodes) and speed at which you can work. To access this feature, you will need to navigate to the following:
-
Settings -> Experimental Menu -> Enable Node Autocomplete
We’re looking to foundationally set up Node Autocomplete first before we dive deeper into the host integration side (i.e. Revit) so that all of our existing hosts benefit, as well as any future ones! Expect to see improvements to this feature over the next few releases. As you get the overall flavour of Node Autocomplete with the MVP, enough that if there is anything you want to add to the conversation for Phase 2, we are asking for feedback; does it work how you think it should? What can we improve? What do you love? What doesn’t quite do it for you? Please come have your say in our Request for Feedback forum post as we would absolutely love to hear your feedback and hear your 2 cents (Or 5 cents, because, you know…. inflation and stuff!).
For Dynamo 2.10, we have improved the ability for Node Autocomplete to correctly place the pop-up search bar, better enable you to search through the results and have added in a short-term list of hardcoded suggestions for primitive types; we will release these hardcoded sets in a future improvement as we land on a more accurate and useful hierarchical ranking of node suggestions.
- [ 1 ] Pop-up now aligned consistently horizontally with small gap between Node Autocomplete window and triggering port
- [ 2 ] Node Autocomplete window centrally aligned vertically with triggering port
- [ 3 ] Input ports that require a
boolean input
now defaults to Boolean only - [ 4 ] Input ports that require a
string input
now defaults to String only - [ 5 ] Input ports that require a
number input
now defaults to both Integer and Number Sliders
Sidebar Panel Extension Improvements
Continuing to improve the Sidebar Extension Panel, we now allow ViewExtensions to be docked and undocked from the sidebar. Not only can you now choose to have either floating, or non-floating windows across any supported screens (Hurrah for those of us who use multiple monitors!), they will also remember their windowed or docked state and position, which means Dynamo is now a little bit fancier and allows you to have a properOfficialFancySetup(tm)!
Extension Developers looking to create new awesome extensions, and those of you who have already done so will also be happy to note that we have added a new base class for ViewExtensions, ViewExtensionBase
which adds a Closed
hook, enabling Dynamo to react when your extension’s view is closed.
- [ 1 ] A
pop-out toggle
located on the Sidebar panel tabular extension bar - [ 2 ] Extensions will now be able to be popped out and will stick to their last location between Dynamo sessions
- [ 3 ] A
pop-in toggle
is located in the header bar of a popped-out ViewExtension
Node Additions and Salient Bug Fixes
We have introduce a few new nodes, aiming to both increase your potential (Especially in reproducible pseudo-random cases such as for Generative Design) and streamline your graph creation (Less nodes for the same result = winning), and added in a couple of salient bug fixes that have long perplexed the community!
The AnyTrue
and AnyFalse
nodes are a little easier to use than the function passing TrueForAny or FalseForAny nodes that require a predicate (Function) to use… rather difficult for newer users! So, these nodes allow you to pass in any list of booleans and it will aggregate up a single result of true or false if they are contained within that sublist. This was achievable in the past using multiple nodes, but we feel a simplified approach is a much better and swifter way to get to the results you need.
Now, noting that explaining this in textual form is worth 1000x less than the picture based format, we can illustrate this inside of imagery: rock on visually inclined folk!
We have also introduced new random nodes with seed values; List.Shuffle
, two versions of Math.Random
, and Math.RandomList
.
All of the existing nodes still exist for your use in case where true randomness is desired, and new replicated versions with a seed value (Two in the case of Math.Random) input enable you to create pseudo-random results that are reproducible when you are looking to generate options with a modicum of control. An example of Math.RandomList shows how these nodes will return results in both the existing and new cases.
We have also fixed a long-standing bug with the List.Shuffle node, where as if you feed in some data to it (Namely numbers) and tried to run multiple List.Shuffle nodes from a single number output, you would consistently get the same results. This was due to the underlying C# technology for shuffling using the .NET framework, which in turn derived its default seed value from the system clock. What this means in practical terms is that:
- If you had 2x List.Shuffle nodes coming out of the same output port of a set of data, they would shuffle in the exact same way
- If you had a node in between this data-set (Even just a passthrough node such as object.identity) then the shuffle would be different as the execution time based on the finite resolution of the system clock was different
- If you worked in automatic mode and placed one List.Shuffle then either placed a second, or copied the first, it would appear different at first glance due to the placing event having a different system clock default seed
- However, when you opened the graph for the first time, due to both nodes executing at the same time (With data flowing from the same output) their previously randomly shuffled results would in fact be the same
As this behavior was unintended and very prone to breaking not only the flow of logic, but the thought pattern of the designer, we thought this beahvior was ripe for fixing. Especially now that we have nodes that can replicate the original behavior for those Dynamo users who were relying upon this exact functionality. We are aware this may potentially be a breaking change but think that the benefits outweigh the costs as to understand the original behavior required a lot of nuance and didn’t provide, for all intents and purposes, consistent results.
We have also fixed some erratic behavior with the Curve.Offset node, which used to seemingly arbitrarily offset curves in either the negative or positive direction, and didn’t allow for consistent workflows without some funky workaround and far too many additional nodes. Note: This won’t break any existing workarounds that utilized the positive and negative offset approaches for closed loops, then pulling the smaller or larger of those offset loops.
Node2Code Improvements
Dynamo 2.10 onwards will now correctly escape strings with back-slashes in them, improving the fidelity of the Node2Code feature. No longer will you see the Red Errors of Doom when using Node2Code on a graph containing any form of path, and will rather get a more elegant Codeblock containing your correctly escaped strings.
Notification Clean-Up
At the request of some long standing Dynamo users (Shout out’s to John Pierson, author of the Rhythm package and Konrad Sobon, author of the Archi-lab package), RevitAPI .dll’s are now excluded from compatibility checks which will reduce notification noise for Dynamo users when consuming packages that was doing more harm than good. You should no longer see unactionable System.IO.FileLoadException messages from the RevitAPI .dlls.
You’ve sold me, so where can I get my hands on Dynamo 2.10?
Dynamo 2.10 will be made available in our host integrations at a future date and can be explored right now through the dynamobuilds.com website or the Github build page – available in the Sandbox version of Dynamo.
If you’re curious, you can also read our ‘Release Notes’
In order to keep a semblance of propriety to this blog post we’ve skipped a few things! For more information on other minor features, bug fixes, and known issues in Dynamo 2.10, go check out our release notes: this particular set contains a bunch more, including binary changes, bug fixes, API changes and known issues. Well worth a read!
A big shout-out to everyone who contributed to the release and the entire Dynamo community for continuing to support our work. As always, please let us know if you have any feedback or suggestions!
The Dynamo Team