Condensed Portfolio Caite Canfield Nike - FOOTWEAR 3D DESIGNER, GLOBAL OPS
About Caite About Caite: One thing about me that may surprise you is that I am a true third culture kid! I was born in the US and have had the amazing opportunity to travel the world. I have spent the majority of my life in Europe and also lived in the Middle East for five years. I collect snow globes from every new place I visit. I now have 103 snow globes!
After repatriating to the US for college, I attended Skidmore College in Upstate New York and received a Bachelor’s Degree of Art in Mathematics and a Bachelor’s Degree of Science in Studio Art. I was a starting player, and captain, on the Skidmore Varsity NCAA Volleyball team and received national recognition as an All-American Athlete after previously playing for the National Women’s Dames 1 Flemish Club team in Belgium.
Currently, I am in my final year of my Masters in Architecture (M.Arch) program at the Georgia Institute of Technology upon receiving the T. Gordon Little Fellowship. I am now a member of Equity in Architecture (EQIA), Co-Founder and Head of External Affairs at the sustainable studio ECO, Graduate Ambassador, and GTA for University Recruiting for the GT School of Design.
Professor: Tzu-Chieh K Hong
DESIGN SCRIPTING Scripting Shapes CODING WITH PYTHON IN RHINO ARCH 6040 – Advanced Architectural Design 2 – Integrated Design Design Scripting is an elective course offered in the Masters of Architecture
This project is inspired by an artist Sol Lewitt who created works with an
curriculum that requires the highest media and modelling prerequisites. An
algorithmic thinking. So ,this project is aiming for a design generated by an
introduction to advanced approaches to algorithmic designs and customized
simple algorithm design by students. Through this project, students will be
computer applications by scripting in programming languages.
learning the basics of the geometric library of Rhino, rhinoscriptsyntax, and the fundamental concepts of algorithmic design.
Computer programming has been broadly adopted in several discourses in solving problems, automating workflows, processing analysis, and so forth. For architects and designers,computer programming is even used for exploring design spaces, creating new designs and simulating the performance of designs.
This course will introduces the basics of computer programming and algorithmic thinking through four biweekly assignments and a class project implemented in Python, JAVA and Grasshopper.
range i = (0, 50); range j = (0, 100)
Caite Canfield
range i = (0, 50); range j = (0, 20)
range i = (0, 20); range j = (0, 10)
Reference Curve for Python Script
Overall Form
range i = (0, 50); range j = (0, 100)
range i = (0, 50); range j = (0, 20)
range i = (0, 20); range j = (0, 10)
Reference Curve for Python Script
Spring 2021
02. 11. 2021 @ 11:59am
Scripting Shapes 002
02. 11. 2021 @ 11:59am
Scripting Shapes 001 Overall Form
Caite Canfield Spring 2021
Professor: Tzu-Chieh K Hong
ARCH 8833: Design Scripting
Professor: Tzu-Chieh K Hong
ARCH 8833: Design Scripting
Overall Form
range i = (0, 50); range j = (0, 100)
Spring 2021
range i = (0, 50); range j = (0, 20)
range i = (0, 20); range j = (0, 10)
Reference Curve for Python Script
range i = (0, 50); range j = (0, 100)
Overall Form
Caite Canfield
range i = (0, 50); range j = (0, 20)
range i = (0, 20); range j = (0, 10)
Reference Curve for Python Script
Caite Canfield
02. 11. 2021 @ 11:59am
Scripting Shapes 003 Professor: Tzu-Chieh K Hong
ARCH 8833: Design Scripting
ARCH 8833: Design Scripting
Professor: Tzu-Chieh K Hong
ARCH 8833: Design Scripting
Scripting Shapes 002
Spring 2021
ARCH 8833: Design Scripting Overall Form
range i = (0, 50); range j = (0, 100)
range i = (0, 50); range j = (0, 20)
range i = (0, 20); range j = (0, 10)
Reference Curve for Python Script
Caite Canfield
Scripting Shapes 001
02. 11. 2021 @ 11:59am
Scripting Shapes 003 Overall Form
Caite Canfield
Spring 2021
DESIGN SCRIPTING Surface Matrix Mathematical Investigations through Visual Design Language Python Explorations in Rhino - 2D and 3D studies
This project is inspired by the artwork, Systematic Landscapes, by Maya Lin who
variations from the given initial conditions. Learning the concepts of permutation
is an architect, an artist and an educator The systematic Landscapes reveal the
to create artworks with this concept. On the technical aspect, the basics of object
beauty of the discreteness and the controllable randomness.
oriented programming via three simple practices are exibited.
In this project, creation of 2 and 3 dimensional matrices, then utilized to create artworks. Exploring angles, offsets, iterations, matrices, grids, and finally warping the grid using amthematical coding processes can generate various artworks that evoke different attributes of the code.
This project was an initial investigation into Python in Rhino and Grasshopper and led into the permutations that follow in the coming pages that were inspired by a mathematical concept, permutation, which generates a series of permuted
Caite Canfield
Spring 2021
03. 09. 2021 @ 11:59am
Permutation 001 Upper Curves
Lower Curves
Equation Generator - Grasshopper
Permutations Code - Python
Professor: Tzu-Chieh K Hong
ARCH 8833: Design Scripting
Caite Canfield
Spring 2021
03. 09. 2021 @ 11:59am
Permutation 002 Upper Curves
Lower Curves
Equation Generator - Grasshopper
Permutations Code - Python
Professor: Tzu-Chieh K Hong
ARCH 8833: Design Scripting
Caite Canfield
Spring 2021
03. 09. 2021 @ 11:59am
Permutation 003 Upper Curves
Lower Curves
Equation Generator - Grasshopper
Permutations Code - Python
Professor: Tzu-Chieh K Hong
ARCH 8833: Design Scripting
0 1 2 3
DESIGN SCRIPTING Rhino 3D Printing Joint Solution Final Project Proposal/Design Implementation Rhino 7, Python in Rhino, Grasshopper, Photoshop, Indesign, Illustrator
Programming languages are used as computational tools for designers in many
operations would fail if the operation was too complex. We hoped to write a
aspects, another one of the most popular applications is digital fabrication.
script that generated a NEW BUTTON IN RHINO that will take converging
Fabrication is a costly, time consuming and labor demanding process especially
elements and automatically generate a 3D printable joint for that connection
when the design is highly customized and the geometries are complex. However,
point. When physically constructing a model this button in rhino will aid
programming languages ease the process with high computation performance
architects and designers in sketch models and fabrication techniques.
so that designers can implement complex forms with real materials. Working in a team with Breanna Rhoden, we developed a case study, a topic proposal and a final implementation.
The following pages outline the design logic, design iterations, variations, and final implementation of the code in a physical model. Further explorations emerged when smoothing the geometry and creating “bubblegum joints.”
Our proposal for this project stemmed from challenges in 3D modelling within Rhino. When converging elements came together and met at a point, whether it be a unique truss system, column to beam connection, or other, Rhino’s boolean
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
# ========== CODES DESCRIPTION: DIGITAL FABRICATION - Joint Generation ========== # # ========== CODE AUTHOR : Caite Canfield & Breanna Rhoden ========== # # ========== DATE : 03/25/2021 ========== # # ========== VERSION : JOINTCUSTOM 001 ========== # import rhinoscriptsyntax as rs import random as rnd import math import Rhino import scriptcontext as sc import System.Guid
#Input Members modelMembers = rs.GetObjects("Select input geometry",1073741824) #Input Convergence Point convergencePoint = rs.GetObjects("Select convergence point") def AddSphere(): #Sphere at Convergence Point sphereCenter = rs.PointCoordinates(convergencePoint) center = Rhino.Geometry.Point3d(0, 0, 0) radius = 0.05 sphere = Rhino.Geometry.Sphere(sphereCenter, radius) if sc.doc.Objects.AddSphere(sphere)!=System.Guid.Empty: sc.doc.Views.Redraw() return Rhino.Commands.Result.Success return Rhino.Commands.Result.Failure def main(): OffsetMulticrvs2SidesWEnds() def OffsetCurve2Sides (crvID, dist, t_style, conn, tol): if rs.IsLine(crvID): plane = rs.ViewCPlane() print "is a line" else: plane = rs.CurvePlane(crvID) # 4 .. curve print "is not a line:", rs.ObjectType(crvID) crv=sc.doc.Objects.Find(crvID).Geometry print "curve degree:", rs.CurveDegree(crvID) trans = trans=Rhino.Geometry.CurveOffsetCornerStyle.Sharp offset1=crv.Offset(plane,dist,tol,trans) print 'offset1:', offset1 if offset1: for n, i in enumerate(offset1): id = sc.doc.Objects.AddCurve(i) rs.ObjectName(id, name="1_{n}".format(n=n)) offset2=crv.Offset(plane,-dist,tol,trans) print 'offset2:', offset2 if offset2: for n, i in enumerate(offset2): id = sc.doc.Objects.AddCurve(i) rs.ObjectName(id, name="2_{n}".format(n=n)) def plcrv_filt(rhino_object, geometry, component_index): return rs.IsCurvePlanar(geometry) def OffsetMulticrvs2SidesWEnds(): #user input section msg="Select planar curve(s) to offset both sides" crvs = rs.GetObjects(msg,4,preselect=True,custom_filter=plcrv_filt) if not crvs: return
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
Joint
tol = sc.doc.ModelAbsoluteTolerance off_dist = 0.0125 tt = 1 conn = -1 rs.UnselectAllObjects count = 0 for crv in crvs: success = OffsetCurve2Sides(crv, off_dist, tt, conn, tol) if success: count+=1 if count<len(crvs): err_msg=" Unable to offset {} curves".format(len(crvs)-count) else: err_msg="" print "Successfully offset {} curves.".format(count)+err_msg
)
msg2 = "Select extrusion path for offset curve" #Message: Parameter must be a Guid or string representing a Guid paths = rs.GetObjects(msg2, preselect=True, custom_filter=plcrv_filt if not paths: return sleeves = rs.ExtrudeCurve(crvs, paths) #BOOLEANUNION JOINT #toUnion = sleeves, sphere rs.BooleanUnion(toUnion, delete_input=True) jointSolid = rs.BooleanUnion(sleeves & sphere,)
#BOOLEANDIFFERENCE MEMBERS WITH JOINT jointFinal = rs.BooleanDifference(jointSolid, modelMembers, delete_input =True)
110 111 #how can we make multiple joints at the same time? 112 #How can we define global variables midway through the code? 113 114 #Output joints - ordered and labeled... 115 116 117 if __name__ == '__main__': 118 main() 119 AddSphere() 120 121
Members
001:
004:
The beginning of the code prompts the user to select three components:
Determine the length of the extrusions for the joint “sleeves” by dividing the curve and generating a new path for the extrusion to follow.
1.
the converging lines
2.
the point of convergence
3.
the profile surface for the members.
007:
Add the node to the convergence point by generating a sphere to ensure that the joint is strong.
010: Boolean union the sphere with the solid joint “sleeves.”
002:
005:
008:
011:
Move the profile surface to the convergence point by finding the surface center point and copying the surface to the convergence point of the members.
Move the aligned planes to the corresponding points to ensure that the members do not meet at the convergence point - this increases accuracy of joint measurements and decreases error in the fabrication process
Begin building the framework for the joint “sleeves” by extruding the profile surfaces along the shorter member paths.
Boolean difference the members from the solid joint sleeves and sphere.
003:
006:
009:
012:
Find the normal direction to the plane and align it with the converging members to generate the starting profile for the members.
Extrude the profiles along the path to generate the correct length of the members used in fabrication.
Extrude the profiles to generate the solid sleeves alone.
Completed joint ready to output to 3D printer.
Digital Fabrication: Custom Joint - Variation 001
Digital Fabrication: Custom Joint - Variation 003
Digital Fabrication: Custom Joint - Member Variation
Digital Fabrication: Custom Joint - Tapered Member Sleeve
Adjusting the number of input curves in the Rhino geometry allowed for a variation in the number of joint connections.
Adjusting the pipe diameter in the Python script allowed for a variation in size of the profile ends.
Python Script Component: joint.append(rs.AddPipe(newCrv,[0,1],[0.01,0.10],0,1,False))
V001.1:
V001.2:
V001.3:
V001.4:
V001.5:
V003.1:
V003.2:
V003.3:
V003.4:
V003.5:
2 member joint with sphere attachment.
3 member joint with sphere attachment.
4 member joint with sphere attachment.
5 member input with sphere attachments.
6 member input with sphere attachments.
3 member joint with tapered pipe diameter. (0.05, 0.10)
3 member joint with tapered pipe diameter. (0.05, 0.15)
3 member joint with tapered pipe diameter. (0.01, 0.10)
3 member joint with tapered pipe diameter. (0.10, 0.05)
3 member joint with tapered pipe diameter. (0.15, 0.05)
Digital Fabrication: Custom Joint - Variation 002
Digital Fabrication: Custom Joint - Variation 004
Digital Fabrication: Custom Joint - Sphere Variation
Digital Fabrication: Custom Joint - Custom Profile Sleeve
Adjusting the sphere diameter in the Python script allowed for a variation in size of the sphere connection piece.
Adjusting the member profile surface in the Rhino geometry to create a custom joint sleeve.
Python Script Component: jointSphere = rs.AddSphere(cPt, 0.15 ) joint.append(jointSphere)
V002.1:
V002.2:
V002.3:
V002.4:
V002.5:
V004.1:
V004.2:
V004.3:
V004.4:
V004.5:
3 member joint with 0.10 diameter sphere.
3 member joint with 0.15 diameter sphere.
3 member joint with 0.20 diameter sphere.
3 member joint with 0.25 diameter sphere.
3 member joint with 0.30 diameter sphere.
4 member joint with triangle profile.
4 member joint with star profile.
4 member joint with square profile.
4 member joint with pentagon profile.
4 member joint with rectangle profile.
Digital Fabrication: Custom Joint - Final Physical Model
Digital Fabrication: Custom Joint - ADVANCED “Bubblegum Joints”
Digital Fabrication: Custom Joint - Custom Profile Sleeve
Adjusting the member profile surface in the Rhino geometry to create a custom joint sleeve.
NW
NE
SW
SE
Digital Fabrication: Custom Joint - ADVANCED “Bubblegum Joints” Digital Fabrication: Custom Joint - Physical Model Detail
NE
SW
Formwork Fabrication Logic - Generating the mold for castable links This formwork is separated into 4 parts to allow for the mold to wrap around the previous link while still being reusable for multiple castings.
Concrete Lemniscates - Concrete Edition MATERIAL DIVERSIONS Concrete Lemniscates RECONSTRUCTIONS: THE NEAR FUTURE OF ARCHITECTURE ARCH 6040 – Advanced Architectural Design 2 – Integrated Design My source of inspiration comes from a piece of art I made years ago. Taking
This idea is best represented through the 3D printing of fabrics. The mechanisms,
a solid piece of wood, a set of links (chainlink) was carved for my mom, one
mathematics of the fabric, and the printing process itself, allowing the fabric to
symbolizing me, and the other symbolizing my brother. The links did not break
come to life and move as if it were cloth. The challenge that I want to take on is
at a seam the way traditional chain-links are made, they were carved to remain
with materials that are “cast-able” and more brittle such that that the final product
as two solid pieces of wood simply interlocked and movable. Taking this idea
focuses and embodies the engineering of the fabrication and formwork process.
and expanding on it further, the exploration can be expanded to consider other materials and test their tensional limits by engineering a more general formwork. For example, casting concrete into a “woven” or “linked” design would test the structural and tensional qualities of cement. Taking this small idea and thinking 1-1 scale, if a formwork could be generated large enough, the links could be cast to become a movable/lighter partition wall in an architecture.
The overall design is inspired by new technology used to 3D print fabrics and the personal jewelry experience while working at Tiffany & Co in NYC. Engineering a “cast-able” fabric/chainlink is the challenge at hand.
Formwork Fabrication Logic - Generating the mold for castable links This formwork is separated into 4 parts to allow for the mold to wrap around the previous link while still being reusable for multiple castings.
001
Beginning with a solid piece of foam material, the desired link size can be mapped to the surface inside.
006
Piecing together the fitting and trouble shotting alignment issues
002
Slicing the material into two pieces generates two sides to the “doughnut”
007
Drawing “pour holes” so that the concrete can flow through the form by using 2 points of entry
Formwork Fabrication Logic - Link Prototype
003
004
Rotating 90 degrees sets up the mold to be sliced again in half to generate the four part mold of equal parts.
008
Boolean split and Boolean Difference creates a hole through 2 parts of the mold and generates caps
Splitting plane
009
Resolving the design further created smoothed edges for material use efficiency as well as tongue and groove interlocking pieces to hold the pieces together in the horizontal direction.
005
Separating the separated mold shows that there are 4 pieces that are identical rotated and aligned in space to generate the formwork
Formwork Fabrication Logic - Casting process (Aligning the mold) Follow the step by step process for proper alignment
Prepare the dowel holes for insertion and do a “dry fit” to ensure that the mold is sealed and fits together properly.
Wrap around the previous link casted and ensure that the drill holes are facing upwards.
Previous Iteration.
010
Dowel holes are drilled in a polar array (6) around center to ensure that the model can be rotated to strategically misalign the seams of the mold compoonents increasing strength of the mold.
Rotate the top half of the mold to strategically misalign the dowel holes resulting in a stronger mold
Pour the concrete into the two pour holes and allow to cure for at least 12hrs before removing.
The link prototype can be generated from removing the formwork one piece at a time and using the thermoformed acrylic to gently shuffle the concrete out of the mold.
Tensile members Compressive Members
Original Modular Unit Design
ADVANCED STUDIO I Tensegrity RECONSTRUCTIONS: THE NEAR FUTURE OF ARCHITECTURE ARCH 6040 – Advanced Studio I – RECORDER
The structural principle is based on a system of isolated components under
The manifesto image illustrates the building on the proposed site (Bellwood
compression inside a network of continuous tension, and arranged in such a way
Quarry) utilizing a unique tensegral module.
that the compressed members (usually bars or struts) do not touch each other while the pre-stressed tensioned members delineate the system spatially.
Constructed with simple design patterns such that the members are loaded in either pure compression or pure tension. Which means that the structure will only fail if the cables yield or the rods buckle. The structure also becomes stiffer as cable tension increases over time.
In the following pages, the design proposal for the bridge is diagrammed and outlined illustrating compressive and tensile members.
Design variations, structural studies, and renders below.
“Joining” members are added to complete modular units between the original rotated units. These added members complete the rotational aspect of tensegrity that allows for the entire system to be structural and appear as though the compressive members are floating.
Tetrahedral Modular Unit and Assembly
Tetrahedral Modular Unit: Scaled with Axial Integrity
Individual 90 degree rotation per modular tetrahedral tensegrity structure to ensure the bridge remains in structural integrity from crossed bracing system.
Tetrahedral Modular Unit- Scaled, Breaking Axis
MEDIA & MODELLING III ‘Art’metic GRASSHOPPER MATHEMATICAL EQUATIONS Grasshopper, Rhino, Illustrator, Indesign
Media & Modelling III: Through mathematical explorations and manipulations
the model. Learn fundamental concepts of three-dimensional parametric
of equations, design variations and derivations, three categories of grasshopper
geometries and operations and how to generate a three-dimensional
outputs emerged. Attractor Fields, Mathematical Surfaces, Morphing Tiles.
parametric surface specified by a set of mathematical expressions..
1.
Attractor Fields: construct a parametric model of attractor fields in
3.
Morphing Tiles: construct a parametric model of morphing tilings in
Grasshopper and generatea set of three design variations using the model.
Grasshopper and generatea set of three design variationsusing the model.
Learn fundamental concepts of two-dimensional parametric geometries
Learn fundamental conceptsof parametric spatial transformations and
and operations and how to generate a two-dimensional arrangement of a
how to generate a spatial arrangement of a three-dimensional parametric
parametric motif specified by a set of point and curve attractors.
motif specified bythe morphingrelations froma standard instance of themotif to the subdivisions of a complex surface with varying curvature.
2.
Mathematical Surfaces: construct a parametric model of mathematical
Through three different design explorations, varying mathematical design studies can be explored using complex geometries, module design iteration and variation.
surfaces in Grasshopper and generatea set of three design variationsusing
Implementation of grasshopper color mapping highlights the mathematical surface geomtric attributes.
Thank you for your time and consideration -Caite