package edu.ucsb.cs56.W12.pconrad.lab04; import java.awt.geom.GeneralPath; // combinations of lines and curves import java.awt.geom.AffineTransform; // translation, rotation, scale import java.awt.Shape; // general class for shapes // all imports below this line needed if you are implementing Shape import java.awt.geom.Point2D; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.awt.Rectangle; import java.awt.geom.PathIterator; import java.awt.geom.AffineTransform; /** A vector drawing of a house that implements the Shape interface, and so can be drawn, as well as rotated, scaled, etc. @author Phill Conrad @version for CS56, Winter 11, UCSB */ public class House extends GeneralPathWrapper implements Shape { /** Constructor @param x x coord of lower left corner of house @param y y coord of lower left corner of house @param width width of the house @param height of house (including first story and second story) */ public House(double x, double y, double width, double height) { // Rather than having to scale at the end, we can just // draw things the right way to begin with, using the // x, y, width and height. If you haven't already // hard coded a particular drawing, this may be an easier // way. double firstStoryHeight = .75 * height; double roofHeight = height - firstStoryHeight; double firstStoryUpperLeftY = y + roofHeight; // Make the first story Rectangle2D.Double firstStory = new Rectangle2D.Double(x, firstStoryUpperLeftY , width, firstStoryHeight); // make the roof. Remember that y goes DOWN the page, // so we ADD to y to get a "lower" value on the screen Line2D.Double leftRoof = new Line2D.Double (x, y + roofHeight, x + width/2.0, y); Line2D.Double rightRoof = new Line2D.Double (x + width/2.0, y, x + width, y + roofHeight); // put the whole house together GeneralPath wholeHouse = this.get(); wholeHouse.append(firstStory, false); wholeHouse.append(leftRoof, false); wholeHouse.append(rightRoof, false); } }