Hey Dynamo developers! It’s time to give an update on one of the cornerstones of our Dynamo 2.7 release. We are upgrading the rendering library used by Dynamo’s background 3D preview, named Helix, and there are a few things you should know. 

 

Why upgrade? 

For some years now, Dynamo has been shipping the older version 2015 of Helix. That’s not great given we are in 2020 now! The two primary reasons for upgrading are: 

  1. The usual stability and performance improvements you would expect from using a more mature version of the library (Rendering times are noticeably improved).
  2. Enabling new features to be eventually added, like allowing more control of lighting and orientation, saving camera views, etc. Be mindful that these are not on our roadmap yet!

 

Why are you telling me about this upgrade? 

During the upgrade process of Helix we came across a related issue: The way we use Helix is not completely transparent to Dynamo CoreSpecifically, there are a number of classes and functions that expose Helix types either directly or indirectly. In the face of that, we had profound discussions about where we were regarding versioning and backwards compatibility and where we wanted to be.

As a result of those discussions we resolved: 

  1. We would deliver the upgrade of Helix in a minor release of Dynamo, even though technically some changes could be considered to break the existing rendering API which means, in this case, we do not technically adhere to Semantic Versioning. 
  2. Start planning on removing these dependencies from our Core, in order to prevent something like this from happening again. 

 

What do I need to know? 

In case you are developing extensions for Dynamo that use or extend its rendering capabilities, you should be aware of what APIs are changing or being obsoleted with the upgrade to Dynamo 2.7. 

If you are developing C# ZeroTouch nodes that render custom geometry into the geometry preview using the IGraphicItem interface, there should be no changes necessary.

We think it will be rare for these changes to impact Extension authors, but it may happen if your extension uses one of the following members in the DynamoCoreWPF binary or you referenced Helix or SharpDX directly.

 

The following two lists describe each case: 

[lgc_column grid=”50″ tablet_grid=”50″ mobile_grid=”100″ last=”false”]

API breaking changes 

Parameter type changes 

AttachedProperties class 

  1. SetShowSelected method 
  2. GetShowSelected method 
  3. SetHasTransparencyProperty method 
  4. GetHasTransparencyProperty method 
  5. GetIsFrozen method 
  6. SetIsFrozen method 
  7. SetIsolationMode method 
  8. GetIsolationMode method 
  9. SetIsSpecialRenderPackage method 
  10. IsSpecialRenderPackage method 

  

Public method/property removals 

Watch3D namespace 

  1. Public struct DynamoMeshVertex removed 
  2. Public struct DynamoLineVertex removed 
  3. Public struct DynamoPointVertex removed 
  4. Public class DynamoRenderTechniquesManager removed 

  

DynamoGeometryModel3D class 

  1. VertexSizeInBytes public property removed 
  2. Public Attach method removed 
  3. Public Detach method removed 
  4. Public Render method removed 
  5. Public Dispose method removed 

  

DynamoLineGeometryModel3D class 

  1. Public property VertexSizeInBytes removed 
  2. Public method Attach removed 

  

DynamoPointGeometryModel3D class 

  1. Public property VertexSizeInBytes removed 
  2. Public method Attach removed 

  

HelixWatch3DViewModel class 

  1. Public property Model3DDictionaryMutex removed 
  2. Public event Action<Model3D> RequestAttachToScene removed 

  

Function parameter changes 

DynamoEffectsManager class 

  1. Constructor removed param 

  

DynamoGeometryModel3D class 

  1. Constructor removed param 

  

Public property disallowed changes 

HelixWatch3DViewModel class 

  1. Public property WhiteMaterial was made static 
  2. Public property SelectedMaterial was made static 
  3. Public property RenderTechnique updated type 
  4. Public property SceneItems updated type 

  

Public class renaming 

Model3DComparer renamed to Element3DComparer. So are the public methods inside. 

[/lgc_column][lgc_column grid=”50″ tablet_grid=”50″ mobile_grid=”100″ last=”false”]

API obsoletions 

Classes 

  1. AttachedProperties 
  2. DynamoEffectsManager 
  3. DynamoGeometryModel3D 
  4. DynamoLineGeometryModel3D 
  5. DynamoMeshNode 
  6. DynamoPointGeometryModel3D 
  7. Element3DComparer 
  8. HelixRenderPackageFactory 
  9. HelixRenderPackage 
  10. HelixWatch3DViewModel 

 

Methods/properties 

Watch3DView class 

  1. View 

[/lgc_column]

Wrap up 

In case you have questions about these changes or future plans feel free to reach out to us in the forums or GitHub. Thanks for reading and have a good day! 

 

The Dynamo Team