mirror of
https://github.com/ryantimpe/brickr.git
synced 2025-12-30 02:09:34 -06:00
365 lines
36 KiB
HTML
365 lines
36 KiB
HTML
<!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>Tools to emulate the LEGO® System in R • 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.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script><!-- Bootstrap --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha256-916EbMg70RQy9LHiGkXzG8hSg9EdNy97GazNG/aiY1w=" crossorigin="anonymous">
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha256-U5ZEeKfGNOja007MMD3YBI0A3OSZOQbeG6z2f2Y0hu8=" crossorigin="anonymous"></script><!-- Font Awesome icons --><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.7.1/css/all.min.css" integrity="sha256-nAmazAk6vS34Xqo0BSrTb+abbtFlgsFK7NKSi6o7Y78=" crossorigin="anonymous">
|
||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.7.1/css/v4-shims.min.css" integrity="sha256-6qHlizsOWFskGlwVOKuns+D1nB6ssZrHQrNj1wGplHc=" crossorigin="anonymous">
|
||
<!-- clipboard.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js" integrity="sha256-FiZwavyI2V6+EXO1U+xzLG3IKldpiTFf3153ea9zikQ=" crossorigin="anonymous"></script><!-- headroom.js --><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.4/headroom.min.js" integrity="sha256-DJFC1kqIhelURkuza0AvYal5RxMtpzLjFhsnVIeuk+U=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/headroom/0.9.4/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="Tools to emulate the LEGO® System in R">
|
||
<meta property="og:description" content="
|
||
Generate digital LEGO models using tidyverse functions.
|
||
Convert image files into 2D and 3D mosaics, along with piece counts and instructions.
|
||
Build 3D models using data frames with rgl. ">
|
||
<meta property="og:image" content="http://brickr.org/logo.png">
|
||
<meta name="twitter:card" content="summary">
|
||
<!-- 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>
|
||
<div class="container template-home">
|
||
<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.2.9.9300</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 class="dropdown">
|
||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
|
||
Articles
|
||
|
||
<span class="caret"></span>
|
||
</a>
|
||
<ul class="dropdown-menu" role="menu">
|
||
<li>
|
||
<a href="articles/models-from-other.html">3D Models from mosaics</a>
|
||
</li>
|
||
<li>
|
||
<a href="articles/models-from-program.html">3D Models programmatically</a>
|
||
</li>
|
||
<li>
|
||
<a href="articles/models-from-tables.html">3D models from tables</a>
|
||
</li>
|
||
<li>
|
||
<a href="articles/models-piece-type.html">Piece type in 3D Models</a>
|
||
</li>
|
||
<li>
|
||
<a href="articles/mosaics.html">Mosaics with brickr</a>
|
||
</li>
|
||
</ul>
|
||
</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="contents col-md-9">
|
||
|
||
<div id="the-lego-system-in-r" class="section level1">
|
||
<div class="page-header"><h1 class="hasAnchor">
|
||
<a href="#the-lego-system-in-r" class="anchor"></a>The LEGO® System in R</h1></div>
|
||
</div>
|
||
<div id="brickr-" class="section level1">
|
||
<h1 class="hasAnchor">
|
||
<a href="#brickr-" class="anchor"></a>brickr <img src="reference/figures/logo.png" align="right" height="138">
|
||
</h1>
|
||
<!-- <!-- badges: start -->
|
||
|
||
<div id="overview" class="section level2">
|
||
<h2 class="hasAnchor">
|
||
<a href="#overview" class="anchor"></a>Overview</h2>
|
||
<p><strong>brickr</strong> is a package for bringing the LEGO® experience into the R and <a href="https://www.tidyverse.org/">tidyverse</a> ecosystem.</p>
|
||
<p>The package is divided into 2 systems:</p>
|
||
<ul>
|
||
<li>
|
||
<a href="#mosaics"><strong>Mosaics</strong></a>: Convert image files into mosaics that could be built using LEGO® bricks.</li>
|
||
<li>
|
||
<a href="#3d-models"><strong>3D Models</strong></a>: Build 3D LEGO® models from data tables using <a href="https://cran.r-project.org/web/packages/rgl/index.html">rgl</a>.</li>
|
||
</ul>
|
||
<p>brickr also includes tools help users create the Mosaics and 3D model output using real LEGO® elements.</p>
|
||
<p>Check out <a href="http://brickr.org">brickr.org</a> for more detail!</p>
|
||
<div id="whats-the-point" class="section level3">
|
||
<h3 class="hasAnchor">
|
||
<a href="#whats-the-point" class="anchor"></a>What’s the point?</h3>
|
||
<p>The goal of <strong>brickr</strong> is to provide a series of tools to integrate the LEGO® system with R by:</p>
|
||
<ul>
|
||
<li>Enhancing a real world building experience with mosaics, generated instructions, and piece counts.</li>
|
||
<li>Generating interest in R and coding for new audiences with easy-to-create 3D models.</li>
|
||
<li>Embracing pure novelty.</li>
|
||
</ul>
|
||
<p><em>brickr is developed under the <a href="https://www.lego.com/en-us/legal/notices-and-policies/fair-play/">Fair Play</a> policy using publicly available information about LEGO® products. brickr is not affiliated with The LEGO Group.</em></p>
|
||
</div>
|
||
</div>
|
||
<div id="installation" class="section level2">
|
||
<h2 class="hasAnchor">
|
||
<a href="#installation" class="anchor"></a>Installation</h2>
|
||
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb1-1" title="1"><span class="co"># To install the latest version from Github:</span></a>
|
||
<a class="sourceLine" id="cb1-2" title="2"><span class="co"># install.packages("remotes")</span></a>
|
||
<a class="sourceLine" id="cb1-3" title="3">remotes<span class="op">::</span><span class="kw"><a href="https://rdrr.io/pkg/remotes/man/install_github.html">install_github</a></span>(<span class="st">"ryantimpe/brickr"</span>)</a></code></pre></div>
|
||
</div>
|
||
<div id="mosaics" class="section level2">
|
||
<h2 class="hasAnchor">
|
||
<a href="#mosaics" class="anchor"></a>Mosaics</h2>
|
||
<p>The mosaic functions renders an imported JPG or PNG file using LEGO colors and bricks.</p>
|
||
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb2-1" title="1">demo_img =<span class="st"> </span><span class="kw"><a href="https://rdrr.io/r/base/tempfile.html">tempfile</a></span>() </a>
|
||
<a class="sourceLine" id="cb2-2" title="2"><span class="kw"><a href="https://rdrr.io/r/utils/download.file.html">download.file</a></span>(<span class="st">"http://ryantimpe.com/files/mf_unicorn.PNG"</span>, demo_img, <span class="dt">mode=</span><span class="st">"wb"</span>)</a>
|
||
<a class="sourceLine" id="cb2-3" title="3"></a>
|
||
<a class="sourceLine" id="cb2-4" title="4">mosaic1 <-<span class="st"> </span>png<span class="op">::</span><span class="kw"><a href="https://rdrr.io/pkg/png/man/readPNG.html">readPNG</a></span>(demo_img) <span class="op">%>%</span><span class="st"> </span></a>
|
||
<a class="sourceLine" id="cb2-5" title="5"><span class="st"> </span><span class="kw"><a href="reference/image_to_mosaic.html">image_to_mosaic</a></span>(<span class="dt">img_size =</span> <span class="dv">36</span>) <span class="co">#Length of each side of mosaic in "bricks"</span></a>
|
||
<a class="sourceLine" id="cb2-6" title="6"></a>
|
||
<a class="sourceLine" id="cb2-7" title="7"><span class="co">#Plot 2D mosaic</span></a>
|
||
<a class="sourceLine" id="cb2-8" title="8">mosaic1 <span class="op">%>%</span><span class="st"> </span><span class="kw"><a href="reference/build_mosaic.html">build_mosaic</a></span>()</a></code></pre></div>
|
||
<p><img src="README_files/figure-gfm/m1_set-1.png"><!-- --></p>
|
||
<p>In general, any <strong>brickr</strong> function that begins with <code>build_</code> generates a graphical output from a <strong>brickr</strong> list object, generated from other functions.</p>
|
||
<div id="customization" class="section level3">
|
||
<h3 class="hasAnchor">
|
||
<a href="#customization" class="anchor"></a>Customization</h3>
|
||
<p><code><a href="reference/image_to_mosaic.html">image_to_mosaic()</a></code> can take a few important arguments. See <code>?image_to_mosaic()</code> for full detail.</p>
|
||
<ul>
|
||
<li><p><code>img_size</code> Providing a single value, such as <code>48</code>, crops the image to a square. Inputting a 2-element array, <code><a href="https://rdrr.io/r/base/c.html">c(56, 48)</a></code>, will output a rectangular image of <code><a href="https://rdrr.io/r/base/c.html">c(width, height)</a></code>.</p></li>
|
||
<li><p><code>color_table</code> & <code>color_palette</code> Options to limit the color of bricks used in mosaics, as not all colors produced by LEGO are readily available. Set <code>color_palette</code> to ‘universal’ or <code><a href="https://rdrr.io/r/base/c.html">c('universal', 'generic')</a></code> to limit colors to the most common ones. Use a subset of the data frame <code>lego_colors</code> as the <code>color_table</code> to specify a custom palette.</p></li>
|
||
<li><p><code>method</code> Technique used to map image colors into the allowed brick colors. Defaults to ‘cie94`, but other options include ’cie2000’ and ‘euclidean’. Also includes the option ‘brickr_classic’, used in previous version of the package.</p></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div id="3d-models" class="section level2">
|
||
<h2 class="hasAnchor">
|
||
<a href="#3d-models" class="anchor"></a>3D Models</h2>
|
||
<p>The <code>bricks_from_*</code> series of functions creates 3D models of LEGO bricks from a variety of input formats.</p>
|
||
<ul>
|
||
<li><p><code><a href="reference/bricks_from_table.html">bricks_from_table()</a></code> & <code><a href="reference/bricks_from_excel.html">bricks_from_excel()</a></code> convert a matrix-shaped table of integers into LEGO bricks. 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>. For more advanced models, it’s recommended you use MS Excel or a .csv file. The left-most column in the table is associated with the Level or z-axis of the model. <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></li>
|
||
<li><p><code><a href="reference/bricks_from_coords.html">bricks_from_coords()</a></code> takes a data frame with <code>x</code>, <code>y</code>, & <code>z</code> integer values, and <code>Color</code> columns, where each combination of x, y, & z is a point in 3-dimensional space. Color must be an official LEGO color name from <code><a href="reference/build_colors.html">build_colors()</a></code>. This format is much more flexible than <code><a href="reference/bricks_from_table.html">bricks_from_table()</a></code> and allows the programmatic development of 3D models. For other options, see the “Piece type in 3D Models” vignette.</p></li>
|
||
<li><p><code><a href="reference/bricks_from_mosaic.html">bricks_from_mosaic()</a></code> converts a 2D <a href="#mosaics">mosaic</a> object from an image into 3D LEGO models, respectively.</p></li>
|
||
</ul>
|
||
<p>Pass the output from any <code>bricks_from_*()</code> function to <code><a href="reference/build_bricks.html">build_bricks()</a></code> to see the 3D model. Models are rendered in <strong>rgl</strong>.</p>
|
||
<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb3-1" title="1"><span class="kw"><a href="https://rdrr.io/r/base/library.html">library</a></span>(brickr)</a>
|
||
<a class="sourceLine" id="cb3-2" title="2"></a>
|
||
<a class="sourceLine" id="cb3-3" title="3"><span class="co">#This is a brick</span></a>
|
||
<a class="sourceLine" id="cb3-4" title="4">brick <-<span class="st"> </span><span class="kw"><a href="https://rdrr.io/r/base/data.frame.html">data.frame</a></span>(</a>
|
||
<a class="sourceLine" id="cb3-5" title="5"> <span class="dt">Level=</span><span class="st">"A"</span>,</a>
|
||
<a class="sourceLine" id="cb3-6" title="6"> <span class="dt">X1 =</span> <span class="kw"><a href="https://rdrr.io/r/base/rep.html">rep</a></span>(<span class="dv">3</span>,<span class="dv">4</span>), <span class="co">#The number 3 is the brickrID for 'bright red'</span></a>
|
||
<a class="sourceLine" id="cb3-7" title="7"> <span class="dt">X2 =</span> <span class="kw"><a href="https://rdrr.io/r/base/rep.html">rep</a></span>(<span class="dv">3</span>,<span class="dv">4</span>)</a>
|
||
<a class="sourceLine" id="cb3-8" title="8">)</a>
|
||
<a class="sourceLine" id="cb3-9" title="9"></a>
|
||
<a class="sourceLine" id="cb3-10" title="10">brick <span class="op">%>%</span><span class="st"> </span></a>
|
||
<a class="sourceLine" id="cb3-11" title="11"><span class="st"> </span><span class="kw"><a href="reference/bricks_from_table.html">bricks_from_table</a></span>() <span class="op">%>%</span><span class="st"> </span></a>
|
||
<a class="sourceLine" id="cb3-12" title="12"><span class="st"> </span><span class="kw"><a href="reference/build_bricks.html">build_bricks</a></span>()</a>
|
||
<a class="sourceLine" id="cb3-13" title="13"></a>
|
||
<a class="sourceLine" id="cb3-14" title="14"><span class="co">#Rotate the default view for a better snapshot</span></a>
|
||
<a class="sourceLine" id="cb3-15" title="15">rgl<span class="op">::</span><span class="kw"><a href="https://rdrr.io/pkg/rgl/man/par3d.html">par3d</a></span>(<span class="dt">userMatrix =</span> rgl<span class="op">::</span><span class="kw"><a href="https://rdrr.io/pkg/rgl/man/matrices.html">rotate3d</a></span>(rgl<span class="op">::</span><span class="kw"><a href="https://rdrr.io/pkg/rgl/man/par3d.html">par3d</a></span>(<span class="st">"userMatrix"</span>), <span class="fl">0.75</span><span class="op">*</span>pi, <span class="dv">0</span>, <span class="dv">0</span> ,<span class="dv">1</span>))</a></code></pre></div>
|
||
<p><img src="README_files/figure-gfm/bricks_1-1.png"><!-- --></p>
|
||
<div id="stacking-bricks" class="section level3">
|
||
<h3 class="hasAnchor">
|
||
<a href="#stacking-bricks" class="anchor"></a>Stacking bricks</h3>
|
||
<p>The Level column in the input table determines the elevation of the bricks. <code><a href="reference/bricks_from_table.html">bricks_from_table()</a></code> will convert alphanumeric levels into a z coordinate.</p>
|
||
<p>For larger models, use <code><a href="https://tibble.tidyverse.org/reference/tribble.html">tibble::tribble()</a></code> to more easily visualize the model. For very large models, use a csv or Excel.</p>
|
||
<div class="sourceCode" id="cb4"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb4-1" title="1">my_first_model <-<span class="st"> </span>tibble<span class="op">::</span><span class="kw"><a href="https://tibble.tidyverse.org/reference/tribble.html">tribble</a></span>(</a>
|
||
<a class="sourceLine" id="cb4-2" title="2"> <span class="op">~</span>Level, <span class="op">~</span>X1, <span class="op">~</span>X2, <span class="op">~</span>X3, <span class="op">~</span>x4, <span class="op">~</span>x5, <span class="op">~</span>X6, <span class="op">~</span>x7, <span class="op">~</span>x8,</a>
|
||
<a class="sourceLine" id="cb4-3" title="3"> <span class="st">"A"</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-4" title="4"> <span class="st">"A"</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-5" title="5"> <span class="st">"A"</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-6" title="6"> <span class="st">"A"</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-7" title="7"> <span class="st">"B"</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-8" title="8"> <span class="st">"B"</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-9" title="9"> <span class="st">"B"</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-10" title="10"> <span class="st">"B"</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-11" title="11"> <span class="st">"C"</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-12" title="12"> <span class="st">"C"</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-13" title="13"> <span class="st">"C"</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-14" title="14"> <span class="st">"C"</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-15" title="15"> <span class="st">"D"</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>,</a>
|
||
<a class="sourceLine" id="cb4-16" title="16"> <span class="st">"D"</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-17" title="17"> <span class="st">"D"</span>, <span class="dv">1</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">1</span>,</a>
|
||
<a class="sourceLine" id="cb4-18" title="18"> <span class="st">"D"</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>,</a>
|
||
<a class="sourceLine" id="cb4-19" title="19"> <span class="st">"E"</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>,</a>
|
||
<a class="sourceLine" id="cb4-20" title="20"> <span class="st">"E"</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>,</a>
|
||
<a class="sourceLine" id="cb4-21" title="21"> <span class="st">"E"</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>, <span class="dv">2</span>,</a>
|
||
<a class="sourceLine" id="cb4-22" title="22"> <span class="st">"E"</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span>, <span class="dv">0</span></a>
|
||
<a class="sourceLine" id="cb4-23" title="23">)</a>
|
||
<a class="sourceLine" id="cb4-24" title="24"></a>
|
||
<a class="sourceLine" id="cb4-25" title="25">brick_colors <-<span class="st"> </span>tibble<span class="op">::</span><span class="kw"><a href="https://tibble.tidyverse.org/reference/tribble.html">tribble</a></span>(</a>
|
||
<a class="sourceLine" id="cb4-26" title="26"> <span class="op">~</span><span class="st">`</span><span class="dt">.value</span><span class="st">`</span>, <span class="op">~</span>Color,</a>
|
||
<a class="sourceLine" id="cb4-27" title="27"> <span class="dv">1</span>, <span class="st">"Bright blue"</span>,</a>
|
||
<a class="sourceLine" id="cb4-28" title="28"> <span class="dv">2</span>, <span class="st">"Dark orange"</span></a>
|
||
<a class="sourceLine" id="cb4-29" title="29">)</a>
|
||
<a class="sourceLine" id="cb4-30" title="30"> </a>
|
||
<a class="sourceLine" id="cb4-31" title="31">my_first_model <span class="op">%>%</span><span class="st"> </span></a>
|
||
<a class="sourceLine" id="cb4-32" title="32"><span class="st"> </span><span class="kw"><a href="reference/bricks_from_table.html">bricks_from_table</a></span>(brick_colors) <span class="op">%>%</span><span class="st"> </span></a>
|
||
<a class="sourceLine" id="cb4-33" title="33"><span class="st"> </span><span class="kw"><a href="reference/build_bricks.html">build_bricks</a></span>()</a>
|
||
<a class="sourceLine" id="cb4-34" title="34"></a>
|
||
<a class="sourceLine" id="cb4-35" title="35"><span class="co">#Rotate the default view for a better snapshot</span></a>
|
||
<a class="sourceLine" id="cb4-36" title="36">rgl<span class="op">::</span><span class="kw"><a href="https://rdrr.io/pkg/rgl/man/par3d.html">par3d</a></span>(<span class="dt">userMatrix =</span> rgl<span class="op">::</span><span class="kw"><a href="https://rdrr.io/pkg/rgl/man/matrices.html">rotate3d</a></span>(rgl<span class="op">::</span><span class="kw"><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="op">*</span>pi, <span class="dv">0</span>, <span class="dv">0</span> ,<span class="dv">1</span>))</a></code></pre></div>
|
||
<p><img src="README_files/figure-gfm/bricks_5-1.png"><!-- --></p>
|
||
</div>
|
||
<div id="programmatically-build-models" class="section level3">
|
||
<h3 class="hasAnchor">
|
||
<a href="#programmatically-build-models" class="anchor"></a>Programmatically build models</h3>
|
||
<p>Use <code><a href="reference/bricks_from_coords.html">bricks_from_coords()</a></code> to programmatically build 3D LEGO models instead of manually drawing them in a spreadsheet or table. Here you must provide whole number coordinates for x, y, and z, along with an official LEGO color name for each point.</p>
|
||
<div class="sourceCode" id="cb5"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb5-1" title="1">radius <-<span class="st"> </span><span class="dv">4</span></a>
|
||
<a class="sourceLine" id="cb5-2" title="2">sphere_coords <-<span class="st"> </span><span class="kw"><a href="https://rdrr.io/r/base/expand.grid.html">expand.grid</a></span>(</a>
|
||
<a class="sourceLine" id="cb5-3" title="3"> <span class="dt">x =</span> <span class="dv">1</span><span class="op">:</span><span class="kw"><a href="https://rdrr.io/r/base/Round.html">round</a></span>((radius<span class="op">*</span><span class="fl">2.5</span>)),</a>
|
||
<a class="sourceLine" id="cb5-4" title="4"> <span class="dt">y =</span> <span class="dv">1</span><span class="op">:</span><span class="kw"><a href="https://rdrr.io/r/base/Round.html">round</a></span>((radius<span class="op">*</span><span class="fl">2.5</span>)),</a>
|
||
<a class="sourceLine" id="cb5-5" title="5"> <span class="dt">z =</span> <span class="dv">1</span><span class="op">:</span><span class="kw"><a href="https://rdrr.io/r/base/Round.html">round</a></span>((radius<span class="op">/</span>(<span class="dv">6</span><span class="op">/</span><span class="dv">5</span>)<span class="op">*</span><span class="fl">2.5</span>)) <span class="co">#A brick is 6/5 taller than it is wide/deep</span></a>
|
||
<a class="sourceLine" id="cb5-6" title="6">) <span class="op">%>%</span></a>
|
||
<a class="sourceLine" id="cb5-7" title="7"><span class="st"> </span><span class="kw">mutate</span>(</a>
|
||
<a class="sourceLine" id="cb5-8" title="8"> <span class="co">#Distance of each coordinate from center</span></a>
|
||
<a class="sourceLine" id="cb5-9" title="9"> <span class="dt">dist =</span> (((x<span class="op">-</span><span class="kw"><a href="https://rdrr.io/r/base/mean.html">mean</a></span>(x))<span class="op">^</span><span class="dv">2</span> <span class="op">+</span><span class="st"> </span>(y<span class="op">-</span><span class="kw"><a href="https://rdrr.io/r/base/mean.html">mean</a></span>(y))<span class="op">^</span><span class="dv">2</span> <span class="op">+</span><span class="st"> </span>(z<span class="op">-</span><span class="kw"><a href="https://rdrr.io/r/base/mean.html">mean</a></span>(z))<span class="op">^</span><span class="dv">2</span>)<span class="op">^</span>(<span class="dv">1</span><span class="op">/</span><span class="dv">2</span>)),</a>
|
||
<a class="sourceLine" id="cb5-10" title="10"> <span class="dt">Color =</span> <span class="kw">case_when</span>(</a>
|
||
<a class="sourceLine" id="cb5-11" title="11"> <span class="co">#Yellow stripes on the surface with a 2to4 thickness</span></a>
|
||
<a class="sourceLine" id="cb5-12" title="12"> <span class="kw">between</span>(dist, (radius<span class="dv">-1</span>), radius) <span class="op">&</span><span class="st"> </span>(x<span class="op">+</span>y<span class="op">+</span>z) <span class="op">%%</span><span class="st"> </span><span class="dv">6</span> <span class="op">%in%</span><span class="st"> </span><span class="dv">0</span><span class="op">:</span><span class="dv">1</span> <span class="op">~</span><span class="st"> "Bright yellow"</span>,</a>
|
||
<a class="sourceLine" id="cb5-13" title="13"> <span class="co">#Otherwise, sphere is blue</span></a>
|
||
<a class="sourceLine" id="cb5-14" title="14"> dist <span class="op"><=</span><span class="st"> </span>radius <span class="op">~</span><span class="st"> "Bright blue"</span></a>
|
||
<a class="sourceLine" id="cb5-15" title="15"> ))</a>
|
||
<a class="sourceLine" id="cb5-16" title="16"></a>
|
||
<a class="sourceLine" id="cb5-17" title="17">sphere_coords <span class="op">%>%</span><span class="st"> </span></a>
|
||
<a class="sourceLine" id="cb5-18" title="18"><span class="st"> </span><span class="kw"><a href="reference/bricks_from_coords.html">bricks_from_coords</a></span>() <span class="op">%>%</span><span class="st"> </span></a>
|
||
<a class="sourceLine" id="cb5-19" title="19"><span class="st"> </span><span class="kw"><a href="reference/build_bricks.html">build_bricks</a></span>(<span class="dt">outline_bricks =</span> <span class="ot">TRUE</span>, <span class="dt">rgl_lit =</span> <span class="ot">FALSE</span>)</a>
|
||
<a class="sourceLine" id="cb5-20" title="20"></a>
|
||
<a class="sourceLine" id="cb5-21" title="21"></a>
|
||
<a class="sourceLine" id="cb5-22" title="22">rgl<span class="op">::</span><span class="kw"><a href="https://rdrr.io/pkg/rgl/man/par3d.html">par3d</a></span>(<span class="dt">userMatrix =</span> rgl<span class="op">::</span><span class="kw"><a href="https://rdrr.io/pkg/rgl/man/matrices.html">rotate3d</a></span>(rgl<span class="op">::</span><span class="kw"><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="op">*</span>pi<span class="op">/</span><span class="dv">4</span>, <span class="dv">0</span>, <span class="dv">0</span> ,<span class="dv">1</span>))</a></code></pre></div>
|
||
<p><img src="README_files/figure-gfm/bricks_6-1.png"><!-- --></p>
|
||
<p>The option <code>outline_bricks = TRUE</code> adds a black outline around the edges of the bricks. Setting <code>rgl_lit = FALSE</code> turns off automated lighting effects from rgl. Changing these two inputs together renders bricks in a more cartoon fashion.</p>
|
||
</div>
|
||
<div id="examples" class="section level3">
|
||
<h3 class="hasAnchor">
|
||
<a href="#examples" class="anchor"></a>Examples</h3>
|
||
<p>More examples using <code><a href="reference/bricks_from_table.html">bricks_from_table()</a></code> and <code><a href="reference/bricks_from_coords.html">bricks_from_coords()</a></code> can be found at the links below.</p>
|
||
<ul>
|
||
<li>
|
||
<a href="https://gist.github.com/ryantimpe/3893fdd0f94138d027bae35bf38b57c7"><strong>Baby Yoda</strong></a> example using <code><a href="reference/bricks_from_excel.html">bricks_from_excel()</a></code> with an animation.</li>
|
||
<li>
|
||
<a href="https://github.com/ryantimpe/brickr_toybox"><strong>brickr toybox</strong></a> repo for tools and resources to get started.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div id="irl" class="section level2">
|
||
<h2 class="hasAnchor">
|
||
<a href="#irl" class="anchor"></a>IRL</h2>
|
||
<p>Additional functions assist in the translation of brickr objects into actual LEGO bricks.</p>
|
||
<div id="instructions" class="section level3">
|
||
<h3 class="hasAnchor">
|
||
<a href="#instructions" class="anchor"></a>Instructions</h3>
|
||
<p>Use <code><a href="reference/build_instructions.html">build_instructions()</a></code> to break the mosaics and 3D models into easier-to-read steps for building the set. This defaults to 6 steps, but passing any integer value will generate that many steps.</p>
|
||
<div class="sourceCode" id="cb6"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb6-1" title="1">mosaic1 <span class="op">%>%</span><span class="st"> </span><span class="kw"><a href="reference/build_instructions.html">build_instructions</a></span>(<span class="dv">9</span>)</a></code></pre></div>
|
||
<p><img src="README_files/figure-gfm/m1_instructions-1.png"><!-- --></p>
|
||
</div>
|
||
<div id="piece-list-and-count" class="section level3">
|
||
<h3 class="hasAnchor">
|
||
<a href="#piece-list-and-count" class="anchor"></a>Piece list and count</h3>
|
||
<p>Use <code><a href="reference/build_pieces.html">build_pieces()</a></code> to generate a graphic and count of all required plates or bricks (for stacked mosaics). These are sorted by color and size for easy purchase on LEGO.com’s <a href="https://shop.lego.com/en-US/Pick-a-Brick">Pick-a-Brick</a> section using the advanced search option. Alternatively, use <code>table_pieces()</code> to produce a data frame table of all required bricks.</p>
|
||
<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><a class="sourceLine" id="cb7-1" title="1">mosaic1 <span class="op">%>%</span><span class="st"> </span><span class="kw"><a href="reference/build_pieces.html">build_pieces</a></span>()</a></code></pre></div>
|
||
<p><img src="README_files/figure-gfm/m1_pieces-1.png"><!-- --></p>
|
||
</div>
|
||
</div>
|
||
<div id="acknowledgements" class="section level2">
|
||
<h2 class="hasAnchor">
|
||
<a href="#acknowledgements" class="anchor"></a>Acknowledgements</h2>
|
||
<p>3D models in brickr would not exist without <a href="https://twitter.com/tylermorganwall">Tyler Morgan-Wall</a> and his <a href="https://www.rayshader.com/">rayshader</a> package. If you’re interested in creating any time of 3D models in R, check out his <a href="https://www.rayrender.net/">rayrender</a> package.</p>
|
||
<p>All functions in brickr are created with the <a href="https://www.tidyverse.org/">tidyverse</a> and <a href="https://cran.r-project.org/web/packages/rgl/index.html">rgl</a>.</p>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div class="col-md-3 hidden-xs hidden-sm" id="sidebar">
|
||
<div class="links">
|
||
<h2>Links</h2>
|
||
<ul class="list-unstyled">
|
||
<li>Browse source code at <br><a href="https://github.com/ryantimpe/brickr">https://github.com/ryantimpe/brickr</a>
|
||
</li>
|
||
<li>Report a bug at <br><a href="https://github.com/ryantimpe/brickr/issues">https://github.com/ryantimpe/brickr/issues</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="license">
|
||
<h2>License</h2>
|
||
<ul class="list-unstyled">
|
||
<li><a href="LICENSE.html">Full license</a></li>
|
||
<li><small><a href="https://opensource.org/licenses/mit-license.php">MIT</a> + file <a href="LICENSE-text.html">LICENSE</a></small></li>
|
||
</ul>
|
||
</div>
|
||
<div class="developers">
|
||
<h2>Developers</h2>
|
||
<ul class="list-unstyled">
|
||
<li>Ryan Timpe <br><small class="roles"> Author, maintainer </small> </li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="dev-status">
|
||
<h2>Dev status</h2>
|
||
<ul class="list-unstyled">
|
||
<li><a href="https://www.tidyverse.org/lifecycle/#experimental"><img src="https://img.shields.io/badge/lifecycle-experimental-orange.svg" alt="Lifecycle: experimental"></a></li>
|
||
<li><a href="https://travis-ci.org/ryantimpe/brickr"><img src="https://travis-ci.org/ryantimpe/brickr.svg?branch=master" alt="Travis build status"></a></li>
|
||
</ul>
|
||
</div>
|
||
</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.4.1.</p>
|
||
</div>
|
||
|
||
</footer>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
</body>
|
||
</html>
|