Monday, August 24, 2015

Multiple Hi Res Screen Shots

Update: Script now takes layer states into consideration when taking screen shots. For example, if the model has 2 named views and 5 options saved as layer states, this script will pull a total of 10 screenies.

Rhino has a command called ViewCapturetoFile that allows for screen captures. Better yet, the dashed version of the command ("-ViewCapturetoFile") allows for custom resolution captures. I was able to extract 16000 x 16000 pixel image files (haven't tested higher)!

Still, it is annoying to individually captures your saved views, so I've created a script back in 2011 (recently updated):

This is a simple script that runs through ALL of your named views at your chosen dimensions, and saves them to a folder of your choosing. 

Saturday, July 18, 2015

FaceMe for Rhino

I don't know why but Rhino still doesn't have a feature similar to sketchup's FaceMe. By using only a billboard image instead of a heavy 3d model, FaceMe is one reason why sketchup scenes can be so light weight. Years ago I made a rhinoscript to accomodate this, but recently I adapted it to grasshopper so that it can be more controllable.

Simply stated, this is a grasshopper script that reorients the billboards to face an attractor point. I've also attached some jitter commands to create some variation. Then bake the new billboards and delete the initial surfaces. In the future, some vb/c# work can link the attractor to the camera location. 

Note that for now, all billboards textures must be assigned by layer and differently billboard images need to be grouped and baked separately.

Typical billboards


Move Jitter

Rotate All Billboards

Rotate Jitter

Combined Effects


I was dressing up an exterior scene that required a number of different plants. I created various 3d blocks of these plantings (made up of two vertical PictureFrames at 90 degrees from each other), but soon became confused of which was which, and how tall plant was. So I wrote a quick script to label each block with its name and current Z height at its origin. 

I've always liked the ability of TextDots in rhino, as they can be very useful in communicating obscure information quickly. This script can be modified to quickly show which layer, scale, and rotation of the block, as well as texture information inside the block.

Sunday, July 12, 2015

Tracking Movement: Circular Lofts

Building off of the previous circular loft script, I created a tracker that traced the location of a series of points over time. As a form twirls across the screen, the series traced points form curves, and are lofted into graceful forms.

I'm using the recorder to track points, and feeding the points into an interpolated curve. Works surprisingly well! Right now there is only a rotate transform, but I did play around with a move transformation (x,y) as well. I'm still trying to figure out what I can do with these extrusions:

 I then isolated the move transform to the x dimension only, and I got some interesting script-like curves. As the resulting traces are highly dependent on the initial loft forms, I feel like there's a lot of potential here.

Friday, July 10, 2015

Creating with Grasshopper: Circular Lofts

I was exploring three point circles when I realized that I could use grasshopper to manipulate lofted circular forms dynamically.

I started with three curves in space, broke them down into smaller segments, used the end points to create 3 point circles, and then lofted them into vase forms. By rotating the original curves, I was able to really create complex forms and transitions. Fun!

Did some iteration studies:


Continued form finding exercise... with a little help from array:

A refinement in array allows me to rotate the form in an array. Could be interesting once I develop enough tools to "animate" this form.

3dm | gh

Clusterizing this array and rotate portion leaves a beautifully simple script.

Friday, July 3, 2015

Exaggerated Ribs

CurvatureGraph provides a nice analytical tool to review curves for kinks. It is also a pretty way to "grow" the curve. I wanted to build off of Jittery Lines with a script that thickens polylines relative to its control points, as CurvatureGraph works for a Curve. It's a common effect (that I'm almost certain there's an existing script for) that I want to explore and build on top of.

To go about this, I've broken the script down into 5 parts:

1. Explode polyline to get line segment vectors
2. Calculate bisecting vectors*
3. Calculate angle and direction of "turn" from original vectors
4. Create offset vectors at the kink points
4a. Create Weighted Offsets based on adjacent vector angles
5. Join these points into new polylines

*Just using bisectors for the offsets will result in "twisted" ribbons. That is why I untwist this by "flipping" the bisector when the line segment goes from clockwise to counterclockwise.

Here's a 2D example running on multiple curves:

I've resolved part 4a by creating three options for weighting how I offset the polylines: by a shift slider (shift about center), an equal slider (grows equally), and by duo sliders.

More forms:

Tuesday, June 23, 2015

Back to Basics

rhino file:

grasshopper .9 file:

Multiple Bakes + Random Color

Sunday, April 12, 2015

Garage Conversion Code Analysis


In my residential backyard I have a garage. Is it possible to convert the garage into a small studio/ apartment? 

It's a tricky question, and here is a basic framework to tackle the issue of garage conversion/extension. An step by step example follows.

  • Garages are used to park cars. Often residential zones are required to have off street parking. In addition, a converted garage will likely add to the parking requirements.
  • Garages are not built as dwelling units. To convert or extend a garage into a second unit, there is typically a permitting process for fire and life safety, electric, and plumbing requirements.
  • Determine zoning use for the lot and  zoning requirements:
    • Second dwelling unit rights, limitations
    • Off street parking requirements
    • Lot Coverage, FAR, setbacks requirements
    • other restrictions
Speak with an official:
  • Keep it simple, be direct and call the city’s planning department to verify your findings.

Real Life Example:

A client wanted to explore the possibility of expanding her house near Almansor Park in Alhambra, Ca. Specifically, she wanted to assess the feasibility to convert her garage into a rental unit or additional living space for family.

Determine Zoning Designation

  • A search for “City of Alhambra CA Zoning Map” brings up a pdf showing the various districts and their zoning designations. In this case, the property falls under R-1.

  • The next step is to understand the zoning requirements for R-1, which are part of the municipal code. Search for “Alhambra CA muni code” brings up an online code viewer. Browse the table of contents to the Zoning chapter. Here it defines R-1 as a one single-family dwelling per lot with the possibility of a second unit (§ 23.16.020, A, J). It mentions right to rent out rooms, but those would be within the existing house.

Determine basic requirements

The next steps will be to look up appropriate legal sections for second dwelling units, off street parking requirements, lot coverage requirements, and building height restrictions and setbacks:

  • Second Units (Chapter 23.57)
    • § 23.57.040  General Regulations state that Second Units are allowed at R1 given that it the property abuts at least one property that is other than R1 and none that bordered open space OS.
    • Since the Almansor Park property does not, it means that no second units are allowed on the property. 
  • Off Street Parking (Chapter 23.52)
    • § 23.52.040  NUMBER OF PARKING SPACES state that for R-1 Zone, 2 covered spaces are required plus one additional parking space for each 750 SF in excess of 2,000 SF. 
    • With this requirement, the client must retain at least two covered parking spaces elsewhere on site. Potential solutions include adding a second story over the garage, or building two covered spaces elsewhere on site.
  • FAR, Lot Coverage, building heights Requirements (Chapter 23.42)
    • § 23.42.020  PROPERTY DEVELOPMENT STANDARDS. This section contains a lot of numbers that define the maximum extent and size that a building can be.  
    • Typically, this section will define FAR (0.35), lot coverage (50% max), lot and building setbacks, building heights (25ft), and accessory building heights (15ft). Here it also defines the minimum dwelling unit size (400 SF for an efficiency unit).


In this example, the client does not have a property that is zoned to allow second units. Therefore, the client will not be able to convert the existing garage into a livable space. Even if the client owned a R-2 or R-3 zoned property, the client would still struggle to provide for the two covered spaces (both R-2 and R-3 have similar requirements). R-2 also has a 15’ feet building height limit for accessory structures, which limits the solution to a garage extension. 

As this research is based on city zoning codes, it is prudent to verify with the city planning department. There may be code addendums, variances, or other special situations that only the city planners are aware of. Lastly, if the client's goal is to increase square footage, the client may consider an addition to the main building.