We continue the study of path command. Take a look of the closed shape, a square.
startshape MyShape
path Line {
MOVETO {x -0.5 y -0.5}
LINETO {x 0.5 y -0.5}
LINETO {x 0.5 y 0.5}
LINETO {x -0.5 y 0.5}
LINETO {x -0.5 y -0.5}
CLOSEPOLY {}
STROKE {}
}
rule MyShape {
Line {}
}
CLOSEPOLY
If by any chances, you type the wrong position for the last end point or there is rounding error after a sequence of calculation, you may end of with:
startshape MyShape
path Line {
MOVETO {x -0.5 y -0.5}
LINETO {x 0.5 y -0.5}
LINETO {x 0.5 y 0.5}
LINETO {x -0.5 y 0.5}
LINETO {x -0.45 y -0.45}
CLOSEPOLY {}
STROKE {}
}
rule MyShape {
Line {}
}
CLOSEPOLY error
Note the CLOSEPOLY command will connect an extra line segment to close the shape if there is a gap between the beginning and the end points. In case we want to get rid of the error, we can use the CLOSEPOLY command with an extra parameter align.
startshape MyShape
path Line {
MOVETO {x -0.5 y -0.5}
LINETO {x 0.5 y -0.5}
LINETO {x 0.5 y 0.5}
LINETO {x -0.5 y 0.5}
LINETO {x -0.45 y -0.45}
CLOSEPOLY {p align}
STROKE {}
}
rule MyShape {
Line {}
}
I start using the C++ interface for OpenCV, instead of the old highgui C functions. Here is an example to do real time video capture from the default webcam.
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
using namespace cv;
int main(int, char**)
{
VideoCapture cap(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
if (!cap.isOpened())
return -1;
namedWindow("camera",CV_WINDOW_AUTOSIZE);
while (true)
{
Mat frame;
cap >> frame;
imshow("camera", frame);
if (waitKey(10) >= 0)
break;
}
return 0;
}
Today we start to think recursively. The following example uses a simple recursive definition of a SQUARE. In Context Free Art, we may not need to specify a stop condition when each iteration reduces its size, until eventually, the shape is too small to display.
After we can create different primitive shapes, we start to combine them together. We cannot simply put all the primitive shapes within one single shape rule, like: