Introduction: Coding the Heritage: Rose Window of Valvisciolo Abbey
Have you ever stood in a vast cathedral or church, and looked up at a large circular stained glass window dominating one of the walls? Did you know it was called a rose window?
Rose window is often used as a generic term applied to a circular window but is especially used for those found in Gothic cathedrals and churches. This type of window is called a rose window or a wheel window to refer to the fact that it's made of a series of smaller windows radiating out from the center like wheel spokes or flower petals. The rose window is one of the most representative elements of Gothic art and architecture. Their symbolism lies in geometry and the sense that many parts make a whole. When we study them, we begin to realize that these windows are made of geometric shapes. Whatever the style of window, all of the elements come together in a single cohesive design, the real and symbolic whole
In this project, we will use Codeblocks and develop algorithms for the typical geometries of architecture and make a rose window, a characteristic element of medieval architecture. (.STL file attached)
Recommended grades: 6-8
Estimated time: 60 minutes
Skills explored: Identifying the basic solids that make up the object and creating a computer program using variables for control points and count-controlled loops.
Supplies
- Computer
- Internet
- 3D software (Tinkercad)
- Computer mice, 3D printer, and filaments for printing(optional)
Step 1: Know Your Tool: Tinkercad Codeblocks
Tinkercad is a free, kid-friendly online computer-aided design (CAD) program where users can design, modify, and print 3D objects. Tinkercad offers“Codeblocks”: a section of the site dedicated to the production of complex solids through programming with code blocks.
Using Codesblocks users can create a sequence of instructions that will lead to the creation of output. The instructions are contained in colored blocks that can be dragged onto the main screen and inserted in a logical order just as if they were bricks. It is characterized by a limited number of solids (primitives) that can be used to compose a more complex object. Codeblocks combine coding with 3D modeling and are great to educate kids in computational thinking and introduce the concept of algorithms.
Codeblocks expands the functionality of Tinkercad by introducing procedural modeling. Procedural modeling is a type of 3D drawing that automatically or semi-automatically generates a geometry, based on a program script (in this case blocks of code) defined by the user.
The Codeblocks Interface:
- Sign in to your"Tinkercad"account.
- Click on the“Codeblocks” item in the left menu of the Dashboard.
- Click on the "Create New Codeblock" button to access the Codeblocks Workspace.
The main sections of the workspace are as follows:
- Name of the project: In the upper left part of your screen you can see a random software-generated name. To change the name of the project, simply click with the left mouse button on the temporary name, type in the new desired name, and press the Enter key on the keyboard.
- Menu bar: this horizontal menu at the top contains buttons we need to run our code.
- Block categories: located on the left, this vertical column is divided into categories to facilitate searches of the blocks.
- Block library: is located in the left column and contains all the instruction blocks that can be inserted into the working area.
- Working area: It is the space where the user will create the instructions that will make up the solids by “pulling” or “dragging” blocks from the block library
- 3D preview: enable the user to see the preview of the solid constructed through the instructions you entered.
Step 2: Identification and Measurement
Identifying the Geometric Elements:
We will start with a simplified version of a rose window and try to identify the basic solids that make up the rose window on the facade of Valvisciolo Abbey.
We can easily identify seven solids :
- Central core: the central core is made up of 4 cylinders, with the base pointing towards you.
- Column: are made up of 12 cylinders all of which are arranged longitudinally.
- Arch: 12 arches connect the capitals of the columns remain.
- The Inner core, Outer core, Inner shell, and Outer shell can also be traced back to a cylinder, with the base pointing towards you.
We also notice that The arches and columns are arranged according to radial symmetry.
Measure the geometric elements:
Once we are done with identifying the solids, we can take care of the measurements. In this project, we will make a scaled-down rose window, suitable for 3D printing, hence our measure will be:
- Central core diameter and height: 6mm and 5mm
- Columns diameter and height: 4mm and 28 mm
- Arches diameter and height: 40 mm and 4 mm
- Inner core diameter and height: 26mm and 3 mm
- Outer core diameter and height: 32mm and 5 mm
- Inner shell diameter and height: 115 mm and 8 mm
- Outer shell diameter and height: 125 mm and 12 mm
Since in radial symmetry, the angle that separates one column from another always has the same value. To find out the angle between adjacent columns/arches will be equivalent to = Sum to total angela inside a circle (360 degrees), divided by the total number of arches/columns(12), which will come out to be 30 degrees.
Similarly, the angle between two adjacent cylinders of the central core will be 90 degrees.
Step 3: Creating an Arch
For convenience, we will start creating an arch first.
- Go to the "Blocks Library" and select the instruction that allows to "Create New Object". Rename the block by clicking on the white drop-down icon and then selecting "Rename Variable".
- Next, select instruction to create a "Tube" located in the "Shapes category". Click on the block, drag it into the "Working area", and release the mouse. Select the colored circle so that the tube is sold.
- The Arch has the following measurements: Diameter 40 mm (therefore radius = 20 mm), wall thickness 2.5 mm, and height 6 mm. Click on the "White arrow" to access the measurement options and enter this data.
- Now, to drag a "Box" block to the workspace and snap it to the bottom of the tube block. We have to set the figure as empty. To get a vacuum, click on the "circular icon with diagonal gray bands", to the left of the white arrow.. and then enter the measurements as W= 60, L=60, and H=20.
- Next, we need to move the box outward. Go to the Blocks Library and select the instruction that allows you to "Move" an object. Snap it to the bottom of the box blocks. Enter a -30 offset on the X-axis, so that the box moves 30 mm toward the negative x-axis.
- Now go to the Block Library and select the "Create group" instruction. Snap it under the move block and use the "3D preview buttons" in the "Menu bar" to view the result.
Step 4: Know Your Blocks: Count and Rotate
Before we move further, let us have a look at two interesting features of the Codeblocks: the Count and the Rotate block in the control and modify sectionrespectively,to repeat the instructions and easily position the solids in radial symmetry.
While identifying the geometric elements of the rose window, we noticed that the window has 5 cylindrical holes in a flower pattern at the middle of the central core. Also, we have 12 columns and arches in the window. It is interesting to notice that these cylindrical holes in the core or the arches or the column are identical to other holes, arches, and columns in shape and size, but there is only rotation that always increases by certain fixed degrees.
Therefore each longitudinal column (also arch and hole) differs from another only for the angle of rotation around the center of the rose window, defined in the block Rotate around the z-axis.
One of the methods to achieve this radial symmetry is to rewrite the instructions by inserting identical copies of blocks and adding the angle of rotation every time we snap a rotated block. This would result in a boring, repetitive, and ineffective activity knowing that we have 5 holes, 12 arches ad 12 columns in our rose window. And imagine how many blocks might be needed for a more complex or multi-element rosette.
Understanding the Loop(Count) Block:
Repetition is to repeat an instruction or a sequence of instructions. In Codeblocks this is accomplished by the "Count" block present in Blocks Library under the "Control" category.
Observe the blocks (Pic 1 above), how often are these instructions executed?
- In the first case, the instructions are executed 360 times, as it is counted from 0 to 360 making a step of 90 units each time.
- In the second case, the cycle is performed 360 times, because we'll count from 30 to 360 but each time we will move from 30 units.
Notice, that the Count block also has the letter 'i'. Why is it there? This 'i' is a variable. A variable indicates an object that can vary over time. In the count cycle,'i' takes on a different value at each step.
In case 2(Pic 1 above), The initial value is 30, so the 'i' in the first step has the value 1. thereafter, the 'i' increases by the value defined in the third field, that of the amount of a step. In the second step it takes the value of 60, because i = i + 30 = 30 + 30. From this point on, 'i' is no longer worth 30 but is set to 60 until the next cycle arrives. In the third step the 'i' amounts to 90, because i = i + 30 = 60 + 30. This will continue till finally, it assumes the value of 330 in the twelfth step.
The variable 'i' is therefore an object to store a value that must change in each step.
Understanding the Rotate Block:
To rotate a solid we need to go to the Block Library and select the "Rotate" instruction. The instruction is under the "Edit" category and is represented by this block.
The rotation lock has 3 customizable variables, the "axis of rotation", the "degrees of rotation", and the "pivot point"(center point around which the solid will rotate). Codeblocks have a default value of 90 ° rotation on the x-axis on the rotate block.
Observe the blocks (Pic 2 above), how will these instructions get executed?
- In the first case, the instruction will set a 90-degree rotation on the X-axis and the pivot variable, when left empty, becomes the center of the solid itself.
- In the second case, the instruction sets a 90-degree rotation on the X-axis taking the origin(of coordinate x,y,z) as the pivot point.
- In the third case, because of the addition of variable 'i', the instruction will rotate the solid around the X-axis taking origin as a pivot point. The angle of rotation will depend on the value stored in the variable 'i', as it changes in each step
Step 5: The Central Core
The central core of our rose window consists of 2 concentric cylinders with 4 flower pattern holes at the origin.
- Start with adding create a new block to the workspace and renaming it.
- Snap a "Count"block under the crate new block. Thecount variablewill be 'i' and enter the values so that the instructions are executed 360 times, as it is counted from 0 to 360 making a step of 90 units each time.
- Next, insert a cylinder which then digsinto the base to generate the flower pattern, select the circular icon with diagonal gray bands. Then click on the white arrow to enter the measurements 3 mm, 5mm, and 20mm for radius, height, and sides respectively.
- Move the block 5 mm toward the X-axis by dragging a move block and snaping it under the cylinder block.
- To rotate the empty cylinder around the center of the rose window, pull out the rotate block from the block library and snap it under the instruction that moved the cylinder. Select the rotation instruction to the Z-axis and then insert the variable 'i' block" and "coordinates"block inside the "degree of rotation" and "pivot point" feature, respectively. We can find these blocks under the "Data" and the "Math" category in the block library.
- Complete the central core by adding two solid tubes blocks, outside the Count block, each of measurements:
- Inner tube: Radius = 13, Wall Thickness = 10, Height = 3
- Outer tube: Radius = 16, Wall Thickness = 3, Height = 5
Step 6: Arches, Columns and Shells
- Start with adding create a new block to the workspace and renaming it.
- Snap a Count block under the crate new block. The "Count variable"will be 'j' and enter the values so that the cycle count starts at 30, gets to 360, and takes steps of 30.
- To create a column, add a sold cylinder of Radius= 2 and Height 28 inside the count block.
- Now, to place the column flat on the work surface, rotate it around the Y-axis by 90 degrees.
- We need to move the column outward, to take it out of the central core. Insert a move block and shift the block 26 mm on the X-axis.
- Select the rotation instruction to the Z-axis and then insert the variable 'j' block and coordinates block inside the degree of rotation and pivot point variables, respectively.
- To add the beautiful arches in a radial pattern. First, add a copy of the previously created arch. So insert the instruction which allows to "Add a copy of object"(under modify category) and then place the "arch" variable (under the data category) inside the empty oval.
- Move the column outward, to take it out of the central core. Insert a move block and shift the block 32 mm on the X-axis.
- Select the rotation instruction to the Z-axis and then insert the variable 'j' block and coordinates block inside the degree of rotation and pivot point variables, respectively.
- Remove the foundation arch by adding a "Delete object" block and adding the arch variable inside this block. Snap this block under the count block
- Complete the Rose Window by adding two solid tubes blocks, under the delete block, each of measurements:
- Inner tube: Radius = 57.5, Wall Thickness = 6, Height = 8
- Outer tube: Radius = 62.5, Wall Thickness = 5, Height = 12
Congratulations, we have completed the simplified version of the Rose Window of Valvisciolo Abbey.
Step 7:
Thank you for reading this Instructable :)
Attachments

Runner Up in the
Block Code Contest
1 Person Made This Project!
- zerboni_giada made it!
4 Comments
2 years ago
Wow ! What a creative way to collaborate blockcoding with history. I just loved it.
Reply 2 years ago
Thankyou @_kamini. I'm glad you love it :)
2 years ago
This is awesome! Thank you so much for sharing!
Reply 2 years ago
Thank you so much :)