Friday, April 24, 2015

Integrating XML with Dynamo via LunchBox

New LunchBox nodes for XML creation and importing
In the latest released of LunchBox for Dynamo, I have included new XML nodes that allow exporting and parsing.  Dynamo data can be serialized and saved to XML with the help of the new DataSet nodes included in Dynamo.  XML data can also be imported and parsed.

New nodes include...
  • SerializeXML - Create new XML from a DataSet and save it.
  • DeserializeXML - Converts XML nodes and values to a Dynamo nested list.
  • GetXMLNode - Get the contents of an XML node by tag name.
GetXMLNode allows for quick parsing of XML data using tag names
Deserialize XML into Dynamo lists for tags and values
Serialize XML data with the help fo LunchBox DataSet nodes

Wednesday, April 15, 2015

Back to 'Basics' with LunchBox and Dynamo

Divide a surface to get points, normals, planes, and curvature.
With the rapid expansion of Dynamo, it is easy to overlook the fact that there are still many "smaller" refinements that can be made to improve the workflow.  This is especially true of the cases of list management and basic geometry tasks.

In the latest release of LunchBox, my goal is to expand the basic list and geometry management capabilities of Dynamo. The latest release introduces new nodes for searching, sorting, and organizing list data.  I have also created geometry nodes that provide shortcuts for getting access to properties and enable workflows that I have grown accustomed to from Grasshopper.

This new release also signals the start of a lengthier migration:  I will be converting most of my Python code to a C# node library.  The advantages of doing this are numerous when it comes to how C# libraries handle list management.  I have had to develop many workarounds in my Python nodes and the custom nodes have become a chore to maintain.  Python nodes will be migrated to the "Archive" category as new C# nodes take their place.

So what's new?

My goal with these nodes is to provide some new means of managing data and fill in a few holes.  I'm also interested in how Dictionaries and DataSets can create advanced data management workflows... these are just the start
Sort and index duplicate strings... I use this for everything :)
  • Manage
    • Remove Nulls - Removes all null values from a list (converted from Python version)
    • Replace Nulls - Replaces all null values in a list
    • Randomize Order - Scramble the order of a list (with index map)
  • Dictionary
    • Create Dictionary - Create a dictionary with keys and values
    • Get Dictionary Keys and Values - Get all keys and values from a dictionary
    • Get Value From Dictionary - Get a value in a dictionary by key
  • DataSets
    • Create DataSet - Create a .NET DataSet
    • Create DataTable - Create a .NET DataTable
    • Get Tables From DataSet - Get all tables from a DataSet
    • Get Data From Tables - Get data from a table
  • Sequence
    • Random Numbers - List of random numbers using start, end, number, and seed.
    • Range Division - A range of numbers using a division (core Dynamo uses "step")
  • Strings
    • Sort Duplicate Strings - Find unique strings with sorted index map
    • Search List for String - Search for matching strings
The functionality of many of these tools can be achieved with a combination of core Dynamo nodes.  The goal here is to combine outputs I often use into a single node to reduce the amount of canvas management.  There are a couple of new workflows sprinkled throughout.
Deconstruct PolySurface into faces and points
  • Curves
    • End Points - Get start and end points of a curve
    • Divide Curve - with outputs for points, tangents, planes, and parameters.
    • Divide Curve By Distance - with outputs for points, tangents, planes, and parameters.
    • Deconstruct PolyCurve- Get segments and vertex points of a polycurve.
  • Points
    • Deconstruct Point - Get X, Y, and Z values
    • Numbers to Point - Convert a list of 2 or 3 number to a point.
    • Point to Numbers - Convert a point to a list of numbers.
    • String to Point - Convert a string to a point value (converted from Python version)
    • Point to String - Convert a point to a string. (converted from Python)
    • Sort Points Along Curve - Takes a list of points and orders them using a guide curve.
  • Surfaces
    • Divide Surface UV - Divides a surface into points, planes, normals, and calcuated curvature.
    • Deconstruct Surface - Get the edges and corner points of a surface
    • Deconstruct PolySurface - Get the corner points and faces of a polysurface.

Sunday, March 22, 2015

CASE Interoperability Update

CASE's interoperability framework makes important design data accessible among different technologies.
It has been awhile since I have shared an update on CASE interoperability approach.  With new technologies entering into the fray, interoperability is as relevant a concept as ever.  In recent months, much of my focus has been on highlighting efforts around the Rhynamo node library for Dynamo. I am thrilled to see that the library has grown in popularity and is currently the second most downloaded Dynamo package.

In the wake of Rhynamo's success as an open source project, I have been actively continuing development of a broad range of CASE interoperability solutions which allow us to consult and support project-wide and firm-wide data management among a broad spectrum of design software.  In recent months, these solutions have found their way into the workflows of firms such as Adrian Smith+Gordon Gill, AECOM, HDR, DIALOG, and RTKL.

The goal of these solutions has been to address the many data transfer challenges as a building proceeds from concept, to analysis, to document production.  Grasshopper, Revit, RAM Structural System, SketchUp, Microstation, 3DS Max, and SolidWorks are just a sampling of the tools that have found their way into CASE's workflow planning services as of late.

Beyond providing technical tools for accomplishing better data transfer, our approach also involves mapping out key use cases for a team and to support the overall pipeline.

Here are some current use cases that I am interested in at the moment...
  • Integrated practice... uses of interoperability to enhance collaboration among architecture and engineering disciplines for more seamless bi-directional coordination.
  • Analysis workflows.... uses of interoperability as a methodology for model simplification and data extraction in analysis.
  • Datafication and BIM migration... uses of interoperability for migrating legacy drawings/data into the BIM ecosystem.  Let's automate 2D to 3D to BIM!
Stay tuned for an extended and detailed CASE Blog post on these subjects... and always feel free to reach out to us if you are interested in these ideas.

In the mean time, check out some of the recent clips below...

Thursday, March 19, 2015

LunchBox - New Rationalization Nodes and Panel Improvements

"Planarize Points" node will project a collection of points to a common plane.
A new release of LunchBox for Dynamo has been posted to the package manager.

In this release, I made modifications to the paneling nodes so they can better support a range of Dynamo lists and nested lists (no easy task with Python nodes in Dynamo!)  I have also included a few basic "Rationalization" nodes that let you create collections of planar points and rationalize splines into arc segments.

LunchBox is featured heavily in CASE's Dynamo training curriculum.  We are running workshops during the month of April, so be sure to sign up if you are interested!

Using curve parameters to describe co-tangent arcs.
Rationalized spline curves using co-tangent arc segments
Here I am using "planarize points" to define projected flat panels

Sunday, March 15, 2015

University of Nebraska - Computational Design with Dynamo & Revit

UNL - Computational Design with Dynamo.  A 3-session 'mini-course'
This spring semester, I taught a 3-session mini-course at UNL focused on computational design with Dynamo and Revit.  Like the professional workshops I instruct at CASE, I focused this academic course on a real-world design study:  the design of a parametric tower.  The course started with an overview of  concepts related to data management and geometry creation.  We then proceeded to explore the connections between Dynamo and Revit including element creation and parameter control.  The course concluded with an overview of advanced data management concepts with Excel and interoperability with Rhynamo.

Towers provide a nice framework for communicating parametric concepts.  These buildings possess repetitive elements and opportunities for variation.  Towers also allow for clear workflows for how Dynamo's abstract geometry can map to architectural BIM elements and use cases.  For example, an abstract "Number Sequence" can easily be conceptualized as a driver for building Levels.  Curves can be mapped to floor boundaries.  And so on...

I also like how the tower typology allows students to explore ideas with Dynamo.  In the class, a few basic workflows were introduced and the students could then develop these concepts into their own design ideas.  This makes the class less about 'training' and more about being a design 'workshop'.  I have found this to greatly improve knowledge retention and keep classes engaged.... especially with architects.

If you are interested in these kinds of workshops for professionals, here are some links you might find to be of interest:

Here is some of the output from the class...

Student: Salem Topalovic  
Student: Alec Eastman  
Student: Leul Yoseph  
Student: Michelle McCullough  
Student: Sarah Hitchcock  
Student: Xiaoyu Wu