Files
brickr/docs/articles/models-from-tables.html
ryantimpe e17fd45662 Pkgdown
2020-05-09 16:02:55 -04:00

221 lines
20 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<!-- Generated by pkgdown: do not edit by hand --><html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3D models from tables • brickr</title>
<!-- favicons --><link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="../favicon-32x32.png">
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="../apple-touch-icon.png">
<link rel="apple-touch-icon" type="image/png" sizes="120x120" href="../apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" type="image/png" sizes="76x76" href="../apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" type="image/png" sizes="60x60" href="../apple-touch-icon-60x60.png">
<!-- jquery --><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script><!-- Bootstrap --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha256-bZLfwXAP04zRMK2BjiO8iu9pf4FbLqX6zitd+tIvLhE=" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha256-nuL8/2cJ5NDSSwnKD8VqreErSWHtnEP9E7AySL+1ev4=" crossorigin="anonymous"></script><!-- bootstrap-toc --><link rel="stylesheet" href="../bootstrap-toc.css">
<script src="../bootstrap-toc.js"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/all.min.css" integrity="sha256-mmgLkCYLUQbXn0B1SRqzHar6dCnv9oZFPEC1g1cwlkk=" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.12.1/css/v4-shims.min.css" integrity="sha256-wZjR52fzng1pJHwx4aV2AO3yyTOXrcDW7jBpJtTwVxw=" crossorigin="anonymous">
<!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js" integrity="sha256-inc5kl9MA1hkeYUt+EC3BhlIgyp/2jDIyBLS6k3UxPI=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/headroom.min.js" integrity="sha256-AsUX4SJE1+yuDu5+mAVzJbuYNPHj/WroHuZ8Ir/CkE0=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.11.0/jQuery.headroom.min.js" integrity="sha256-ZX/yNShbjqsohH1k95liqY9Gd8uOiE1S4vZc+9KQ1K4=" crossorigin="anonymous"></script><!-- pkgdown --><link href="../pkgdown.css" rel="stylesheet">
<script src="../pkgdown.js"></script><link href="../extra.css" rel="stylesheet">
<meta property="og:title" content="3D models from tables">
<meta property="og:description" content="brickr">
<meta property="og:image" content="http://brickr.org/logo.png">
<!-- mathjax --><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js" integrity="sha256-nvJJv9wWKEm88qvoQl9ekL2J+k/RWIsaSScxxlsrv8k=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/config/TeX-AMS-MML_HTMLorMML.js" integrity="sha256-84DKXVJXs0/F8OTMzX4UR909+jtl4G7SPypPavF+GfA=" crossorigin="anonymous"></script><!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body data-spy="scroll" data-target="#toc">
<div class="container template-article">
<header><div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span class="navbar-brand">
<a class="navbar-link" href="../index.html">brickr</a>
<span class="version label label-default" data-toggle="tooltip" data-placement="bottom" title="Released version">0.3.4</span>
</span>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>
<a href="../index.html">
<span class="fas fa fas fa-home fa-lg"></span>
</a>
</li>
<li>
<a href="../reference/index.html">Reference</a>
</li>
<li>
<a href="../articles/index.html">Articles</a>
</li>
<li>
<a href="../news/index.html">Changelog</a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>
<a href="https://github.com/ryantimpe/brickr/">
<span class="fab fa fab fa-github fa-lg"></span>
</a>
</li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
<!--/.container -->
</div>
<!--/.navbar -->
</header><div class="row">
<div class="col-md-9 contents">
<div class="page-header toc-ignore">
<h1 data-toc-skip>3D models from tables</h1>
<small class="dont-index">Source: <a href="https://github.com/ryantimpe/brickr/blob/master/vignettes/models-from-tables.Rmd"><code>vignettes/models-from-tables.Rmd</code></a></small>
<div class="hidden name"><code>models-from-tables.Rmd</code></div>
</div>
<div id="getting-started" class="section level2">
<h2 class="hasAnchor">
<a href="#getting-started" class="anchor"></a>Getting started</h2>
<p>The <code>bricks_from_*</code> series of functions creates 3D models of LEGO bricks from a variety of input formats.</p>
<p><code><a href="../reference/bricks_from_table.html">bricks_from_table()</a></code> converts a matrix-shaped table of integers into LEGO bricks, where most columns are x-coordinates, rows are y-coordinates, and a special <code>Level</code> column denotes the elevation of the row. For simple models, this table can be made manually using <code><a href="https://rdrr.io/r/base/data.frame.html">data.frame()</a></code> or <code><a href="https://tibble.tidyverse.org/reference/tribble.html">tibble::tribble()</a></code>.</p>
<p>For more advanced models, its recommended you use MS Excel or a .csv file. <code><a href="../reference/bricks_from_excel.html">bricks_from_excel()</a></code> is a wrapper function to more easily build models designed using a Microsoft Excel template. Please see this repo: <a href="https://github.com/ryantimpe/brickr_toybox">brickr toybox</a>.</p>
<p>Pass the output of any <code>bricks_from_*()</code> function to <code><a href="../reference/build_bricks.html">build_bricks()</a></code> to render it as a 3D model.</p>
</div>
<div id="individual-bricks" class="section level2">
<h2 class="hasAnchor">
<a href="#individual-bricks" class="anchor"></a>Individual bricks</h2>
<p>Create a single 2x4 brick with a 2x4 data frame, with an additional column to specify the Level. These can be letters or numbers.</p>
<div class="sourceCode" id="cb1"><html><body><pre class="r"><span class="co">#This is a 2 (columns) x 4 (rows) brick</span>
(<span class="no">brick</span> <span class="kw">&lt;-</span> <span class="fu"><a href="https://rdrr.io/r/base/data.frame.html">data.frame</a></span>(
<span class="kw">Level</span><span class="kw">=</span><span class="st">"A"</span>,
<span class="kw">X1</span> <span class="kw">=</span> <span class="fu"><a href="https://rdrr.io/r/base/rep.html">rep</a></span>(<span class="fl">3</span>,<span class="fl">4</span>), <span class="co">#The number 3 is the brickrID for 'bright red'</span>
<span class="kw">X2</span> <span class="kw">=</span> <span class="fu"><a href="https://rdrr.io/r/base/rep.html">rep</a></span>(<span class="fl">3</span>,<span class="fl">4</span>)
))
<span class="co">#&gt; Level X1 X2</span>
<span class="co">#&gt; 1 A 3 3</span>
<span class="co">#&gt; 2 A 3 3</span>
<span class="co">#&gt; 3 A 3 3</span>
<span class="co">#&gt; 4 A 3 3</span>
<span class="no">brick</span> <span class="kw">%&gt;%</span>
<span class="fu"><a href="../reference/bricks_from_table.html">bricks_from_table</a></span>() <span class="kw">%&gt;%</span>
<span class="fu"><a href="../reference/build_bricks.html">build_bricks</a></span>()
<span class="kw pkg">rgl</span><span class="kw ns">::</span><span class="fu"><a href="https://rdrr.io/pkg/rgl/man/par3d.html">par3d</a></span>(<span class="kw">userMatrix</span> <span class="kw">=</span> <span class="kw pkg">rgl</span><span class="kw ns">::</span><span class="fu"><a href="https://rdrr.io/pkg/rgl/man/matrices.html">rotate3d</a></span>(<span class="kw pkg">rgl</span><span class="kw ns">::</span><span class="fu"><a href="https://rdrr.io/pkg/rgl/man/par3d.html">par3d</a></span>(<span class="st">"userMatrix"</span>), <span class="fl">1.1</span>*<span class="no">pi</span>/<span class="fl">4</span>, <span class="fl">0</span>, <span class="fl">0</span> ,<span class="fl">1</span>))</pre></body></html></div>
<p><img src="models-from-tables_files/figure-html/bricks_1-1.png" width="288"></p>
<p>Stack many bricks by changing the Level value in the data frame. The script below uses <code><a href="https://purrr.tidyverse.org/reference/map.html">purrr::map_df()</a></code> to avoid copying and pasting. Changing the numeric values inside the data frame for each level creates different colors.</p>
<div class="sourceCode" id="cb2"><html><body><pre class="r"><span class="fl">1</span>:<span class="fl">10</span> <span class="kw">%&gt;%</span>
<span class="kw pkg">purrr</span><span class="kw ns">::</span><span class="fu"><a href="https://purrr.tidyverse.org/reference/map.html">map_df</a></span>(~<span class="kw pkg">dplyr</span><span class="kw ns">::</span><span class="fu"><a href="https://dplyr.tidyverse.org/reference/mutate.html">mutate</a></span>(<span class="no">brick</span>,
<span class="kw">Level</span> <span class="kw">=</span> <span class="no">LETTERS</span>[<span class="no">.x</span>],
<span class="kw">X1</span> <span class="kw">=</span> <span class="no">.x</span>,
<span class="kw">X2</span> <span class="kw">=</span> <span class="no">.x</span>)) <span class="kw">%&gt;%</span>
<span class="fu"><a href="../reference/bricks_from_table.html">bricks_from_table</a></span>() <span class="kw">%&gt;%</span>
<span class="fu"><a href="../reference/build_bricks.html">build_bricks</a></span>(<span class="kw">rgl_lit</span><span class="kw">=</span><span class="fl">FALSE</span>, <span class="kw">outline_bricks</span> <span class="kw">=</span> <span class="fl">TRUE</span>)
<span class="kw pkg">rgl</span><span class="kw ns">::</span><span class="fu"><a href="https://rdrr.io/pkg/rgl/man/par3d.html">par3d</a></span>(<span class="kw">userMatrix</span> <span class="kw">=</span> <span class="kw pkg">rgl</span><span class="kw ns">::</span><span class="fu"><a href="https://rdrr.io/pkg/rgl/man/matrices.html">rotate3d</a></span>(<span class="kw pkg">rgl</span><span class="kw ns">::</span><span class="fu"><a href="https://rdrr.io/pkg/rgl/man/par3d.html">par3d</a></span>(<span class="st">"userMatrix"</span>), <span class="fl">1.1</span>*<span class="no">pi</span>/<span class="fl">4</span>, <span class="fl">0</span>, <span class="fl">0</span> ,<span class="fl">1</span>))</pre></body></html></div>
<p><img src="models-from-tables_files/figure-html/bricks_2-1.png" width="288"></p>
</div>
<div id="full-models" class="section level2">
<h2 class="hasAnchor">
<a href="#full-models" class="anchor"></a>Full models</h2>
<p>The most direct way to create a 3D model is to manually create a data frame. Below, we create a data frame using <code><a href="https://tibble.tidyverse.org/reference/tribble.html">tibble::tribble()</a></code> so we can more easily see the structure as its written.</p>
<p>The data frame has 3 numbers as input (values of 0 are void spaces in the model). Rather than use the default brickr colors for the values of 1, 2, and 3, we define another data frame brick_colors</p>
<div class="sourceCode" id="cb3"><html><body><pre class="r"><span class="no">tree_or_mushroom</span> <span class="kw">&lt;-</span> <span class="kw pkg">tibble</span><span class="kw ns">::</span><span class="fu"><a href="https://tibble.tidyverse.org/reference/tribble.html">tribble</a></span>(
~<span class="no">Level</span>, ~<span class="no">X1</span>, ~<span class="no">X2</span>, ~<span class="no">X3</span>, ~<span class="no">X4</span>, ~<span class="no">X5</span>, ~<span class="no">X6</span>,
<span class="st">"A"</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>,
<span class="st">"A"</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>,
<span class="st">"A"</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>,
<span class="st">"A"</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>, <span class="fl">1</span>,
<span class="st">"B"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"B"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">2</span>, <span class="fl">2</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"B"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">2</span>, <span class="fl">2</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"B"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"C"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"C"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">2</span>, <span class="fl">2</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"C"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">2</span>, <span class="fl">2</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"C"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"D"</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">0</span>,
<span class="st">"D"</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">0</span>,
<span class="st">"D"</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">0</span>,
<span class="st">"D"</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">0</span>,
<span class="st">"E"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"E"</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">0</span>,
<span class="st">"E"</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">0</span>,
<span class="st">"E"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"F"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"F"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"F"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">3</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"F"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"G"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"G"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"G"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">3</span>, <span class="fl">0</span>, <span class="fl">0</span>,
<span class="st">"G"</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>, <span class="fl">0</span>
)
<span class="no">brick_colors</span> <span class="kw">&lt;-</span> <span class="kw pkg">tibble</span><span class="kw ns">::</span><span class="fu"><a href="https://tibble.tidyverse.org/reference/tribble.html">tribble</a></span>(
~<span class="no">`.value`</span>, ~<span class="no">Color</span>,
<span class="fl">1</span>, <span class="st">"Bright green"</span>,
<span class="fl">2</span>, <span class="st">"Dark orange"</span>,
<span class="fl">3</span>, <span class="st">"Dark green"</span>
)
<span class="no">tree_or_mushroom</span> <span class="kw">%&gt;%</span>
<span class="fu"><a href="../reference/bricks_from_table.html">bricks_from_table</a></span>(<span class="no">brick_colors</span>) <span class="kw">%&gt;%</span>
<span class="fu"><a href="../reference/build_bricks.html">build_bricks</a></span>()
<span class="kw pkg">rgl</span><span class="kw ns">::</span><span class="fu"><a href="https://rdrr.io/pkg/rgl/man/par3d.html">par3d</a></span>(<span class="kw">userMatrix</span> <span class="kw">=</span> <span class="kw pkg">rgl</span><span class="kw ns">::</span><span class="fu"><a href="https://rdrr.io/pkg/rgl/man/matrices.html">rotate3d</a></span>(<span class="kw pkg">rgl</span><span class="kw ns">::</span><span class="fu"><a href="https://rdrr.io/pkg/rgl/man/par3d.html">par3d</a></span>(<span class="st">"userMatrix"</span>), <span class="fl">1.1</span>*<span class="no">pi</span>/<span class="fl">4</span>, <span class="fl">0</span>, <span class="fl">0</span> ,<span class="fl">1</span>))</pre></body></html></div>
<p><img src="models-from-tables_files/figure-html/bricks_5-1.png" width="384"></p>
</div>
<div id="bricks-from-excel" class="section level2">
<h2 class="hasAnchor">
<a href="#bricks-from-excel" class="anchor"></a>Bricks from Excel</h2>
<p>When designing larger models, it is much easier to use a spreadsheet program to lay out the bricks for each level.</p>
<p>See <a href="https://github.com/ryantimpe/brickr_toybox">the brickr toybox</a> GitHub repo for some examples and templates.</p>
</div>
</div>
<div class="col-md-3 hidden-xs hidden-sm" id="pkgdown-sidebar">
<nav id="toc" data-toggle="toc"><h2 data-toc-skip>Contents</h2>
</nav>
</div>
</div>
<footer><div class="copyright">
<p>Developed by Ryan Timpe.</p>
</div>
<div class="pkgdown">
<p>Site built with <a href="https://pkgdown.r-lib.org/">pkgdown</a> 1.5.1.</p>
</div>
</footer>
</div>
</body>
</html>