Wednesday, December 22, 2010

Surfacing With Planar Polygons

The last project in the Digital Fabrication course at U of M was to panel a surface. Out team choose planar polygons as the method. The team was myself, Bob Bradfield, Bruce Findling, and Clay Montgomery.

Here's the surface that we paneled. To get an idea of scale the gray base is 60"x24".

Here are a few photos of the resulting surface paneled in 24 gauge steel:

Each piece is a tabbed, water jet cut polygon. The under side was left to rust. The upper surface has been sanded to a bright finish:

The tabs are perforated where they meet the polygon to allow easy folding. This makes interesting patterns along the edges:

 Each polygon is spot-welded to the tabs of its neighbors.

This section discusses the technique used to generate the polygons and prepare them for fabrication. The entire process was generated using code written in RhinoScript (essentially Visual Basic for Rhino).

The first part of the algorithm is to generate a single polygon. This is accomplished one vertex at a time. The user chooses a surface to panel and enters the number of sides for the polygons. They also enter a maximum allowable deviation from the surface. That is, what is the maximum amount that the planar polygon is allowed to rise above or fall below the curved surface.
To get a vertex the code steps along a straight line on the surface and measures the distance along the way. As soon as the distance from the surface is exceeded that point is fixed.

Doing this through 360 degrees generates a planar polygon with the specified number of sides. In this case the polygon is fairly symmetric because it was chosen in an area of relatively uniform curvature. 

Next, we need to generate more polygons. This is done by projecting out from the center of the original polygon through the midpoint of each edge. The user can specify the amount as a ration of the polygon radius. From the projected point a new polygon is generated.

This is done through each edge of the source polygon. And here's the result. You can't build that!

So the code checks for intersections with other polygons. It won't generate points inside another polygon and also snaps to the edges of existing ones.

The propagation continues in this manner. Note that the polygons are also clamped to keep them relatively uniform - you can see this as some of the points lie outside of the actual polygon that was generated. 

With the points not shown the paneling looks like this:

Sample Surfaces
Here are a few sample surfaces:

Merge Panels
The next step is to merge the panels so they are pulled tightly together. The step iterates over every vertex of every polygon and compares it to the other vertices. It moves the vertex a portion of the way closer to the nearest vertex. It does this a user specified number of times. You can see that number listed in the diagram below. By the 25th iteration the polygons are merged closer together to prevent overlap and give more area for welding adjacent polygons. 

Remove Coincident and Collinear Points
The next operation is to remove extra vertices which are coincident or nearly so. Also removed are verts which are colinear or nearly so. This is done so wider tabs are generated. 

Generating Tabs
The next step is to generate the tabs on the sides of the polygon which allows them to be connected to one another. They are generated using an offset surface. 

 The surface is offset more towards the center of the span and less at the edges:

The technique starts by finding the closest point on the surface to the midpoint of each edge. The vector between the midpoint and the closest point is copied over to the corners of the edge and lengthened. These vectors are then intersected with the surface. The intersection points are shown as yellow dots below:

This is done for each edge of the polygon. The verts are connected by lines which form the bottoms of the planar tabs. However we want to make adjacent tabs match up at their corners.

To do this we calculate the intersection of each edge with the adjacent edge. Of course two lines in space do not necessarily intersect at a point. So we find the closest line segment which connects the lines and then take the midpoint of that line. Those points are shown as green dots below.

Those new corner points are then used as the ends of the tabs. Doing this introduces a very small break from planarity however it is insignificant in practice.

The resulting polygon is shown in yellow. The blue lines indicate the tabs after being rotated into a plane. This closed polygon is then used for fabrication on the water jet. 

Layout for Fabrication
The next step is to generate tabs for every polygon and project them onto the ground plane so they can be cut from the water jet. Here the polygons are shown on each tab:

 These are oriented onto the ground plane and arrayed. Here are the 158 polygons in a 10"x10" grid.

Here's a close-up look at each polygon. The tabs are a single closed polyline. The original planar polygon has been redraw as a perforated line. The water jet cuts these perforations for easier folding. 

Each polygon is group together for easier dragging inside Rhino. This makes it easy to generate the sheets for cutting on the water jet.

Finally, each polygon is numbered on the 3D model. These correspond to the numbers on the sheet to guide fabrication.
Fabrication begins by cutting sheets of 24 gauge steel on the abrasive watejet cutter. The parts are then cut from the sheets with a dremel tool and organized into piles of 10 polygons, 0-9, 10-19, etc. 

This is the first polygon generated by the code. It is nearly symmetrical because it was unaffected by intersection with other polygons and was positioned on a portion of the surface with nearly uniform curvature. 

Here's the spot welder used to attach the polygons together: 

Wooden forms were used to aide in the shaping the curvature of the span as well as where the form meets the ground. 

Friday, November 12, 2010

Molded Panel Sculpture

The basis of the panel design is a octagon, with rounded edges. Curves were drawn as edges for the surface contours:

Here surfaces have been applied and the edges of the extruded base shape trimmed:

This is a plan view of the resulting form of a single panel. This is prior to deformation by the Rhino Paneling Tools

The form the panels are applied to began as a simple revolved curve. The Paneling Tools generate a grid of points which govern how the panels are deformed to fit. You can see those points below:

Here is the form as generated on the cylinder by the Paneling Tools: 

Because of the symmetry of the form this is composed of only two different panel distortions. These are then hand edited in Rhino to create tabs to join them to the adjacent panel.

A file was generated to load into MasterCAM to drive the 3D contouring of the form. The green lines shown are the edges of the MDF. Two sheets were laminated to give a 1-1/2" thickness.

The molds were cut on the CNC router from "Plum Creek" MDF:

These were then vacuum formed using 1/32" thick PETG plastic:

 Here's a single molded panel. At the top of the image you can see the stack of 16"x16" panels:

Each piece had to be cut out by hand. PETG PITA! With more time we should have devised a way to cut them on the router itself. 

Here are the sections clamped together during assembly:

Here's the final sculpture - it stands 30" high: