# Processing Month, Day 6 - Square Flowers, Part 2

Posted by Jan Vantomme on 06 May 2011.
Tags:

For the first five days, we’ve only drawn one object to the screen. Today we are going to take a look at how we can write a flexible function so we can draw multiple flowers to the screen.

We’ll start by defining a function at the bottom of our sketch, right after the draw() function. The void keyword before the name of the function means that the function doesn’t return a value.

``` void squareFlower(){}  ```

The next thing is to setup some variables between the curly brackets of our function. We need the same variables as in Square Flowers - Part 1, and an extra variable for the color.

``` float x = random(width);float y = random(height);float steps = floor( random(10, 20) );float angle = random( 8, 20 );float startSize = random(80, 120);color c = color( 128 + random(128), 0, 0);  ```

To draw the flower to the screen we’ll use the algorithm we used yesterday, but need to add two important functions: `pushMatrix()` and `popMatrix()`. If we don’t use `pushMatrix()` before `translate()`, we’ll only be able to draw the first flower inside `draw()` on the right coordinates. That’s ok if you only draw one flower each frame, but if you want to draw more flowers, you’ll need to use `pushMatrix()` and `popMatrix()`.

``` stroke( c );fill( 0 );pushMatrix();translate(x, y);for ( int i = 0; i < steps; i++ ) {    rotate( radians( angle * i ) );    rect( 0, 0, startSize - 5*i, startSize - 5*i);}popMatrix();  ```

Now that our function is ready, we can call `drawFlower()` inside `draw()`, so our sketch will draw a flower each frame. If you want to draw more flowers each frame, you’ll need to call `drawFlower()` more than once, preferably with a for-loop.

### Examples.

This example is also available at OpenProcessing.  