Professional Documents
Culture Documents
Heliotrope
Solar Geometry
for Rhino & Grasshopper
2013 Slate Shingle Studio | All Rights Reserved | 1016 SW Clay St | Portland OR | 97201
User Guide
Version 2.0 BETA
Installation
To install Heliotrope, simply drag and drop the .gha file onto the Grasshopper desktop. Enough said. If
Grasshopper reports that an earlier version exists overwite it.
1. Introduction
Heliotrope provides a suite of geometric solar analysis tools for the Rhino/Grasshopper programming
environment. It includes components to calculate solar vectors and projected geometry for dates, times, and
locations all parametrically controlled by the Grasshopper programming model. Heliotrope is highly accurate,
geometrically precise, and because it uses geometric analysis instead of animations of single point tests, it is fast
and highly usable as an interactive design tool. Use Heliotrope to quickly understand and manipulate alternative
design compositions against multiple solar vectors, to parametrically construct geometry based upon solar paths
across days and seasons, or to create interactive geometry that changes according to the suns position in the sky.
The solar vectors and geometry of Heliotrope may also be integrated with other Grasshopper components, such as
Firefly, to control Arduino microcontrollers using solar positions.
The simple example above generates and displays the solar arc for a single date and a solar vector for a time on that
date, with both date and time parametrically controlled by the model. The program elements are clustered into the
following steps:
1) Compose a Julian Day value for the date of interest using a series of integer inputs for year, month, day,
hour, minute, second and a double value input for time zone offset in hours. Further examples
illustrate the use of sliders or control knobs to actively change the desired solar position.
2) Provide the current location of the model using double values for latitude, longitude (specified in degrees)
3. The Components
Heliotrope 2.0 provides 22 components under the Heliotrope tab on the Grasshopper ribbon broken into 5
groups.
Sun: Calculators for solar position
Shade: Calculators for solar shadow studies
Julian Day: Components for mathematical manipulation of Julian Day values
Rhino: Components for accessing and driving the sun settings on the Rhino model
Util: Utility components useful in solar studies
Inputs:
JDay: Date and time value expressing represented as a JDay data type, a double value,
or a date and time string (defaults to 1/1/2000 00:00:00)
Lat: Latitude in degrees as double; -90...+90; + to north of equator (defaults to 0.0)
Lon: Longitude in degrees as double; -180...+180; + to east of Greenwich (defaults to
0.0)
N:
North vector (defaults to y-axis)
Outputs:
A:
E:
SV:
Sunset
Solar Noon
Sunrise
Sunrise, Solar Noon and Sunset: Each of these modules calculates the solar vector
and time of the respective event. Input values are identical to those used by the general
Solar Calculator component, however, only the date portion of the input JDay value is
used to identify the date of calculation.
Rise, Noon, Set: Julian Day value of the time of respective solar events.
All other output values: same as Solar Calculator above.
Solar Day Events: This component calculates Sunrise, Sunset and Solar noon times and
the solar arc through the three events.
Rise, Noon, Set: Julian Day value of the time of respective solar events.
Arc: Unit scale Rhino arc curve representing the solar path on the date.
Solar Arc: This component provides a one-stop shop for calculating a solar arc and moving
a sphere representing the sun along it.
Inputs:
JDay: Date and time value expressing represented as a JDay data type, a double
value, or a date and time string (defaults to 1/1/2000 00:00:00)
Lat: Latitude in degrees as double; -90...+90; + to north of equator (defaults to 0.0)
Lon: Longitude in degrees as double; -180...+180; + to east of Greenwich (defaults
to 0.0)
N:
North vector (defaults to y-axis)
O:
Origin, centerpoint at which to locate the arc (defaults to world XYZ origin)
SA: Scale Arc, floating point value by which to scale the initially unit sized arc
(defaults to 1.0)
SS: Scale Sun, floating point value by which to increase or decrease the sphere
representing the sun
Off: Offset, a floating point value from 0.0-1.0 to place the sun between sunrise
and sunset along the arc (defaults to 0.5)
Outputs:
Arc: The arc representing the solar path
Sun: A sphere representing the sun and placed at the offset location between sunrise and sunset.
Vec: Vector pointing to the suns offset location
TimeOfDay: Calculated JDay value offset between sunrise and sunset
When: Using a high speed search algorithm (patent pending) calculate the two dates within
a given year when the sun will appear aligned with the given target vector.
Inputs:
Y:
Integer Year value in which to calculate closest solar dates.
Lat: Latitude in degrees as double; -90...+90; + to north of equator (defaults to 0.0)
Lon: Longitude in degrees as double; -180...+180; + to east of Greenwich (defaults
to 0.0)
N:
North vector (defaults to y-axis)
T:
Target vector along which to calculate closest solar position
Outputs:
Arcs: Solar Arcs on the calculated dates
Vecs: Calculated closest solar vectors
JDays:Calculated Julian Day values for the closest solar alignments
Heliotrope User Guide
Release 2.0 BETA
Cast: Project the shadow of a Brep object onto opposite to the direction of the solar vector
onto a planar surface. For convenience this component uses solar vectors as inputs, which
point towards the suns location rather than the direction of the shadow
the solar vector is
opposite to the direction in which the shadow will be cast.
Inputs:
B:
SV:
P:
Outputs:
P:
F:
designed to provide the ability to parametrically manipulate dates and times in Grasshopper and control the
activity of the solar calculators.
3.2.1. Components for Julian Day composition, expansion, and type conversion
These three components provide mechanisms to compose Julian Day values from calendar dates, expand a value
into calendar dates, and simply store a JDay parameter value.
JDay:Parameter: Holds a single JDay value. Can be useful in converting date/time
strings or double values into JDay data values.
Input:
Date and time value expressing represented as a JDay data type, a double value, or a
date and time string (defaults to 1/1/2000 00:00:00)
Output:
JDay: Compose: Compose a Julian Day output value as a JDay data type from a set of
calendar inputs.
Inputs:
Y:
M:
D:
h:
m:
s:
Off:
Output:
JDay: Expand: Expand a Julian Day values represented as a JDay data type into its
calendar components, applying an additional time zone offset if provided.
Inputs:
JDay: Date and time value expressing represented as a JDay data type, a double
value, or a date and time string (defaults to 1/1/2000 00:00:00)
Off: Time zone offset as double value in hours (defaults to 0.0)
Outputs:
Input:
U:
Update date and time on each Grasshopper solution if this boolean input is true
(default to true)
Output:
10
JDay:Add: Add additional real valued number of days, hours, minutes or seconds to a
base JDay value. As with the JDay:Add Years component, sliders or control knobs may be
used to drive the inputs, cycling through date and time periods at will.
Inputs:
JDay: Base date and time value expressing represented as a JDay data type, a double
value, or a date and time string (defaults to 1/1/2000 00:00:00)
+D: Real valued number of days to add (defaults to 0.0)
+h: Real valued number of hours to add (defaults to 0.0)
+m: Real valued number of minutes to add (defaults to 0.0)
+s:
Real valued number of seconds to add (defaults to 0.0)
Outputs
JDay:Add Years: Add a double valued number of years to January 1st of the integer base
year. A slider producing a double value between [0.0 1.0] may be coupled with the +Y
input to move through all of the dates in a specific year. Similarly, a Control Knob with
a dial range of [0.0 1.0] and the knob limit restriction turned off attached to same
+Y input will advance by one year each rotation of the knob.
Inputs:
Y:
+Y:
Base year value as an integer offset from 0 Current Era (defaults to 2000)
Floating point number of years to add or subtract from the base year (defaults
to 0.0)
Output:
11
RhinoGet: Retrieve location and date/time settings from the Rhino model.
Inputs:
Outputs:
JDay:
Lat:
Lon:
N:
Off:
RhinoSet: Set the Rhino model location and date/time settings. Only the actively
connected inputs are used to drive the Rhino model. Unconnected inputs are ignored.
Inputs:
JDay: Date and time value expressing represented as a JDay data type, a double
value, or a date and time string
Lat: Latitude in degrees as double; -90...+90; + to north of equator
Lon: Longitude in degrees as double; -180...+180; + to east of Greenwich
N:
North vector
Currently the Rhino API does not provide a mechanism for setting the models time zone.
As a result, no offset parameter is provided for here. This is represents no real difficulty,
however, as the models date, time and location are correctly set using UTC-0 values. The
position of the sun in the Rhino model will be correct, only the local time value will be out
of step.
12
Compass Label: Generates a string label based on the compass direction of the input
vector.
Inputs:
N:
V:
Outputs:
L:
Trim: Really trim a trimmed Brep face. In certain instances applying a matrix to a Brep
trimmed Brep face Grasshopper results in the matrix covering the full, untrimmed
face rather than the trimmed one as expected. This component calls the necessary
Rhinocommon function under the covers to finish the trim operation.
Inputs:
Outputs:
Reflect: Reflect a vector off of a surface at an incident point. Extracts the normal vector at
the point of reflection and bounces the incoming vector accordingly.
Inputs:
S: Surface
P:
Point at which to reflect
V:
Vector to reflect
Outputs:
R:
13
4. Example Programs
4.1. Disk objects oriented on the solar vector
In this example, developed by Nancy Cheng of the University of Oregon, a matrix of cone shaped objects is
oriented towards the solar vector at a given date and time.
The Heliotrope program is very similar to the simple solar arc example given at the beginning of this user guide.
The component groups perform as follows:
1) Using explicit values for year, months and day, define three dates, the winter solstice, summer solstice, and
fall equinox. In addition a slider, labeled season, is provided to select one the three dates.
2) Provide the current location of the model by providing double values in degrees for latitude, longitude and
a vector for the direction of north.
3) Using the Solar Day Events component, generate an arc for the three dates of interest. Compute the
difference between sunrise and sunset using the Julian Day values. Multiply that difference by a
slider input value between 0.0 and 1.0, creating a time value beginning at sunrise when the slider is
0.0, sunset when at 1.0 and proportionally through the day for values in between. Add the time of
day back onto sunrise to finish calculating Julian Day values across the times between sunrise and
sunset.
4) Using the Solar Calculator component, determine the solar vector at the exact time selected with the
Heliotrope User Guide
Release 2.0 BETA
14
slider in step 3. Scale the vector and solar arc (also from Step 3) to a desired size. Display both
along with a globe placed at the end of the vector on the arc indicating the suns position.
5) Set up a series of parametric values controlling the matrix geometry to be generated.
6) Create the background matrix of panels and cut openings in which the rotating cones will rest.
7) Create the solar cone elements and orient them in the direction of the solar vector.
The output of the Heliotrope program generates the following geometry in Rhino:
To exercise the program, adjust the season slider to select one of the three solar arcs and the 0-1 day slider to move
the sun across the sky between sunrise and sunset on the selected date.
15
16
17
Acknowledgements
Research and development rarely happens in a vacuum. The author would particularly like to thank Professor
Nancy Cheng of the University of Oregon for her insightful thoughts and continual support of the R&D work
behind this project. Professor Chengs lovely origami shading devices have provided the perfect vehicle for driving
development of these tools.
I would also like to acknowledge the development team at Robert McNeel & Associates for their continual efforts
to make Rhino and Grasshopper the best geometric modeling program possible while also taking the time to
enable the incredibly innovative development community that surrounds it. Particular thanks to Scott Davidson,
Steve Baer, Dale Fuglier and of course David Rutten, although I know there are many others behind that front line
team.
18
19