The bricks_from_*
series of functions creates 3D models of LEGO bricks from a variety of input formats.
bricks_from_table()
converts a matrix-shaped table of integers into LEGO bricks, where most columns are x-coordinates, rows are y-coordinates, and a special Level
column denotes the elevation of the row. For simple models, this table can be made manually using data.frame()
or tibble::tribble()
.
For more advanced models, it’s recommended you use MS Excel or a .csv file. bricks_from_excel()
is a wrapper function to more easily build models designed using a Microsoft Excel template. Please see this repo: brickr toybox.
Pass the output of any bricks_from_*()
function to build_bricks()
to render it as a 3D model.
Create a single 2x4 brick with a 2x4 data frame, with an additional column to specify the ‘Level’. These can be letters or numbers.
#This is a 2 (columns) x 4 (rows) brick (brick <- data.frame( Level="A", X1 = rep(3,4), #The number 3 is the brickrID for 'bright red' X2 = rep(3,4) )) #> Level X1 X2 #> 1 A 3 3 #> 2 A 3 3 #> 3 A 3 3 #> 4 A 3 3 brick %>% bricks_from_table() %>% build_bricks() rgl::par3d(userMatrix = rgl::rotate3d(rgl::par3d("userMatrix"), 1.1*pi/4, 0, 0 ,1))
Stack many bricks by changing the ‘Level’ value in the data frame. The script below uses purrr::map_df()
to avoid copying and pasting. Changing the numeric values inside the data frame for each level creates different colors.
1:10 %>% purrr::map_df(~dplyr::mutate(brick, Level = LETTERS[.x], X1 = .x, X2 = .x)) %>% bricks_from_table() %>% build_bricks(rgl_lit=FALSE, outline_bricks = TRUE) rgl::par3d(userMatrix = rgl::rotate3d(rgl::par3d("userMatrix"), 1.1*pi/4, 0, 0 ,1))
The most direct way to create a 3D model is to manually create a data frame. Below, we create a data frame using tibble::tribble()
so we can more easily see the structure as it’s written.
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’
tree_or_mushroom <- tibble::tribble( ~Level, ~X1, ~X2, ~X3, ~X4, ~X5, ~X6, "A", 1, 1, 1, 1, 1, 1, "A", 1, 1, 1, 1, 1, 1, "A", 1, 1, 1, 1, 1, 1, "A", 1, 1, 1, 1, 1, 1, "B", 0, 0, 0, 0, 0, 0, "B", 0, 0, 2, 2, 0, 0, "B", 0, 0, 2, 2, 0, 0, "B", 0, 0, 0, 0, 0, 0, "C", 0, 0, 0, 0, 0, 0, "C", 0, 0, 2, 2, 0, 0, "C", 0, 0, 2, 2, 0, 0, "C", 0, 0, 0, 0, 0, 0, "D", 0, 3, 3, 3, 3, 0, "D", 0, 3, 3, 3, 3, 0, "D", 0, 3, 3, 3, 3, 0, "D", 0, 3, 3, 3, 3, 0, "E", 0, 0, 3, 3, 0, 0, "E", 0, 3, 3, 3, 3, 0, "E", 0, 3, 3, 3, 3, 0, "E", 0, 0, 3, 3, 0, 0, "F", 0, 0, 0, 0, 0, 0, "F", 0, 0, 3, 3, 0, 0, "F", 0, 0, 3, 3, 0, 0, "F", 0, 0, 0, 0, 0, 0, "G", 0, 0, 0, 0, 0, 0, "G", 0, 0, 3, 0, 0, 0, "G", 0, 0, 0, 3, 0, 0, "G", 0, 0, 0, 0, 0, 0 ) brick_colors <- tibble::tribble( ~`.value`, ~Color, 1, "Bright green", 2, "Dark orange", 3, "Dark green" ) tree_or_mushroom %>% bricks_from_table(brick_colors) %>% build_bricks() rgl::par3d(userMatrix = rgl::rotate3d(rgl::par3d("userMatrix"), 1.1*pi/4, 0, 0 ,1))
When designing larger models, it is much easier to use a spreadsheet program to lay out the bricks for each level.
See the brickr toybox GitHub repo for some examples and templates.