So i have to draw a diamond shape. Not a Static diamond but a diamond that i will myself drag and draw. I've used General Path to do it but it is drawing a diamond that is not straight; the diamond is bend to the left and it's not being drawn to where my mouse is pointed.
Here is my code to create the diamond shape. Can someone please help me solve this?
private GeneralPath drawDiamond(int x1, int y1, int x2, int y2){
int x = Math.min(x1, x2);
int y = Math.min(y1, y2);
// Gets the difference between the coordinates and
int width = Math.abs(x1 - x2);
int height = Math.abs(y1 - y2);
Rectangle2D.Double diamond = new Rectangle2D.Double(x1,y1,width,height);
GeneralPath connectedDiamond = new GeneralPath(GeneralPath.WIND_EVEN_ODD);
connectedDiamond.append(diamond, true);
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(20));
connectedDiamond.transform(at);
return connectedDiamond;
}
Here is my paint method:
public void paint(Graphics g) {
graphSettings = (Graphics2D) g;
graphSettings.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
graphSettings.setStroke(new BasicStroke(4));
Iterator<Color> strokeCounter = shapeStroke.iterator();
for (NamedShape s : shapes) {
graphSettings.draw(s.getShape());
}
if (drawStart != null && drawEnd != null) {
graphSettings.setComposite(AlphaComposite.getInstance(
AlphaComposite.SRC_OVER, 0.40f));
graphSettings.setPaint(Color.LIGHT_GRAY);
Shape aShape = null;
if(currentAction == 7){
aShape = drawDiamond(drawStart.x, drawStart.y, drawEnd.x, drawEnd.y);
}
graphSettings.draw(aShape);
}
}
Can someone please help me to do this?
How about instead of rotating a rectangle, you draw lines between 4 points inside a rectangle:
the points:
excuse my poor mspaint skills.
but i hope u get what i mean. u take the top center, middle right, bottom center and middle left points and draw lines between those (using generalPath, i think)
It would be simpler to create diamond as polygon with vertices
The 2D Shape API is actually really powerful, one of my favourite classes is the
Path2D
, it allows you to simply "draw" a virtual shape, for exampleNow, you need to make use of an
AffineTransformation
or translate theGraphics
context to position it, but that's not that hard