From a51cfffc847f9626ad14720e39c8cbdb4ed9e86d Mon Sep 17 00:00:00 2001 From: Gabriel Dunne Date: Thu, 24 Apr 2014 16:37:38 -0700 Subject: [PATCH] Init. --- .DS_Store | Bin 0 -> 6148 bytes .gitignore | 1 + _config.yml | 4 + _layouts/default.html | 34 +++ _layouts/post.html | 10 + _posts/2014-04-23-welcome-to-jekyll.markdown | 24 ++ _posts/2014-04-24-tetramitres.markdown | 286 +++++++++++++++++++ archive.html | 21 ++ css/main.css | 152 ++++++++++ css/syntax.css | 60 ++++ index.html | 16 ++ 11 files changed, 608 insertions(+) create mode 100644 .DS_Store create mode 100644 .gitignore create mode 100644 _config.yml create mode 100644 _layouts/default.html create mode 100644 _layouts/post.html create mode 100644 _posts/2014-04-23-welcome-to-jekyll.markdown create mode 100644 _posts/2014-04-24-tetramitres.markdown create mode 100644 archive.html create mode 100755 css/main.css create mode 100644 css/syntax.css create mode 100644 index.html diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..39000b6087e99c5b606fc5c11590b67d7a3b7d21 GIT binary patch literal 6148 zcmeHK%}(1u5S~p^u!B@wi38mB#wCYPB66&i!ifu#Q8^Tp+BhPXEN>J$%^^gxIPv=) z2wsQ-55vsv1}O?0Ta{`?n)$}#nYH(Gw37h<(HX^C03HB1sDu?4%^O1ZNf)GIBUMD9 z*C-&5#`z#hRkV=Jfq#(!`gTjug#jqYVgCC)M}suUi)QmlRI0U4OUsU1uemMqWzWQPGBk7I1-r9GS6=9O~hPpV3dzf;3lw`3Qcho40 z^W(q-kCM3P>qTwAab3sldh3%(tKDkI?X9oVhMct9&4z64G^bPV!gV$_x4-R2>iqKR z`sViT{=twf@OP=@i^Ul{qBFPe-@!0TRd$APs;R;$@{z~+X&T{fX3NaV8JPiQfEoDE z4A?`>S^3br;Fo6xn1MgR0G$sKmC(0X8q`Mz8a)Ca)-bFEeVQexMq2bOmIm<-iZG>! zrc~GwLzr@mOPl9gEDf4+5O(+w_Q}FdC_+CS*OxjSgl~{7Gr$bYGeEN+ibwr_@BR5- zC$V7$n1TP30a4oxc00H?+glfQNxfF0{z4_8ywc!n2|BtJV=lGgbyO`Fm*gP&7E6N| QLE%3Fng%w^z+YwH1&AV!Z literal 0 HcmV?d00001 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c08f9ad --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +_site \ No newline at end of file diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..04318cc --- /dev/null +++ b/_config.yml @@ -0,0 +1,4 @@ +name: notes +markdown: redcarpet +pygments: true +permalink : /:month-:day-:year/:title.html \ No newline at end of file diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..3c0fd1e --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,34 @@ + + + + + + {{ page.title }} + + + + + + + + + + + +
+ + + + {{ content }} + + +
+ + + diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..5979af8 --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,10 @@ +--- +layout: default +--- +

{{ page.title }}

+ +

{{ page.date | date_to_string }}

+ +
+{{ content }} +
diff --git a/_posts/2014-04-23-welcome-to-jekyll.markdown b/_posts/2014-04-23-welcome-to-jekyll.markdown new file mode 100644 index 0000000..e0df977 --- /dev/null +++ b/_posts/2014-04-23-welcome-to-jekyll.markdown @@ -0,0 +1,24 @@ +--- +layout: post +title: "First Post" +date: 2014-04-23 21:54:59 +categories: projects +--- + +You'll find this post in your `_posts` directory - edit this post and re-build (or run with the `-w` switch) to see your changes! +To add new posts, simply add a file in the `_posts` directory that follows the convention: YYYY-MM-DD-name-of-post.ext. + +Jekyll also offers powerful support for code snippets: + +{% highlight ruby %} +def print_hi(name) + puts "Hi, #{name}" +end +print_hi('Tom') +#=> prints 'Hi, Tom' to STDOUT. +{% endhighlight %} + +Check out the [Jekyll docs][jekyll] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll's GitHub repo][jekyll-gh]. + +[jekyll-gh]: https://github.com/mojombo/jekyll +[jekyll]: http://jekyllrb.com diff --git a/_posts/2014-04-24-tetramitres.markdown b/_posts/2014-04-24-tetramitres.markdown new file mode 100644 index 0000000..9433f04 --- /dev/null +++ b/_posts/2014-04-24-tetramitres.markdown @@ -0,0 +1,286 @@ +--- +layout: post +title: "Geometric Forms out of Wood" +date: 2014-04-23 21:54:59 +categories: articles +--- + +@ AUTHOR Gabriel Dunne +@ DATE 2014-04-23 + +# Introduction + +In this tutorial I'm going to document my process for making a series of hollow geometric shapes out of wood. I've explored a number of ways to make polygonal shapes, the trickiest issue is the unique mitres. + +This is a series of truncated tetrahedrons. They were created from 1/4" ply on a laser cutter. + +[tet laser image] + +Using Grasshopper, I generatd a series of shapes that intersect with a plane. They all vary in size, orientation, and where the plane intersects, allowing each of them to sit uniquely on the wall. + +[ finished tets on wall ] + +All parts were cut from lightweight 10mm ply. The interior support structure relies on two angle wedges, which are superglued to the interior of the forms. + +[ making-of photo ] + +This design doesn't include a solution mitered edges due to the nature of the laser cutter. My current process is coming up with a precise, repeatable way to generate mitres for polygonal shapes. + + + +# Truncated Tetrahedron Stool/Table + +I'm going to continue to iterate with a Tetrahedron model, as it's a very basic "root" shape. This process will cover the creation of a truncated tetrahedron shape prototype out of 3/4" material. + +Software used in this tutorial: + - Rhino + - Grasshopper + +Tools: + - Laser Cutter + - Table Saw + +Materials + - 1 sheet 4' x 8' x 1/2" birch sandply + + +Step 1: Shape Design + +I am using Rhinoceros 3D for this tutorial. You can download a evaluation version for Windows or Mac here: http://www.rhino3d.com/download + +Start Rhino and create a new file with the template Small/Inches. + +[01-loading-rhino.png] + +There are a myriad of ways to create this type of geometric form, especially with software like Rhino, and its companion plugin, Grasshopper. For this tutorial, I'm going to go about it in a way that is based on transforms and booleans, so it should be portable in concept to other software. + +Tetrahedron From Scratch + +The first variable we use to define the shape is its edge length. Then, we figure out the height from that value with the height formula for a regular tetrahedron: + +[height formula] + +We can use a calculator to solve for h. I'm rounding to the hundreths for brevity, but you should use as many numbers past the decimal that your calculator or computer spits out + +2 / 3 +0.667 +squareroot +0.816 +* 10 (edge length) +8.164 + +This shows that a tetrahedron with edge length 10 will have a height of 8.164. + +Oh, and if you want to shortcut the process of do this all from scratch, you can use the Pyramid tool, which is specific to Rhino, but other software will have this tool or something similar: + +[polygon video] + +Polygon Method + +Type "Polygon" + + + + + + +Pyramid Method + +Type "Pyramid" into the command line. + +Options will appear in the command line. Set: +NumSides=3 DirectionalConstraint=Vertical Solid=Yes + +Click Edge in the Pyramid command. + +Type "0" to set the origin + +Type "10" to set the edge length, and now the base of the pyramid will be constrained to 10 inch edges. + +Hold down shift to constrain the axis, and when you orient the tip of the base on the X axis, click once. + +[image of constrain] + +Type 8.16496580927726 into the command line. You can be as precise as you like, or just copy and paste from this tutorial. In the top view, orient the shape so it's right side up, and click once. + +Tetrahedron! + + + + + +# Truncation + +Now, we need to truncate our shape. + +Fist, we need to find the center of our shape. There are many ways to do this is various software, let's do it by hand. + +First I create a new layer and make it a color. + +I use the snapping tools to find the center of all the edges, and draw three lines that intersect at the center of all the faces. I do this for all 4 faces of the form. + +Then, I draw four lines that originate from the center of each face, and coincides with the far vertex opposite the face. + +The center of the form is where these four lines intersect. We can use the "Point" tool to create a point at the intersection. + +Type "Move" in the command line, and move our shape and the centerpoint we just created to the origin. + +Now we're centered. + +Select everything and group them with Command-G. + +Type "Rotate" into the command line. + +Type 0 to center at the origin, and set "Copy" to "Yes" in the command line options by clicking it. + +Hold down shift and click to set the second reference point on the vertical axis. + +With shift still held, rotate the form completely around so it's upside down, and press enter. + +Right Click to redo our same rotate command, but make sure Copy is set to Off. + +Type "0" to set the origin, hold down shift, and rotate the entire form 180 degrees from the top view. + +Now we have two intersecting tetrahedrons. If we were to do a boolean combine of these two objects, we would have an icosohedron. + +To create our truncation,we can scale one of the tetrahedrons to our liking, using the center point as the scale origin. + +When you get to a scale that you like, type Boolean2Objects, and click to cycle through the various boolean operations until you arrive at the truncated shape. You can keep trying different truncation scales until you find one you like. + +If you want t truncate the shape so it creates a perfect hexagon on three sides, enter "0" as the origin, and enter "1.666666666" as the scale factor. + +After you complete the Boolean2Objects command, your shape is complete. + +You can clean up and delete all the extra guide lines at this point. + +[blue truncated tet] + +Now, we need to scale the object to our build size. + +Stretch break. + +Ok, we're back. + + +For my design, I'm going to ultimately use this as a table, so I'm going to cut off a bit from the bottom. This actually adds a little more work because I'll have to cut a few unique shapes in the plywood. + +I'm going to truncate at a 0.6666 of the length of the hexagon edges, because thirds are nice. I create a line along the edge of the lower hexagon sides, and then use the Divide tool with 3 segments. + +I then create a rectangle plane, and align it to the 2/3d's segement, and do another boolean. + +I chose 22" as the height of the finished object, which fits onto a single sheet of 4' x 8' ply. + +To make it easier to work with the form, I draw guidelines at the base and the top so I know where center is. These intersections are the reference point for moving and scaling the object. + +Move the object to the origin, and draw a 22" inch line from 0 on the Y axis. We'll use this line to scale to. + +Then, I make trace all the edges, do 3pt orients, and align them to the cutting plane. + + + +# Creating Thickness + +We need to: +1. Offset mesh by .75 +2. Convert mesh to surfaces +3. Dup border edge to find curves +4. Loft inner curve to outer curve + +you only need to do this for each individual piece, and then duplicate them. + + + +# Measuring the Mitre Angles + +We need to draw some guidlines for measuring perpendicular to the edge of the face. + +[mitre angle edge measure] + +Then we measure the angle between the faces by typing "angle" in the command line, and selecting the beginning and ending of both lines. Then we find the mitre angle by dividing in half. + +For Support A, the hexagon-to-hexagon mating edge: +70.529 +/ 2 +35.2645 + +And for Support B, the hexagon-to-triangle edges: +109.471 +/ 2 +54.7355 + +We're going to use these angles to make some internal support triangle blocks. + + +You can create thes any way you like. I navigate inside my object and just build them in relation to the form. I also add notches in the side of the triangle that won't be mated, so there's no puzzle-piece confusing when we assemble. + +We'll need to make 18 of each. Duplicate them so we have 18 each, and lay them out for our cut. You can be as precise as you like in laying out your cutfile. I typically try to be conservative with the material. + +[cutfile image] + +Now, we lasercut! + + +[Metabeam Cutting Awesomeness] + +Now that the shapes are cut, we can mitre the edges. + +Using masking tape, I mark all the angles and lay them out. + +I'm using a 1HP Bosche Trim Router with a tilt add-on. + +This is an analog method of setting the angle, I typically error on the side of cutting more material away, because it's easier to fix a gap on the inside of the form, rather than the edges. + +[photos of setting the router angle] + +I cut all the edges one angle before setting the tool again. + +[cutting angles A] + +Now set the router to our additional angle + +[cutting angles B] + +We have one more special angle to cut, for the parts of the form that rest on the ground. + +[photo of cutting foot angle] + +We're done cutting! + +# Assembly + +We'll work upside down, and build the form up. Place the top of the form upside down on the worksurface + +[form upside down] + +And glue in supports. We can also screw or brad them in. I'm measuing out a fractional 1/3 position for the positions of my supports. + +[adding supports] + +Next, we add supports to the hexagonal sides, in order. + +[lay out supports on sides] + +Attach supports to hexagonal sides with glue and or brads + +[attaching supports] + +Arrange the sides and use a ratchet strap to hold them together while the glue sets + +[Setting sides] + +Attach sides to tabletop. + +[Attach hexagonal sides to eachother] + +The last part is the attach the triangles via glue and/or brads. + +[attaching triangles] + +Using an electric sander at first, buff the entire shape, and then lightly hit the corners by hand. + +[picture of finishing corners] + +Use your choice of finish to seal. I went with a combination beezwax oil. + +[finished glamour shots] + diff --git a/archive.html b/archive.html new file mode 100644 index 0000000..faf7922 --- /dev/null +++ b/archive.html @@ -0,0 +1,21 @@ +--- +layout: default +title: Your New Jekyll Site +--- + +
+
    + {% for category in site.categories %} +
  • {{ category | first }} +
      + {% for posts in category %} + {% for post in posts %} +
    • {{ post.title }}
    • + {% endfor %} + {% endfor %} +
    +
  • + {% endfor %} +
+
+ diff --git a/css/main.css b/css/main.css new file mode 100755 index 0000000..a227692 --- /dev/null +++ b/css/main.css @@ -0,0 +1,152 @@ +/*****************************************************************************/ +/* +/* Common +/* +/*****************************************************************************/ + +/* Global Reset */ +* { + margin: 0; + padding: 0; +} + +html, body { height: 100%; } + +body { + background-color: #FFF; + font: 12px menlo; +} + +h1, h2, h3, h4, h5, h6 { + font-size: 100%; } + +h1 { margin-bottom: 1em; } +p { margin: 1em 0; } + +a { color: #00a; } +a:hover { color: #000; } +a:visited { color: #a0a; } + +/*****************************************************************************/ +/* +/* Home +/* +/*****************************************************************************/ +.posts { + list-style-type: none; + margin-bottom: 2em; +} + +.posts li { + line-height: 1.75em; +} + +.posts span { + color: #aaa; + font-family: Monaco, "Courier New", monospace; +} + +/*****************************************************************************/ +/* +/* Site +/* +/*****************************************************************************/ + +.site { + width: 42em; + margin: 2em; + line-height: 1.5em; +} + +.header a { + font-weight: bold; + text-decoration: none; +} + +.title { + display: inline-block; + margin-bottom: 2em; +} + +.title a { + color: #000; +} + +.title a:hover { + color: #000; +} + +.header a.extra { + color: #aaa; + margin-left: 1em; +} + +.header a.extra:hover { + color: #000; +} + +.meta { + color: #aaa; +} + +.footer { + color: #999; + margin-top: 2em; +} + +.footer .contact { + float: left; + margin-right: 3em; +} + +.footer .contact a { + color: #8085C1; +} + +.footer .rss { + margin-top: 1.1em; + margin-right: -.2em; + float: right; +} + +.footer .rss img { + border: 0; +} + +/*****************************************************************************/ +/* +/* Posts +/* +/*****************************************************************************/ + +/* standard */ +.post pre { + border: 1px solid #ddd; + background-color: #eef; + padding: 0 .4em; +} + +.post ul, .post ol { + margin-left: 1.35em; +} + +.post code { + border: 1px solid #ddd; + background-color: #eef; + padding: 0 .2em; +} + +.post pre code { + border: none; +} + +/* terminal */ +.post pre.terminal { + border: 1px solid #000; + background-color: #333; + color: #FFF; +} + +.post pre.terminal code { + background-color: #333; +} diff --git a/css/syntax.css b/css/syntax.css new file mode 100644 index 0000000..2774b76 --- /dev/null +++ b/css/syntax.css @@ -0,0 +1,60 @@ +.highlight { background: #ffffff; } +.highlight .c { color: #999988; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .k { font-weight: bold } /* Keyword */ +.highlight .o { font-weight: bold } /* Operator */ +.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ +.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #999999 } /* Generic.Heading */ +.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #555555 } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #aaaaaa } /* Generic.Subheading */ +.highlight .gt { color: #aa0000 } /* Generic.Traceback */ +.highlight .kc { font-weight: bold } /* Keyword.Constant */ +.highlight .kd { font-weight: bold } /* Keyword.Declaration */ +.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #009999 } /* Literal.Number */ +.highlight .s { color: #d14 } /* Literal.String */ +.highlight .na { color: #008080 } /* Name.Attribute */ +.highlight .nb { color: #0086B3 } /* Name.Builtin */ +.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ +.highlight .no { color: #008080 } /* Name.Constant */ +.highlight .ni { color: #800080 } /* Name.Entity */ +.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ +.highlight .nn { color: #555555 } /* Name.Namespace */ +.highlight .nt { color: #000080 } /* Name.Tag */ +.highlight .nv { color: #008080 } /* Name.Variable */ +.highlight .ow { font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #009999 } /* Literal.Number.Float */ +.highlight .mh { color: #009999 } /* Literal.Number.Hex */ +.highlight .mi { color: #009999 } /* Literal.Number.Integer */ +.highlight .mo { color: #009999 } /* Literal.Number.Oct */ +.highlight .sb { color: #d14 } /* Literal.String.Backtick */ +.highlight .sc { color: #d14 } /* Literal.String.Char */ +.highlight .sd { color: #d14 } /* Literal.String.Doc */ +.highlight .s2 { color: #d14 } /* Literal.String.Double */ +.highlight .se { color: #d14 } /* Literal.String.Escape */ +.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ +.highlight .si { color: #d14 } /* Literal.String.Interpol */ +.highlight .sx { color: #d14 } /* Literal.String.Other */ +.highlight .sr { color: #009926 } /* Literal.String.Regex */ +.highlight .s1 { color: #d14 } /* Literal.String.Single */ +.highlight .ss { color: #990073 } /* Literal.String.Symbol */ +.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #008080 } /* Name.Variable.Class */ +.highlight .vg { color: #008080 } /* Name.Variable.Global */ +.highlight .vi { color: #008080 } /* Name.Variable.Instance */ +.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ diff --git a/index.html b/index.html new file mode 100644 index 0000000..fd4aa0d --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ +--- +layout: default +title: notes +--- + +
+
    + {% for post in site.posts %} +
  • + {{ post.title }} + — + {{ post.categories }} + {{ post.date | date_to_string }}
  • + {% endfor %} +
+
-- 2.34.1