Sunday, September 16, 2012

Interoperable Geometry (Part 3): Surface Forms

...and then there are surfaces.

Reconstructing Rhino surfaces within Revit is a tricky science.  Revit's Conceptual Massing API exposes a number of useful higher-level form creation tools for surfaces and solid geometry which can be used to recreate some types of surfaces.  However, the mathematical representations of Revit surfaces may vary from Rhino's NURBS representation making challenging to produce completely accurate reconstructions of Rhino surfaces using automated native API rebuilding.  Additionally, the construction geometry used to derive the Revit Form (Hermite Splines, for example) are also ripe with their own interoperability challenges.

Much like the Spline example in the previous post, we can use reference points on the original Rhino surface to control the how accurately the Revit Form matches the original NURBS.  The greater the number of  points, the more accurate the construction geometry and the resulting Revit Form will be.

Saturday, September 15, 2012

Interoperable Geometry (Part 2): Spline Control

Simple things matter in the world of 3D modeling and BIM...

For the foreseeable future, designers and engineers will be using a variety of different tools to meet their needs so it is important to understand the fundamental differences in the tools.  Many questions arose from the past post on how to resolve the differences in the spline interpolation algorithms used between Rhino and Revit.

When a user draws an interpolated curve in Rhino, the user specifies the Greville points (or "edit points") to produce a NURBS curve representation.  When a user draw a Spline in Revit (using Curve by Points), Revit will use a Hermite spline interpolation algorithm to draw the curve.  Revit also uses this same Hermite spline algorithm for representing imported splines from programs such as AutoCAD.

The next version of CASE's Import OpenNURBS Add-in implements a technique for producing accurate curve translations between Rhino and Revit.   The importer will let users multiply the number of interpolation points that are used to calculate and draw a Revit Spline curve.  By increasing the number of interpolation points along the Rhino curve, Revit is able to produce matching spline curve geometry with less chance for deviation...

Here is a graphic example of that process...

Saturday, September 8, 2012

Interoperable Geometry (Part 1): Curves

Discussions about interoperability have become extremely pervasive in the computational design and BIM communities. As they rightly should, users expect their software applications to support one another through integrated workflows where information can fluidly pass from one system to the next..  Unfortunately, given the complexity of our industry and its technological infrastructure, we still have a ways to go before we achieve seamless integration between systems and across platforms... but that doesn't mean we should give up!

Which brings me to geometry....

Being in the midst of developing the next release of CASE's Import OpenNURBS Add-in for Revit (which will include broader curve and surface support through conceptual massing), I thought it would be helpful to contextualize that effort by providing some short infographics which explain specific geometry challenges across the Rhino and Revit platforms.

Even at the lowest levels of representation, the two systems handle geometry differently which makes it especially challenging to ensure correct and reliable translation.  The graphic below shows a comparison of NURBS and Interpolated curves created in Rhino and Revit which share the same control points and weights.  The variations in how the two systems compute the curves are made obvious by the deviations...  Even NURB Splines are translated with variations.

UPDATE 1 - Interpolation Algorithms:  I just wanted to clarify that I attribute these variations due to a difference in spline and interpolation algorithms.  Architectural Geometry (Pottmann et al) has a nice section on Freeform curves with a nice diagram showing different interpolation algorithms.

UPDATE 2 - NURBS Splines and Knots:  After some further investigation into the NURB Spline, the variation in curvature is due to a difference in how knots are computed in Rhino and Revit.  According to the SDK, Revit determines knots based on NumberOfControlPoints + Degree + 1.  Rhino, on the other hand, uses NumberOfControlPoints + Degree -1.  This means that there is a difference of 2 knot values between the tools. For accurate results, an interoperability method must also account for this variation.

Thanks, Matt Jezyk and the Autodesk team for confirming some of these technical differences!