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".

Reply via email to