Level_1 is a Bricklayer interface (technically speaking an SML structure) that provides a (restricted) set of functions for “putting” LEGO bricks in the xz-plane. The naming conventions for the “put” functions are as follows:

  1. Every put function begins with put2D_.
  2. Next comes the dimensions of the brick. In Level_1, the choices are limited to:
1×1, 1×2, 2×1, 2×2, 2×3, 3×2, 2×4, 4×2
  1. After the dimensions comes an underscore followed by a restricted set of brick types. In Level_1, the choices are limited to:
BLUE, GRAY, BLACK, GREEN, RED, WHITE, YELLOW, EMPTY

In Level_1, the xz-coordinate is the only parameter to a “put” function. See Vitruvia Concepts 5-9 for exercises relating to Level_1 functions.

To get (direct) access to all the functions in Level_1, place the following command at the beginning of your bricklayer program:

open Level_1;
build2D : dimensions2D → unit This function creates, in Bricklayer, a virtual xz-plane having the given dimensions. The dimensions of the xz-plane are represented as a tuple of the form (x,z). For example, the evaluation of the function call

build2D(5,7);

will create a virtual xz-plane whose width (x-dimension) is 5 and whose depth (z-dimension) is 7. It is in this virtual space, (0,0),…,(4,6), that LEGO bricks may be placed. It is only after this function call has been evaluated that you will be able to build things.

show : string → unit This function calls upon Bricklayer’s native web viewer to display the 2D artifact you have created. The input to the show function is a string (a sequence of alphanumeric characters enclosed in double quotes) which you can use to give a name to your Bricklayer artifact. Suppose you created an artifact that looks like the flag of Italy. In this case, your show function call might be something like

show “Flag of Italy”;
showLDD : string → unit This function calls upon LDD to display the 2D artifact you have created. The input to the show function is a string (a sequence of alphanumeric characters enclosed in double quotes) which you can use to give a name to your Bricklayer-LEGO artifact. Suppose you created an artifact that looks like the flag of Italy. In this case, your show function call might be something like

showLDD “Flag of Italy”;
showLDR : string → unit This function calls upon LDraw to display the 2D artifact you have created. The input to the show function is a string (a sequence of alphanumeric characters enclosed in double quotes) which you can use to give a name to your artifact. Suppose you created an artifact  that looks like the flag of Italy. In this case, your showLDR function call might be something like

showLDR “Flag of Italy”;
showSTL : string → unit This function will create a STeroLithography (STL) version of a Bricklayer artifact. Specifically, the Bricklayer artifact created by the program is written to an stl file called cube.stl. This file can be found at Bricklayer/UserCode/lego-models/cube.stl.

Calling the showSTL function is conceptually the same as calling the show function.

showSTL “3D print me”;

If your machine has a tool for viewing stl files (e.g., 3D Builder on Windows), then the STL artifact will be displayed using this tool in a manner similar to how LDD views artifacts.

put2D_1x1_RED, put2D_1x1_WHITE, put2D_1x1_BLUE,
put2D_1x1_YELLOW, put2D_1x1_GREEN, put2D_1x1_GRAY, put2D_1x1_BLACK,
put2D_1x1_EMPTY
These functions can be used to put 1×1 bricks of various types at given locations. For example,

put2D_1x1_RED(0,0);

will “put” a 1×1 red brick at location (0,0).

put2D_1x2_RED, put2D_1x2_WHITE, put2D_1x2_BLUE,
put2D_1x2_YELLOW, put2D_1x2_GREEN, put2D_1x2_GRAY, put2D_1x2_BLACK,
put2D_1x2_EMPTY
These functions can be used to put 1×2 bricks of various types at given locations. For example,

put2D_1x2_GREEN(0,2);

will “put” a 1×2 green brick at location (0,2).

put2D_2x1_RED, put2D_2x1_WHITE, put2D_2x1_BLUE,
put2D_2x1_YELLOW, put2D_2x1_GREEN, put2D_2x1_GRAY, put2D_2x1_BLACK,
put2D_2x1_EMPTY
These functions can be used to put 2×1 bricks of various types at given locations. For example,

put2D_2x1_GRAY(3,0);

will “put” a 2×1 gray brick at location (3,0).

put2D_2x2_RED, put2D_2x2_WHITE, put2D_2x2_BLUE,
put2D_2x2_YELLOW, put2D_2x2_GREEN, put2D_2x2_GRAY, put2D_2x2_BLACK,
put2D_2x2_EMPTY
These functions can be used to put 2×2 bricks of various types at given locations. For example,

put2D_2x2_BLUE(3,4);

will “put” a 2×2 blue brick at location (3,4).

put2D_2x3_RED, put2D_2x3_WHITE, put2D_2x3_BLUE,
put2D_2x3_YELLOW, put2D_2x3_GREEN, put2D_2x3_GRAY, put2D_2x3_BLACK,
put2D_2x3_EMPTY
Functions that puts 2×3 bricks of various types at given locations. For example,

put2D_2x3_YELLOW(2,4);

will “put” a 2×3 yellow brick at location (2,4).

put2D_3x2_RED, put2D_3x2_WHITE, put2D_3x2_BLUE,
put2D_3x2_YELLOW, put2D_3x2_GREEN, put2D_3x2_GRAY, put2D_3x2_BLACK,
put2D_3x2_EMPTY
These functions can be used to put 3×2 bricks of various types at given locations. For example,

put2D_3x2_WHITE(2,4);

will “put” a 3×2 white brick at location (1,1).

put2D_2x4_RED, put2D_2x4_WHITE, put2D_2x4_BLUE,
put2D_2x4_YELLOW, put2D_2x4_GREEN, put2D_2x4_GRAY, put2D_2x4_BLACK,
put2D_2x4_EMPTY
These functions can be used to put 2×4 bricks of various types at given locations. For example,

put2D_2x4_WHITE(2,4);

will “put” a 2×4 white brick at location (1,1).

put2D_4x2_RED, put2D_4x2_WHITE, put2D_4x2_BLUE,
put2D_4x2_YELLOW, put2D_4x2_GREEN, put2D_4x2_GRAY, put2D_4x2_BLACK,
put2D_4x2_EMPTY
Functions that puts 4×2 bricks of various types at given locations. For example,

put2D_4x2_RED(2,0);

will “put” a 4×2 red brick at location (2,0).

Example 1

open Level_1;

build2D(5,5);  

put2D_4x2_BLUE(0,0);

showLDD "My First Put";

put2D_01.png

Example 2

open Level_1;

build2D(6,6);  

put2D_4x2_BLUE(0,0);
put2D_2x4_RED(0,2);

showLDD "Putting 2 Bricks";

put2D_02