Sunday, December 6, 2015

Updates You May Have Missed

With my new business keeping me busy, I haven't had as much time as I would like to keep as up to date as I would like. Make no mistake, I am still very much committed to keeping this blog going and sharing some of my more recent computational design explorations.  If you have been following any of my social media accounts, you may have noticed that there have been several updates to LunchBox, Rhynamo, and other tools making their way out into the wild.

Here is a summary of what you may have missed in recent months...

Playing Nice with JSON

In both LunchBox for Dynamo AND Grasshopper, the LunchBox toolkit now has several new nodes converting between JSON, XML, datasets, and more.  I like being able to convert my data between various formats with ease and these new tools hopefully make this easier

Serialize Dynamo data as JSON
Grasshopper Tree to XML and converted to JSON

Extended Excel Tools in Dynamo

Grasshopper and Dynamo both have some great solutions for working with Excel.  Within Dynamo, I created a few helpful nodes for serializing Excel data to .NET DataTables.  These nodes make it easy to serialize your tables so they can be queried like a database or converted to other formats like XML and JSON.
New LunchBox Excel nodes for Dynamo
Dynamo 0.9 Support

Rhynamo and LunchBox have been upgraded to the latest version of Dynamo (0.9) and have been given some general facelift for use with new versions.

Thursday, July 9, 2015

LunchBox for Grasshopper Returns!

I am pleased to announced that a new version of LunchBox for Grasshopper has been released as a free download in the new website. It has been over a year since the last update and there are many new components and improvements in this new release. Features of interest include….

  • Data components allow users to translate their data to XML, JSON, and CSV. 
  • Sort Duplicate components allow users to better organize their data. 
  • User Strings are now supported with “Object Bake” and “Layer Geometry” 
  • Unroll Surface has been introduced as a new component.
Unroll Breps!
XML Serialization of DataSets
Referencing geometry by layer with User Strings
Sort Duplicate components let you find unique values with a sorted index map.

Monday, July 6, 2015

A New Proving Ground

Greetings friends,

It has been over 8 years since I started, in 2007.  It began as a journal for exploring the intersection of design and technology.  From there it grew into a venue to showcase new processes and tools to help in the design workflow.  I feel very fortunate to have earned a social following through these efforts in the design and building communities.  Along the way, I have learned more than a few things about how buildings are designed, built, and operated.

Today, we have increasingly more sophisticated modeling tools, more accurate analysis, and a lot more data at our disposal. However, buildings remain risky, expensive, and time-consuming endeavors.  Nearly 70% of buildings run over schedule and 72% are over budget.  26% of non-industrial waste can be attributed to building-related construction.  39% of all carbon emissions and 72% of electricity consumption comes from buildings.

Can data help us to move the needle on these statistics?  Perhaps.  However, it is no secret just how risk averse the building industry is when adopting change.  Creating a building carries a high price tag and high liability. The stiff competition in design and rising cost of construction materials will often deter introducing any anxiety of change and potentially 'looking bad'.  Instead of the disruptive change offered by data-driven technology, building teams are far more likely to look for faster, more powerful versions of the same paradigm already in place.

We need buildings.  We need well designed buildings.  More than ever, we need buildings to perform.  To achieve solutions to the challenges facing our built environment, I believe we need to strive to position data as a disruptive medium that can change how we make design decisions, transform how we build, and create new opportunities to manage and interact with space.

I am pleased to announce the formation of PROVING GROUND LLC.

As a consulting company, PROVING GROUND's mission is to shape a data-driven building industry through new services for strategy, education, and consulting.  I am interested in seeing the building industry realize the promise of data with new processes and behaviors... with some new tools sprinkled in along the way, of course.

I am very excited to start this journey and I am looking forward to sharing what comes next... 


Nathan Miller, Founder

Contact Proving Ground

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  

Friday, March 6, 2015

Rhynamo and LunchBox Updates

LunchBox element collectors now have toggle inputs to better control updates with Revit.
The end of the winter is near (I hope!)... I've already started my spring cleaning by addressing some new features and enhancements to LunchBox and Rhynamo.  This past week, new versions of both Dynamo packages have been published to the package manager.  Be sure to check them out!

  • Toggle inputs for all element collection nodes.  This allows the user to turn off collection and also force a refresh to the node if there is a change to the Revit model
  • MEP Space collection
  • New outputs for various collection nodes.

User String and Dictionary nodes let us read custom user data that is assigned to Rhino geometry.
An example of round tripping Rhino geometry and assigning Revit properties as User Data.

A new node for getting text object data from Rhino.

Saturday, January 31, 2015

Rhynamo - Refactored and Data-centric

The new version of Rhynamo exposes new data from 3DM files 
There is much more to Rhino files than NURBS geometry.  This latest release of Rhynamo extends the users ability to access different data and objects within a Rhino file from Dynamo... from general file information, to layers, or materials.  Geometry conversions will also return other important information about the object including GUIDs, layers, colors, and names.

In order to better develop this new functionality, the Rhynamo library has been refactored Rhynamo's for better organization... this will almost certainly break existing definitions that use older versions, but this is an important evolutionary step for this tool.  Older versions are still downloadable on the package manager for legacy use.

Visit the Rhynamo source to get the latest...
Geometry converters also return information about object GUIDs, names, layers, and colors.
Materials, layers, linetypes, hatch patterns, and camera view data is now available.

Friday, January 2, 2015

Parametric Forms for Dynamo with LunchBox

I have had a long standing fondness for parametric forms and surfaces that I thought it was about time I re-introduced some of them into the LunchBox package for Dynamo.  The Grasshopper plug-in already had many of them implemented so it was a matter of migrating some of the code to the Python nodes.  Dynamo is a bit touchy with self-intersecting surfaces and there is currently no way to establish "preset" parameter inputs for a node.  With that in mind, I have also included a few sample definitions in the latest package so you can check out some of the parameters.

Have fun.... oh and Happy New Year!