]> git.quilime.com - plog.git/commitdiff
process gd4
authorGabriel Dunne <gdunne@quilime.com>
Tue, 6 Apr 2021 05:45:10 +0000 (22:45 -0700)
committerGabriel Dunne <gdunne@quilime.com>
Tue, 6 Apr 2021 05:45:10 +0000 (22:45 -0700)
process/archive.html [new file with mode: 0644]
process/css/letter_gothic.ttf [new file with mode: 0755]
process/css/main.css [new file with mode: 0755]
process/css/normalize.css [new file with mode: 0644]
process/css/syntax.css [new file with mode: 0644]
process/gh-td/index.html [new file with mode: 0644]
process/index.html [new file with mode: 0644]
process/js/script.js [new file with mode: 0644]
process/tetra-field/index.html [new file with mode: 0644]
process/tetra-table/index.html [new file with mode: 0644]
process/woodmitres/index.html [new file with mode: 0644]

diff --git a/process/archive.html b/process/archive.html
new file mode 100644 (file)
index 0000000..2cf3033
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+        <title>archive</title>
+        <meta name="viewport" content="width=device-width">
+        <link rel="stylesheet" type="text/css" href="/process/css/normalize.css" />
+        <link rel="stylesheet" href="/process/css/syntax.css">
+        <link rel="stylesheet" href="/process/css/main.css">
+    </head>
+    <body>
+
+      <div class="site">      
+        <div id="home">
+
+  <h1>archive</h1>
+
+  
+  <h3>code</h3>  
+    <ul class="posts">
+      
+        
+          <li><a href="/process"></a></li>
+        
+      
+        
+          <li><a href="/process/gh-td/">Grasshopper -> TouchDesigner Bridge</a></li>
+        
+      
+    </ul>  
+  
+  <h3>projects</h3>  
+    <ul class="posts">
+      
+        
+          <li><a href="/process"></a></li>
+        
+      
+        
+          <li><a href="/process/tetra-table/">Tetra Table</a></li>
+        
+          <li><a href="/process/tetra-field/">Tetra Field</a></li>
+        
+      
+    </ul>  
+  
+  <h3>articles</h3>  
+    <ul class="posts">
+      
+        
+          <li><a href="/process"></a></li>
+        
+      
+        
+          <li><a href="/process/woodmitres/">Mitre Solutions for Fabricating Geometric Forms out of Wood</a></li>
+        
+      
+    </ul>  
+  
+
+</div>
+
+
+<!--
+<div id="home">
+  <ul class="posts">
+    
+      <li>
+      <a href="/process/tetra-table/">Tetra Table</a>
+      </li>
+    
+      <li>
+      <a href="/process/woodmitres/">Mitre Solutions for Fabricating Geometric Forms out of Wood</a>
+      </li>
+    
+      <li>
+      <a href="/process/tetra-field/">Tetra Field</a>
+      </li>
+    
+      <li>
+      <a href="/process/gh-td/">Grasshopper -> TouchDesigner Bridge</a>
+      </li>
+    
+  </ul>
+</div>
+-->          
+      </div>
+    
+      <div class="footer">
+        <p class="meta">
+        &copy; 2014 <a href="http://gabrieldunne.com">Gabriel Dunne</a>
+        </p>
+      </div>
+        
+      <script src="/process/js/script.js"></script>
+
+    </body>
+</html>
+
+
diff --git a/process/css/letter_gothic.ttf b/process/css/letter_gothic.ttf
new file mode 100755 (executable)
index 0000000..75b31b1
Binary files /dev/null and b/process/css/letter_gothic.ttf differ
diff --git a/process/css/main.css b/process/css/main.css
new file mode 100755 (executable)
index 0000000..c029dc5
--- /dev/null
@@ -0,0 +1,274 @@
+/*****************************************************************************/
+/*
+/* Common
+/*
+/*****************************************************************************/
+
+/* Global Reset */
+* {
+  margin: 0;
+  padding: 0;
+}
+
+@font-face
+{
+  font-family: lettergothic;
+  src: url(letter_gothic.ttf);
+}
+
+html, body { height: 100%; }
+
+body {
+  background-color: #f4f4f4;
+  font: 12px Menlo, "Consolas", "Andale Mono", "Lucida Console", monospace;
+  /*animation: fadein 1s;*/
+   /* Firefox */
+  /*-moz-animation: fadein 1s;*/
+   /* Safari and Chrome */
+  /*-webkit-animation: fadein 1s;*/
+   /* Opera */  
+  /*-o-animation: fadein 1s;*/
+}
+
+/*
+@keyframes fadein {
+    from {
+        opacity:0;
+    }
+    to {
+        opacity:1;
+    }
+}
+@-moz-keyframes fadein { /* Firefox */
+    from {
+        opacity:0;
+    }
+    to {
+        opacity:1;
+    }
+}
+@-webkit-keyframes fadein { /* Safari and Chrome */
+    from {
+        opacity:0;
+    }
+    to {
+        opacity:1;
+    }
+}
+@-o-keyframes fadein { /* Opera */
+    from {
+        opacity:0;
+    }
+    to {
+        opacity: 1;
+    }
+}*/
+
+h1,h2,h3, h4, h5, h6 {
+
+  font-size: 1em;
+  color:#000;
+  line-height:1.5em;
+  font-weight:bold;
+  margin: 1em 0;
+}
+h1 { 
+  
+  margin:1em 0; 
+  font-size:2.8em;
+  padding-bottom:0.25em;
+  text-align:center;
+  line-height:1.1em;
+  font-family:lettergothic;
+  border-bottom:1px solid #aaa;
+}
+h2, h3 { 
+  text-align:center;
+  margin:3em 0 2em 0; 
+  font-size:1em;
+  
+}
+h3 {
+  text-align:left;
+  margin:1.5em 0 0.5em;
+}
+
+p { margin: 1em 0; }
+
+a         { color: #00a; }
+a:hover   { color: #000; }
+a:visited { color: #a0a; }
+
+blockquote { padding:1em; font-style:italic; }
+
+p { text-align:left; }
+
+header {
+  margin-bottom:2em;
+  position:absolute;
+  top: 2em;
+  left: 1em;
+}
+
+
+
+/*****************************************************************************/
+/*
+/* Home
+/*
+/*****************************************************************************/
+.posts {
+  margin:0;
+  padding:0;
+  list-style-type: none;
+  margin-bottom: 2em;
+}
+
+.posts a {
+  display: block;
+  padding: 1em 1em 1em 1.2em;
+  outline: none;
+  color: #000;
+  text-transform: uppercase;
+  letter-spacing: 1px;
+  font-weight: 400;
+  text-decoration:none;
+}
+
+.posts li a:hover {
+  text-decoration:underline;
+  background: rgba(0,0,0,0.8);
+  color: #fff;
+}
+
+.posts li {
+  font-family: lettergothic, sans;
+  font-size:1.2em;
+  line-height:1.1em;
+}
+
+.posts span {
+  color: #aaa;
+  font-family: Monaco, "Courier New", monospace;
+}
+
+/* sidebar */
+.sidebar {
+  position:absolute;
+  top:2em;
+  left:1em;
+  text-align:left;
+}
+.sidebar .meta {
+  text-align:left;
+}
+
+
+/*****************************************************************************/
+/*
+/* Site
+/*
+/*****************************************************************************/
+
+.site {
+  margin: 2em auto 2em auto;
+  padding: 0 5em;
+  max-width: 800px;
+  line-height: 1.5em;
+}
+
+
+
+.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: #888;
+  text-align:center;
+}
+
+.footer {
+  text-align:center;
+  color: #999;
+  margin: 2em 0;
+}
+
+.nav {
+  font-size:2em;
+  position:absolute;
+  top:1em;
+  left:1em;
+  display:block;
+  width:2em;
+  height:2em;
+  cursor:pointer;
+}
+.nav a {
+  font-family: lettergothic;
+  text-decoration:none;
+}
+
+
+
+/*****************************************************************************/
+/*
+/* Posts
+/*
+/*****************************************************************************/
+.post {
+  margin-top:2em;
+}
+/* standard */
+.post pre {
+  border: 1px solid #ddd;
+  padding: 0 .4em;
+  background-color:#fff;
+}
+
+.post ul, .post ol {
+  margin-left: 1.35em;
+}
+
+.post code {
+  border: 1px solid #ddd;
+  color:#000;
+  background-color: #fff;
+  padding: .2em .4em;
+  border-radius:0.2em;
+}
+
+.post pre code {
+  border: none;
+}
+
+.post img { max-width:800px; }
+
+/* terminal */
+.post pre.terminal {
+  border: 1px solid #000;
+  background-color: #333;
+  color: #FFF;
+}
+
+.post pre.terminal code {
+  background-color: #333;
+}
diff --git a/process/css/normalize.css b/process/css/normalize.css
new file mode 100644 (file)
index 0000000..ae8bc83
--- /dev/null
@@ -0,0 +1,425 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ *    user zoom.
+ */
+
+html {
+  font-family: sans-serif; /* 1 */
+  -ms-text-size-adjust: 100%; /* 2 */
+  -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+  margin: 0;
+}
+
+/* HTML5 display definitions
+   ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+  display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+  display: inline-block; /* 1 */
+  vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+  display: none;
+}
+
+/* Links
+   ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+  background: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+  outline: 0;
+}
+
+/* Text-level semantics
+   ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+  font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+  font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+  background: #ff0;
+  color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+  font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sup {
+  top: -0.5em;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+/* Embedded content
+   ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+  border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+  overflow: hidden;
+}
+
+/* Grouping content
+   ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+  margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+  height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+  overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+
+/* Forms
+   ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ *    Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  color: inherit; /* 1 */
+  font: inherit; /* 2 */
+  margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+  overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+  text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ *    and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ *    `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button; /* 2 */
+  cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+  line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ *    (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+  -webkit-appearance: textfield; /* 1 */
+  -moz-box-sizing: content-box;
+  -webkit-box-sizing: content-box; /* 2 */
+  box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+  border: 0; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+  overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+  font-weight: bold;
+}
+
+/* Tables
+   ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+td,
+th {
+  padding: 0;
+}
\ No newline at end of file
diff --git a/process/css/syntax.css b/process/css/syntax.css
new file mode 100644 (file)
index 0000000..2774b76
--- /dev/null
@@ -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/process/gh-td/index.html b/process/gh-td/index.html
new file mode 100644 (file)
index 0000000..69a3ba1
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+        <title>Grasshopper -> TouchDesigner Bridge</title>
+        <meta name="viewport" content="width=device-width">
+        <link rel="stylesheet" type="text/css" href="/process/css/normalize.css" />
+        <link rel="stylesheet" href="/process/css/syntax.css">
+        <link rel="stylesheet" href="/process/css/main.css">
+    </head>
+    <body>
+
+      <div class="site">      
+        <div class="nav">
+  <a href="/">&#9776;</a>
+</div>
+
+<h1>Grasshopper -> TouchDesigner Bridge</h1>
+
+<p class="meta">
+  2014/04/23
+</p>
+
+<div class="post">
+<h2>Abstract</h2>
+
+<p>A proof-of-concept collection of patches that shares polygon mesh geometry from Grasshopper to TouchDesigner in realtime via OSC. The ability to share mesh data between Grasshopper and TouchDesigner allows for a streamlined workflow when projection-mapping geometry. It eliminates a mesh export/import step, and doesn&#39;t rely on TouchDesigner&#39;s mesh editing tools. It streamlines the process of fabricating objects, as it closely links the fabrication process of the form to the projection mapping process. Grasshopper, a parametric geometry environment, allows for great control over the verticies, planes, and normals of a 3D mesh, which gets sent to the TouchDesigner graphics environment. Any changes to a mesh done in Grasshopper translates to TouchDesigner in real time. This is a proof of concept and unoptomized for large meshes.</p>
+
+<h3>Software</h3>
+
+<ul>
+<li><a href="http://rhino3d.com">Rhino3D</a></li>
+<li><a href="http://www.grasshopper3d.com/">Grasshopper3D</a>
+
+<ul>
+<li><a href="http://www.grasshopper3d.com/group/ghowl">gHowl</a></li>
+<li><a href="http://www.food4rhino.com/project/ghpython">GhPython</a></li>
+</ul></li>
+<li><a href="https://www.derivative.ca/">TouchDesigner</a></li>
+</ul>
+
+<h3>Screenshots</h3>
+
+<h4>Rhino/Grasshopper</h4>
+
+<p><img src="https://raw.githubusercontent.com/quilime/gh-td/master/screenshots/sender_gh.PNG" alt=""></p>
+
+<h4>TouchDesigner</h4>
+
+<p><img src="https://raw.githubusercontent.com/quilime/gh-td/master/screenshots/receive_01.PNG" alt=""></p>
+
+<h3>Source</h3>
+
+<p><a href="https://github.com/quilime/gh-td">https://github.com/quilime/gh-td</a></p>
+
+</div>
+          
+      </div>
+    
+      <div class="footer">
+        <p class="meta">
+        &copy; 2014 <a href="http://gabrieldunne.com">Gabriel Dunne</a>
+        </p>
+      </div>
+        
+      <script src="/process/js/script.js"></script>
+
+    </body>
+</html>
+
+
diff --git a/process/index.html b/process/index.html
new file mode 100644 (file)
index 0000000..2af5a8b
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+        <title>index</title>
+        <meta name="viewport" content="width=device-width">
+        <link rel="stylesheet" type="text/css" href="/process/css/normalize.css" />
+        <link rel="stylesheet" href="/process/css/syntax.css">
+        <link rel="stylesheet" href="/process/css/main.css">
+    </head>
+    <body>
+
+      <div class="site">      
+        <h1>process</h1>
+
+
+<h3>code</h3>  
+  <ul class="posts">
+    
+      
+        
+      
+    
+      
+        
+          <li><a href="/process/gh-td/">Grasshopper -> TouchDesigner Bridge</a></li>
+        
+      
+    
+  </ul>  
+
+<h3>projects</h3>  
+  <ul class="posts">
+    
+      
+        
+      
+    
+      
+        
+          <li><a href="/process/tetra-table/">Tetra Table</a></li>
+        
+      
+        
+          <li><a href="/process/tetra-field/">Tetra Field</a></li>
+        
+      
+    
+  </ul>  
+
+<h3>articles</h3>  
+  <ul class="posts">
+    
+      
+        
+      
+    
+      
+        
+          <li><a href="/process/woodmitres/">Mitre Solutions for Fabricating Geometric Forms out of Wood</a></li>
+        
+      
+    
+  </ul>  
+
+          
+      </div>
+    
+      <div class="footer">
+        <p class="meta">
+        &copy; 2014 <a href="http://gabrieldunne.com">Gabriel Dunne</a>
+        </p>
+      </div>
+        
+      <script src="/process/js/script.js"></script>
+
+    </body>
+</html>
+
+
diff --git a/process/js/script.js b/process/js/script.js
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/process/tetra-field/index.html b/process/tetra-field/index.html
new file mode 100644 (file)
index 0000000..36ec6c7
--- /dev/null
@@ -0,0 +1,140 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+        <title>Tetra Field</title>
+        <meta name="viewport" content="width=device-width">
+        <link rel="stylesheet" type="text/css" href="/process/css/normalize.css" />
+        <link rel="stylesheet" href="/process/css/syntax.css">
+        <link rel="stylesheet" href="/process/css/main.css">
+    </head>
+    <body>
+
+      <div class="site">      
+        <div class="nav">
+  <a href="/">&#9776;</a>
+</div>
+
+<h1>Tetra Field</h1>
+
+<p class="meta">
+  2014/04/24
+</p>
+
+<div class="post">
+<p><img src="https://farm6.staticflickr.com/5505/11228006956_0a33de14b9_c.jpg" alt="Finished"></p>
+
+<p><em>Tetra Field</em><br>
+Gabriel Dunne<br>
+2014<br>
+plywood, projector, touchdesigner, grasshopper</p>
+
+<p><em>Tetra Field</em> consists of a series of projection-mapped truncated tetrahedrons laser-cut from 10mm bitch ply. They vary in size, orientation, truncation, and all have a boolean intersection with the wall as if each object is embedded within it.  </p>
+
+<p>This installation was completed over the span of 2 days as an experiment in developing a process for procedural sculptural form that is closely linked with realtime projection-mapped graphics. </p>
+
+<p>Sculptural Forms created in Grasshopper had their polygon mesh information shared with TouchDesigner from via a <a href="/gh-td/">Grasshopper -&gt; TouchDesigner Bridge</a>. This allowed the fabrication of the physical object and and the projection graphics to be closely related. </p>
+
+<h3>Software</h3>
+
+<ul>
+<li><a href="http://rhino3d.com">Rhino3D</a></li>
+<li><a href="http://www.grasshopper3d.com/">Grasshopper3D</a>
+
+<ul>
+<li><a href="http://www.grasshopper3d.com/group/ghowl">gHowl</a></li>
+<li><a href="http://www.food4rhino.com/project/ghpython">GhPython</a></li>
+</ul></li>
+<li><a href="https://www.derivative.ca/">TouchDesigner</a></li>
+</ul>
+
+<h3>Installation Hardware</h3>
+
+<ul>
+<li>LCD Projector</li>
+<li>Windows PC with NVidia graphics card.</li>
+</ul>
+
+<h3>Fabrication Tools</h3>
+
+<ul>
+<li>Laser Cutter</li>
+</ul>
+
+<h3>Materials</h3>
+
+<ul>
+<li>10mm Plywood </li>
+<li>Cyanoacrylate Super Glue</li>
+<li>Neodynimum Magnets</li>
+<li>Angle Brackets</li>
+<li>Gap-filling primer</li>
+<li>White Silicon Caulk</li>
+<li>Gaffers Tape</li>
+<li>L-Brackets</li>
+</ul>
+
+<h2>Design &amp; Fabrication</h2>
+
+<p>Geometry was created in Grasshopper/Rhino via the LunchBox toolkit.</p>
+
+<p><img src="https://raw.githubusercontent.com/quilime/gh-td/master/screenshots/sender_gh.PNG" alt=""></p>
+
+<h3>Supports</h3>
+
+<p>[supports image]</p>
+
+<p><img src="https://farm8.staticflickr.com/7179/13884653138_d4d1784c6c_b.jpg" alt="">
+Gometry and supports layed out for cutting.</p>
+
+<h2>Laser Cutting</h2>
+
+<p><img src="https://farm4.staticflickr.com/3698/10585763365_b0047bf023_c.jpg" alt="Lasering"></p>
+
+<p>Forms were cut with a LaserSaur laser cutter from sheets of lightweight, low-grade 10mm ply.</p>
+
+<p><img src="https://farm8.staticflickr.com/7308/10585766255_f3b95369ae_c.jpg" alt="Gluing"></p>
+
+<p>Panels are superglued together by hand. The interior support structure relies on two angle wedges, which are attached on the interior of the forms.</p>
+
+<p><img src="https://farm8.staticflickr.com/7430/10585792186_6a42ecb673_c.jpg" alt="Painting"></p>
+
+<p>After glue-up multiple coats of white primer is applied. I did a light hand sanding of the laser-cut plywood edges, as the laser-braze is a tough surface to get paint to adhere to, and therefor coat well enough so it appears completely white. Grey would have looked nice and worked well.</p>
+
+<h2>Installation</h2>
+
+<p>Ultra strong neodynium magnets attracted to large-headed nails or screws into the wall were used as a mounting solution.</p>
+
+<p>[magnet shot]</p>
+
+<h2>Projection Mapping</h2>
+
+<p>[projection mapping patch]</p>
+
+<h2>Future Iterations</h2>
+
+<h3>Software</h3>
+
+<p>This project did not attempt to solve the task of of aligning projections to the physical objects. Because of their simple geometric shape, I had planned to first install them on a surface and register the projections manually. For future iterations, I&#39;d am considering ideas that include embedded fiber-optics in the verticies that would be tracked with an IR camera for a precise, real-time alignment. A huge challenge involved in projection mapping objects is the sheer amount of time it takes to align projections, and creating a real-time mapping solution allows for articulated and or moving installations.</p>
+
+<h3>Fabrication</h3>
+
+<p>This iteration does not include a solution mitered corners, due to the physical tendancies of the laser cutter. However, the lack of mitres simplified the fabrication process considerably and was a benifit -- as this design reveals a channel between faces that makes a perfect area highlight the polygon edge when mapping.</p>
+
+</div>
+          
+      </div>
+    
+      <div class="footer">
+        <p class="meta">
+        &copy; 2014 <a href="http://gabrieldunne.com">Gabriel Dunne</a>
+        </p>
+      </div>
+        
+      <script src="/process/js/script.js"></script>
+
+    </body>
+</html>
+
+
diff --git a/process/tetra-table/index.html b/process/tetra-table/index.html
new file mode 100644 (file)
index 0000000..130ba48
--- /dev/null
@@ -0,0 +1,281 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+        <title>Tetra Table</title>
+        <meta name="viewport" content="width=device-width">
+        <link rel="stylesheet" type="text/css" href="/process/css/normalize.css" />
+        <link rel="stylesheet" href="/process/css/syntax.css">
+        <link rel="stylesheet" href="/process/css/main.css">
+    </head>
+    <body>
+
+      <div class="site">      
+        <div class="nav">
+  <a href="/">&#9776;</a>
+</div>
+
+<h1>Tetra Table</h1>
+
+<p class="meta">
+  2014/04/29
+</p>
+
+<div class="post">
+<p>I&#39;m continuing interations with Tetrahedral geometry because of its simplistic beauty. This article will cover the creation of a truncated tetrahedron shape out of 3/4&quot; material, with a solution for mitred joins between panels. </p>
+
+<h2>Requirements</h2>
+
+<h3>Software</h3>
+
+<ul>
+<li>Rhino</li>
+<li>Grasshopper</li>
+</ul>
+
+<h3>Tools</h3>
+
+<ul>
+<li>Laser Cutter</li>
+<li>Table Saw</li>
+</ul>
+
+<h3>Materials</h3>
+
+<ul>
+<li>Wood Glue</li>
+<li>4&#39; x 8&#39; x 3/4&quot; birch sandply</li>
+</ul>
+
+<h2>Design</h2>
+
+<p>I am using Rhinoceros 3D. There is an evaluation version for Windows or Mac available at <a href="http://www.rhino3d.com/download">http://www.rhino3d.com/download</a>.</p>
+
+<p>There are many of ways to create this type of geometric form, especially with software like Rhino, and its companion plugin for algorhythmic design: Grasshopper. For this tutorial, I&#39;m going to go about it in a way that is based on simple transforms and booleans as an attempt to be software agnostic.</p>
+
+<h2>Creating a Tetrahedron</h2>
+
+<p>I&#39;ll cover two methods for creating a Tetrahedron in Rhino. One is from scratch, the other is using the Pyramid tool. Creating a Tetrahedron from scratch requires knowing the shapes&#39; height based on its edge length. Starting from an edge length of 10, we can use the height formula for a regular tetrahedron:</p>
+
+<p>[height formula]</p>
+
+<p>Then, I use a calculator to solve for <em>h</em>. I&#39;m rounding to the hundreths for brevity, but you should use as many numbers past the decimal that your calculator or computer spits out</p>
+
+<p>2 / 3<br>
+<strong>= 0.667</strong><br>
+squareroot<br>
+<strong>= 0.816</strong><br>
+&#42; 10 (edge length)<br>
+<strong>= 8.164</strong>  </p>
+
+<p>Result: A tetrahedron with edge length 10 will have a height of 8.164.</p>
+
+<p>[polygon video]</p>
+
+<p>If you&#39;re using Rhino want to shortcut the process of do this all from scratch, you can also use the Pyramid tool.</p>
+
+<h2>Pyramid Method</h2>
+
+<p>Type <code>Pyramid</code> into the command line.</p>
+
+<p>Options will appear in the command line. By clicking on the variables, set the options to equal: </p>
+<div class="highlight"><pre><code class="text language-text" data-lang="text">NumSides=3 DirectionalConstraint=Vertical Solid=Yes
+</code></pre></div>
+<p>Click Edge in the Pyramid command.</p>
+
+<p>Type <code>0</code> to set the origin</p>
+
+<p>Type <code>10</code> to set the edge length, and now the base of the pyramid will be constrained to 10 inch edges.</p>
+
+<p>Hold down shift to constrain the axis, and when you orient the tip of the base on the X axis, click once.</p>
+
+<p>[image of constrain]</p>
+
+<p>Type <code>8.16496580927726</code> into the command line. You can be as precise as you like, or just copypasta from this tutorial. In the top view, orient the shape so it&#39;s right side up, and click once.</p>
+
+<p>Tetrahedron!</p>
+
+<h2>Truncation</h2>
+
+<p>Now, we need to truncate our shape.</p>
+
+<p>Fist, we need to find the center of our shape. There are many ways to do this is various software, let&#39;s do it by hand.</p>
+
+<p>First I create a new layer and make it a color.</p>
+
+<p>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.</p>
+
+<p>Then, I draw four lines that originate from the center of each face, and coincides with the far vertex opposite the face.</p>
+
+<p>The center of the form is where these four lines intersect. We can use the &quot;Point&quot; tool to create a point at the intersection.</p>
+
+<p>Type &quot;Move&quot; in the command line, and move our shape and the centerpoint we just created to the origin.</p>
+
+<p>Now we&#39;re centered.</p>
+
+<p>Select everything and group them with Command-G.</p>
+
+<p>Type &quot;Rotate&quot; into the command line.</p>
+
+<p>Type 0 to center at the origin, and set <code>Copy=Yes</code> in the command line options by clicking it.</p>
+
+<p>Hold down shift and click to set the second reference point on the vertical axis.</p>
+
+<p>With shift still held, rotate the form completely around so it&#39;s upside down, and press enter.</p>
+
+<p>Right Click to redo our same rotate command, but make sure Copy is set to Off.</p>
+
+<p>Type &quot;0&quot; to set the origin, hold down shift, and rotate the entire form 180 degrees from the top view.</p>
+
+<p>Now we have two intersecting tetrahedrons. If we were to do a boolean combine of these two objects, we would have an icosohedron.</p>
+
+<p>To create our truncation,we can scale one of the tetrahedrons to our liking, using the center point as the scale origin.</p>
+
+<p>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.</p>
+
+<p>If you want t truncate the shape so it creates a perfect hexagon on three sides, enter &quot;0&quot; as the origin, and enter <code>1.666666666</code> as the scale factor.</p>
+
+<p>After you complete the Boolean2Objects command, your shape is complete.</p>
+
+<p>You can clean up and delete all the extra guide lines at this point.</p>
+
+<p>[blue truncated tet]</p>
+
+<p>Now, we need to scale the object to our build size.</p>
+
+<p>For my design, I&#39;m going to ultimately use this as a table, so I&#39;m going to cut off a bit from the bottom. This actually adds a little more work because I&#39;ll have to cut a few unique shapes in the plywood.</p>
+
+<p>I&#39;m going to truncate at a <code>0.6666</code> of the length of the hexagon edges, because thirds are nice and the fractions are inherent to this geometry. I create a line along the edge of the lower hexagon sides, and then use the Divide tool with 3 segments.</p>
+
+<p>I then create a rectangle plane, and align it to the 2/3d&#39;s segement, and do another boolean.</p>
+
+<p>I chose 22&quot; as the height of the finished object, which fits onto a single sheet of 4&#39; x 8&#39; ply.</p>
+
+<p>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.</p>
+
+<p>Move the object to the origin, and draw a 22&quot; inch line from 0 on the Y axis. We&#39;ll use this line to scale to.</p>
+
+<p>Then, I make trace all the edges, do 3pt orients, and align them to the cutting plane.</p>
+
+<h2>Creating Thickness</h2>
+
+<p>Steps to create material thickness:</p>
+
+<ol>
+<li>Offset mesh by .75</li>
+<li>Convert mesh to surfaces</li>
+<li>DupBorderEdge to find edge curves</li>
+<li>Loft inner curve to outer curve</li>
+</ol>
+
+<p>You only need to do this for each individual piece, and then duplicate them.</p>
+
+<h2>Measuring Mitre Angles</h2>
+
+<p>We need  guidlines for measuring perpendicular to the edge of the face.</p>
+
+<p>[mitre angle edge measure]</p>
+
+<p>Then we measure the angle between the faces by typing &quot;angle&quot; in the command line, and selecting the beginning and ending of both lines. Then we find the mitre angle by dividing in half.</p>
+
+<p>For Support A, the hexagon-to-hexagon mating edge:</p>
+
+<p>70.529 / 2<br>
+<strong>= 35.2645</strong></p>
+
+<p>And for Support B, the hexagon-to-triangle edges:</p>
+
+<p>109.471 / 2<br>
+<strong>= 54.7355</strong></p>
+
+<p>We&#39;re going to use these angles to make some internal support triangle blocks.</p>
+
+<p>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&#39;t be mated, so there&#39;s no puzzle-piece confusing when we assemble.</p>
+
+<p>We&#39;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.</p>
+
+<p>[cutfile image]</p>
+
+<p>Now, we lasercut!</p>
+
+<p>[Metabeam Cutting Awesomeness]</p>
+
+<p>Now that the shapes are cut, we can mitre the edges.</p>
+
+<p>Using masking tape, I mark all the angles and lay them out.</p>
+
+<p>I&#39;m using a 1HP Bosche Trim Router with a tilt add-on.</p>
+
+<p>This is an analog method of setting the angle, I typically error on the side of cutting more material away, because it&#39;s easier to fix a gap on the inside of the form, rather than the edges.</p>
+
+<p>[photos of setting the router angle]</p>
+
+<p>I cut all the edges one angle before setting the tool again.</p>
+
+<p>[cutting angles A]</p>
+
+<p>Now set the router to our additional angle</p>
+
+<p>[cutting angles B]</p>
+
+<p>We have one more special angle to cut, for the parts of the form that rest on the ground.</p>
+
+<p>[photo of cutting foot angle]</p>
+
+<p>We&#39;re done cutting!</p>
+
+<h2>Assembly</h2>
+
+<p>We&#39;ll work upside down, and build the form up. Place the top of the form upside down on the worksurface</p>
+
+<p>[form upside down]</p>
+
+<p>And glue in supports. We can also screw or brad them in. I&#39;m measuing out a fractional 1/3 position for the positions of my supports.</p>
+
+<p>[adding supports]</p>
+
+<p>Next, we add supports to the hexagonal sides, in order.</p>
+
+<p>[lay out supports on sides]</p>
+
+<p>Attach supports to hexagonal sides with glue and or brads</p>
+
+<p>[attaching supports]</p>
+
+<p>Arrange the sides and use a ratchet strap to hold them together while the glue sets</p>
+
+<p>[Setting sides]</p>
+
+<p>Attach sides to tabletop.</p>
+
+<p>[Attach hexagonal sides to eachother]</p>
+
+<p>The last part is the attach the triangles via glue and/or brads.</p>
+
+<p>[attaching triangles]</p>
+
+<p>Using an electric sander at first, buff the entire shape, and then lightly hit the corners by hand.</p>
+
+<p>[picture of finishing corners]</p>
+
+<p>Use your choice of finish to seal. I went with a combination beezwax oil.</p>
+
+<p>[finished glamour shots]</p>
+
+</div>
+          
+      </div>
+    
+      <div class="footer">
+        <p class="meta">
+        &copy; 2014 <a href="http://gabrieldunne.com">Gabriel Dunne</a>
+        </p>
+      </div>
+        
+      <script src="/process/js/script.js"></script>
+
+    </body>
+</html>
+
+
diff --git a/process/woodmitres/index.html b/process/woodmitres/index.html
new file mode 100644 (file)
index 0000000..110760f
--- /dev/null
@@ -0,0 +1,280 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+        <title>Mitre Solutions for Fabricating Geometric Forms out of Wood</title>
+        <meta name="viewport" content="width=device-width">
+        <link rel="stylesheet" type="text/css" href="/process/css/normalize.css" />
+        <link rel="stylesheet" href="/process/css/syntax.css">
+        <link rel="stylesheet" href="/process/css/main.css">
+    </head>
+    <body>
+
+      <div class="site">      
+        <div class="nav">
+  <a href="/">&#9776;</a>
+</div>
+
+<h1>Mitre Solutions for Fabricating Geometric Forms out of Wood</h1>
+
+<p class="meta">
+  2014/04/24
+</p>
+
+<div class="post">
+<h2>Truncated Tetrahedron Stool/Table</h2>
+
+<p>I&#39;m continuing my interations with the Tetrahedron model. I like using it for experiments because of it&#39;s a very basic &quot;root&quot; shape. This article will cover the creation of a truncated tetrahedron shape out of 3/4&quot; material, with mitred joins.</p>
+
+<p>Software used in this tutorial:
+  - Rhino
+  - Grasshopper</p>
+
+<p>Tools:
+  - Laser Cutter
+  - Table Saw</p>
+
+<p>Materials
+  - 1 sheet 4&#39; x 8&#39; x 1/2&quot; birch sandply</p>
+
+<p>Step 1: Shape Design</p>
+
+<p>I am using Rhinoceros 3D for this tutorial. You can download a evaluation version for Windows or Mac here: http://www.rhino3d.com/download</p>
+
+<p>Start Rhino and create a new file with the template Small/Inches.</p>
+
+<p>[01-loading-rhino.png]</p>
+
+<p>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&#39;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.</p>
+
+<p>Tetrahedron From Scratch</p>
+
+<p>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:</p>
+
+<p>[height formula]</p>
+
+<p>We can use a calculator to solve for h. I&#39;m rounding to the hundreths for brevity, but you should use as many numbers past the decimal that your calculator or computer spits out</p>
+
+<p>2 / 3
+0.667
+squareroot
+0.816
+* 10 (edge length)
+8.164</p>
+
+<p>This shows that a tetrahedron with edge length 10 will have a height of 8.164.</p>
+
+<p>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:</p>
+
+<p>[polygon video]</p>
+
+<p>Polygon Method</p>
+
+<p>Type &quot;Polygon&quot;</p>
+
+<p>Pyramid Method</p>
+
+<p>Type &quot;Pyramid&quot; into the command line.</p>
+
+<p>Options will appear in the command line. Set:
+NumSides=3 DirectionalConstraint=Vertical Solid=Yes</p>
+
+<p>Click Edge in the Pyramid command.</p>
+
+<p>Type &quot;0&quot; to set the origin</p>
+
+<p>Type &quot;10&quot; to set the edge length, and now the base of the pyramid will be constrained to 10 inch edges.</p>
+
+<p>Hold down shift to constrain the axis, and when you orient the tip of the base on the X axis, click once.</p>
+
+<p>[image of constrain]</p>
+
+<p>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&#39;s right side up, and click once.</p>
+
+<p>Tetrahedron!</p>
+
+<h2>Truncation</h2>
+
+<p>Now, we need to truncate our shape.</p>
+
+<p>Fist, we need to find the center of our shape. There are many ways to do this is various software, let&#39;s do it by hand.</p>
+
+<p>First I create a new layer and make it a color.</p>
+
+<p>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.</p>
+
+<p>Then, I draw four lines that originate from the center of each face, and coincides with the far vertex opposite the face.</p>
+
+<p>The center of the form is where these four lines intersect. We can use the &quot;Point&quot; tool to create a point at the intersection.</p>
+
+<p>Type &quot;Move&quot; in the command line, and move our shape and the centerpoint we just created to the origin.</p>
+
+<p>Now we&#39;re centered.</p>
+
+<p>Select everything and group them with Command-G.</p>
+
+<p>Type &quot;Rotate&quot; into the command line.</p>
+
+<p>Type 0 to center at the origin, and set &quot;Copy&quot; to &quot;Yes&quot; in the command line options by clicking it.</p>
+
+<p>Hold down shift and click to set the second reference point on the vertical axis.</p>
+
+<p>With shift still held, rotate the form completely around so it&#39;s upside down, and press enter.</p>
+
+<p>Right Click to redo our same rotate command, but make sure Copy is set to Off.</p>
+
+<p>Type &quot;0&quot; to set the origin, hold down shift, and rotate the entire form 180 degrees from the top view.</p>
+
+<p>Now we have two intersecting tetrahedrons. If we were to do a boolean combine of these two objects, we would have an icosohedron.</p>
+
+<p>To create our truncation,we can scale one of the tetrahedrons to our liking, using the center point as the scale origin.</p>
+
+<p>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.</p>
+
+<p>If you want t truncate the shape so it creates a perfect hexagon on three sides, enter &quot;0&quot; as the origin, and enter &quot;1.666666666&quot; as the scale factor.</p>
+
+<p>After you complete the Boolean2Objects command, your shape is complete.</p>
+
+<p>You can clean up and delete all the extra guide lines at this point.</p>
+
+<p>[blue truncated tet]</p>
+
+<p>Now, we need to scale the object to our build size.</p>
+
+<p>Stretch break.</p>
+
+<p>Ok, we&#39;re back.</p>
+
+<p>For my design, I&#39;m going to ultimately use this as a table, so I&#39;m going to cut off a bit from the bottom. This actually adds a little more work because I&#39;ll have to cut a few unique shapes in the plywood.</p>
+
+<p>I&#39;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.</p>
+
+<p>I then create a rectangle plane, and align it to the 2/3d&#39;s segement, and do another boolean.</p>
+
+<p>I chose 22&quot; as the height of the finished object, which fits onto a single sheet of 4&#39; x 8&#39; ply.</p>
+
+<p>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.</p>
+
+<p>Move the object to the origin, and draw a 22&quot; inch line from 0 on the Y axis. We&#39;ll use this line to scale to.</p>
+
+<p>Then, I make trace all the edges, do 3pt orients, and align them to the cutting plane.</p>
+
+<h2>Creating Thickness</h2>
+
+<p>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</p>
+
+<p>you only need to do this for each individual piece, and then duplicate them.</p>
+
+<h2>Measuring the Mitre Angles</h2>
+
+<p>We need to draw some guidlines for measuring perpendicular to the edge of the face.</p>
+
+<p>[mitre angle edge measure]</p>
+
+<p>Then we measure the angle between the faces by typing &quot;angle&quot; in the command line, and selecting the beginning and ending of both lines. Then we find the mitre angle by dividing in half.</p>
+
+<p>For Support A, the hexagon-to-hexagon mating edge:
+70.529
+/ 2
+35.2645</p>
+
+<p>And for Support B, the hexagon-to-triangle edges:
+109.471
+/ 2
+54.7355</p>
+
+<p>We&#39;re going to use these angles to make some internal support triangle blocks.</p>
+
+<p>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&#39;t be mated, so there&#39;s no puzzle-piece confusing when we assemble.</p>
+
+<p>We&#39;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.</p>
+
+<p>[cutfile image]</p>
+
+<p>Now, we lasercut!</p>
+
+<p>[Metabeam Cutting Awesomeness]</p>
+
+<p>Now that the shapes are cut, we can mitre the edges.</p>
+
+<p>Using masking tape, I mark all the angles and lay them out.</p>
+
+<p>I&#39;m using a 1HP Bosche Trim Router with a tilt add-on.</p>
+
+<p>This is an analog method of setting the angle, I typically error on the side of cutting more material away, because it&#39;s easier to fix a gap on the inside of the form, rather than the edges.</p>
+
+<p>[photos of setting the router angle]</p>
+
+<p>I cut all the edges one angle before setting the tool again.</p>
+
+<p>[cutting angles A]</p>
+
+<p>Now set the router to our additional angle</p>
+
+<p>[cutting angles B]</p>
+
+<p>We have one more special angle to cut, for the parts of the form that rest on the ground.</p>
+
+<p>[photo of cutting foot angle]</p>
+
+<p>We&#39;re done cutting!</p>
+
+<h2>Assembly</h2>
+
+<p>We&#39;ll work upside down, and build the form up. Place the top of the form upside down on the worksurface</p>
+
+<p>[form upside down]</p>
+
+<p>And glue in supports. We can also screw or brad them in. I&#39;m measuing out a fractional 1/3 position for the positions of my supports.</p>
+
+<p>[adding supports]</p>
+
+<p>Next, we add supports to the hexagonal sides, in order.</p>
+
+<p>[lay out supports on sides]</p>
+
+<p>Attach supports to hexagonal sides with glue and or brads</p>
+
+<p>[attaching supports]</p>
+
+<p>Arrange the sides and use a ratchet strap to hold them together while the glue sets</p>
+
+<p>[Setting sides]</p>
+
+<p>Attach sides to tabletop.</p>
+
+<p>[Attach hexagonal sides to eachother]</p>
+
+<p>The last part is the attach the triangles via glue and/or brads.</p>
+
+<p>[attaching triangles]</p>
+
+<p>Using an electric sander at first, buff the entire shape, and then lightly hit the corners by hand.</p>
+
+<p>[picture of finishing corners]</p>
+
+<p>Use your choice of finish to seal. I went with a combination beezwax oil.</p>
+
+<p>[finished glamour shots]</p>
+
+</div>
+          
+      </div>
+    
+      <div class="footer">
+        <p class="meta">
+        &copy; 2014 <a href="http://gabrieldunne.com">Gabriel Dunne</a>
+        </p>
+      </div>
+        
+      <script src="/process/js/script.js"></script>
+
+    </body>
+</html>
+
+