Thanks to you both. It does make a beautiful dotted stitch indeed. I am not sure about the other patterns though. They seem more complex. I can't even get the sin wave pattern to stabilize in the draw method...
RandomColorPalette myRandomColorPalette;
Stitches myCrossStitches;
Stitches myFlatStitches;
Stitches myDottedStitches;
Stitches myWavyStitches;
void setup() { // call the setup function to define initial enviroment properties
size(900, 700);
background(230);
myRandomColorPalette=new RandomColorPalette (color(255, 255, 255), 100, 0, 0);
myCrossStitches=new Stitches (color(227, 101, 221), 100, 600, 0, 10);
myFlatStitches=new Stitches (color(250, 100, 90), 100, 400, 0, 10, 6.6);
myDottedStitches=new Stitches (color(227, 208, 140), 100, 200, 0, 10, 4);
myWavyStitches=new Stitches (color(125, 225, 30), 100, 800, 0, 60.0, 40.0, 3.0);
} // end the setup function
void draw () { // call the draw function
background(230);
myRandomColorPalette.display();
myCrossStitches.display(10);
myFlatStitches.display(10, 6.6);
myDottedStitches.display(10, 4);
myWavyStitches.display(60.0, 40.0, 40.0);
} // end the draw function
abstract class Grid {
float sizeOfSquares;
color gridClr;
float boxPosX;
float boxPosY;
Grid(color tempgridClr, float tempsizeOfSquares, float tempBoxPosX, float tempBoxPosY) {
gridClr=tempgridClr;
sizeOfSquares=tempsizeOfSquares;
boxPosX=tempBoxPosX;
boxPosY=tempBoxPosY;
} // end of the constructor
void display () {
// initialization of quilt patterns (from Shiffman page 261)
for (int i=0;i<width;i+=sizeOfSquares) {
for (int j=0;j<height;j+=sizeOfSquares) {
fill(gridClr);
rect(i, j, sizeOfSquares, sizeOfSquares);
}
}
} // end of the display function
boolean mouseClickOverBox () {
if (mousePressed && ((mouseX>boxPosX) && (mouseX<boxPosX+sizeOfSquares) && (mouseY>boxPosY) && (mouseY<boxPosY+sizeOfSquares))) {
return true;
}
else {
return false;
}
}
}
class RandomColorPalette extends Grid {
RandomColorPalette(color tempgridClr, float tempsizeOfSquares, float tempBoxPosX, float tempBoxPosY) {
super (tempgridClr, tempsizeOfSquares, tempBoxPosX, tempBoxPosY);
gridClr=tempgridClr;
sizeOfSquares=tempsizeOfSquares;
boxPosX=tempBoxPosX;
boxPosY=tempBoxPosY;
}
void display () {
stroke(0);
fill(gridClr);
rect (boxPosX, boxPosY, sizeOfSquares, sizeOfSquares);
if (mouseClickOverBox()) {
gridClr=(color(random(1, 255), random(1, 255), random(1, 255)));
fill (gridClr);
rect (boxPosX, boxPosY, sizeOfSquares, sizeOfSquares);
}
}
}
class Stitches extends RandomColorPalette {
float clrLine;
float strokeClr;
int stitchLength;
float spacing;
int dotSize;
float stitchOffset;
float stitchSpeed;
float stitchScalar;
float stitchAngle;
float stitchX;
// Constructor overloading for four different stitch patterns
// constructor for cross stitch
Stitches (color tempgridClr, float tempsizeOfSquares, float tempBoxPosX, float tempBoxPosY, int tempStitchLength) {
super (tempgridClr, tempsizeOfSquares, tempBoxPosX, tempBoxPosY);
tempStitchLength= constrain (tempStitchLength, 8, 12);
gridClr=tempgridClr;
sizeOfSquares=tempsizeOfSquares;
boxPosX=tempBoxPosX;
boxPosY=tempBoxPosY;
stitchLength=tempStitchLength;
stitchX=boxPosX+sizeOfSquares/2;
}
// constructor for flat stitch
Stitches (color tempgridClr, float tempsizeOfSquares, float tempBoxPosX, float tempBoxPosY, int tempStitchLength, float tempSpacing) {
super (tempgridClr, tempsizeOfSquares, tempBoxPosX, tempBoxPosY);
tempStitchLength= constrain (tempStitchLength, 8, 12);
tempSpacing= constrain (tempSpacing, tempStitchLength/5, tempStitchLength*4/5);
gridClr=tempgridClr;
sizeOfSquares=tempsizeOfSquares;
boxPosX=tempBoxPosX;
boxPosY=tempBoxPosY;
spacing=tempSpacing;
stitchLength=tempStitchLength;
stitchX=boxPosX+sizeOfSquares/2;
}
// constructor for dotted stitch
Stitches (color tempgridClr, float tempsizeOfSquares, float tempBoxPosX, float tempBoxPosY, int tempSpacing, int tempDotSize) {
super (tempgridClr, tempsizeOfSquares, tempBoxPosX, tempBoxPosY);
tempSpacing= constrain (tempSpacing, 8, 12);
tempDotSize=constrain(tempDotSize, 1, 4);
gridClr=tempgridClr;
sizeOfSquares=tempsizeOfSquares;
boxPosX=tempBoxPosX;
boxPosY=tempBoxPosY;
dotSize=tempDotSize;
spacing=tempSpacing;
stitchX=boxPosX+sizeOfSquares/2;
}
// constructor for the wavy stitch
Stitches (color tempgridClr, float tempsizeOfSquares, float tempBoxPosX, float tempBoxPosY, float tempStitchOffset, float tempStitchSpeed, float tempStitchScalar) {
super (tempgridClr, tempsizeOfSquares, tempBoxPosX, tempBoxPosY);
tempStitchOffset=constrain (tempStitchOffset, 8, 12);
tempStitchSpeed=constrain(tempStitchSpeed, 1, 4);
tempStitchScalar=constrain(tempStitchScalar, 1, 4);
stitchAngle=90;
gridClr=tempgridClr;
sizeOfSquares=tempsizeOfSquares;
boxPosX=tempBoxPosX;
boxPosY=tempBoxPosY;
stitchOffset=tempStitchOffset;
stitchSpeed=tempStitchSpeed;
stitchScalar= tempStitchScalar;
stitchX=boxPosX+sizeOfSquares/2;
}
// Method overloading for display function of four different stitch patterns
// display () cross stitch
void display (int stitchLength) {
stroke(0);
fill(gridClr);
rect (boxPosX, boxPosY, sizeOfSquares, sizeOfSquares);
for (float i=boxPosY; i<sizeOfSquares; i+=stitchLength) {
stroke(0);
line (stitchX, i, stitchX+stitchLength, i+stitchLength);
line (stitchX, i+stitchLength, stitchX+stitchLength, i);
}
} // end the display () function
// display () flat stitch
void display (int stitchLength, float spacing) {
stroke(0);
fill(gridClr);
rect (boxPosX, boxPosY, sizeOfSquares, sizeOfSquares);
for (float i=boxPosY; i<sizeOfSquares; i+=stitchLength) {
stroke(0);
line (stitchX, i, stitchX, sizeOfSquares);
stroke (gridClr);
line (stitchX, i+spacing, stitchX, sizeOfSquares);
}
} // end the display () function
// display () dotted stitch
void display (int stitchLength, int dotSize) {
stroke(0);
fill(gridClr);
rect (boxPosX, boxPosY, sizeOfSquares, sizeOfSquares);
for (float i=boxPosY; i<sizeOfSquares; i+=stitchLength) { // loop that will use a counter that will draw a shape every 8 pixels for the whole
// height of the canvas
stroke (strokeClr); // determine the color of the stroke of the ellipses that form the dotted line as purple
fill (clrLine); // fill with purple the ellipses that form the dotted lines
ellipse (stitchX, i, dotSize, dotSize); // draw little ellipses every 8 pixels from top to bottom on the left of
// the canvas to make up the dotted line
} // end the for loop
} // end the display () function
// display () wavy stitch
void display (float StitchOffset, float StitchSpeed, float StitchScalar) {
stroke(0);
fill(gridClr);
rect (boxPosX, boxPosY, sizeOfSquares, sizeOfSquares);
for (float i=boxPosY; i<sizeOfSquares; i+=stitchScalar) {
float waveStitch=stitchOffset+cos(radians(stitchAngle))*stitchScalar;
stitchAngle+=stitchSpeed;
stroke(0);
strokeWeight (3);
fill (0);
point (stitchX+waveStitch, i);
} // end the for loop
} // end the display () function
} // end Stitches class