Hi Lew,
A line "from" 20 "to" 21 should only be one pixel long as the distance
between those points is only 1 pixel.
The bug is that we drew 2 pixels when you gave us the first stroke. I
think I know what's causing that. We have a test to see if the line
width is small enough to generate "single pixel wide lines" and then we
just use bresenham. I don't have the code in front of me, but I'm 99%
sure that we don't check the CAP setting when we classify the lines as
"thin" and so we don't note that we should leave off a pixel and just
use the default bresenham which models something similar to a CAP_SQUARE
or CAP_ROUND type of a line length... :-(
...jim
[EMAIL PROTECTED] wrote:
Hi All,
Hoping someone can help me with this one ...?
I need to draw lines with a width greater than 1 and the lengths may be a real value so I am using
Line2D.Float.
I need to draw exact (calculated)lengths so I am using CAP_BUTT so the line does not have any additional
apparent length (the other CAP options have the effect of adding the line width to the line)
The problem I am having is that once the line width is set to greater than 1, the lines are actually drawn 1 pixel short.
I am sure I am missing soething simple here but have spent a lot of time on
it!
I know that I can work around it but do I need to, I shouldn't have to + 1 to
my line lengths depending on there width?
The following demonstrates the problem. I am drawing on a JPanel within a JFrame, JDK/JRE 6, Windows
g2.setStroke(new BasicStroke(1,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
g2.setColor(Color.BLACK);
g2.draw(new Line2D.Float(20,40,20,75)); // vertical line as marker only
// draw 2 lines with line width of 1
g2.setColor(Color.RED);
g2.draw(new Line2D.Float(20,60,21,60)); // draws 2 pixel line as
expected
g2.draw(new Line2D.Float(22,60,23,60)); // draws 2 pixel line as expected ... total of 4 pixels
// draw 2 lines with line width of 10
g2.setStroke(new
BasicStroke(10,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
g2.setColor(Color.GREEN);
g2.draw(new Line2D.Float(20,70,21,70)); // draws 1 pixel only at 20,70
g2.setColor(Color.YELLOW);
g2.draw(new Line2D.Float(22,70,23,70)); // draws 1 pixel only at
22,70... so, each line is shortened by 1 pixel
// this applies to any line width > 1
Thanks
Lew
[Message sent by forum member 'aussielew' (aussielew)]
http://forums.java.net/jive/thread.jspa?messageID=291753
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".