package qtrees; import java.io.IOException; import java.io.Writer; /** * Representation of a node in a QTree * @author Sjaak Smetsers * @author Camil Staps, s4498062 * * Note: the version by Sjaak Smetsers contained a sameLeaf method. This seems to be reduntant though, so I removed it. */ public abstract class QTNode { protected boolean boolean_value; protected String string_value; /** * Fill a (part of a) bitmap with this node * In the template this was an abstract method. However, then we would use * essentially the same code in BlackLeaf and WhiteLeaf. Using a concrete * function here that depends on static properties is much more flexible. In * GreyNode we still override this function. * @param x the x coordinate of the top left corner * @param y the y coordinate of the top left corner * @param width the width of the part of the bitmap to fill * @param bitmap the bitmap to fill */ public void fillBitmap( int x, int y, int width, Bitmap bitmap ) { int old_x = x, old_y = y; for (; x < old_x + width; x++) for (y = old_y; y < old_y + width; y++) bitmap.setBit(x, y, boolean_value); } /** * Write a node as bitstream * In the template this was an abstract method. However, then we would use * essentially the same code in BlackLeaf and WhiteLeaf. Using a concrete * function here that depends on static properties is much more flexible. In * GreyNode we still override this function. * @param out Writer to write to * @throws IOException is passed on from Writer */ public void writeNode( Writer out ) throws IOException { out.write("0" + string_value); } /** * Fill a complete area of a bitmap with a particular value * @param x the x coordinate of the top left corner * @param y the y coordinate of the top left corner * @param width the width (and height) of the area to fill * @param bitmap the bitmap to fill * @param val the value to fill the area with */ public static void fillArea( int x, int y, int width, Bitmap bitmap, boolean val ){ for (int i = 0; i < width; i++) { for (int j = 0; j < width; j++) { bitmap.setBit(x+i, y+j, val); } } } }