Hi folks, I've found what seems like a bug in the java2d drawing code. I've included a simple test application, at the end of this email, that demonstrates the problem. It involves drawing dashed lines whose ratio of line length to dash length is very large. I've tested it in both java 1.4.2 and java 1.5 and found the problem in both cases.
Here are some results of my tests that demonstrate the issue. Drawing a solid line seems fine no matter what the length... [EMAIL PROTECTED]> time java -cp . DrawDash 0 10000000 real 0m0.980s user 0m0.752s sys 0m0.052s ...However, when we add a dash to this long line it suddenly takes much longer to draw... [EMAIL PROTECTED]> time java -cp . DrawDash 5 10000000 real 0m10.262s user 0m9.865s sys 0m0.080s ...however, if we simply drop the length of the line down by a factor of 10 we are back to a reasonable length of time ... [EMAIL PROTECTED]> time java -cp . DrawDash 5 1000000 real 0m1.317s user 0m1.212s sys 0m0.016s ... The problem seems to be more based upon the ratio of the dash length to the line length as evidenced by the following set of results. First, this short line length with this incredibly short dash length is mostly fine... [EMAIL PROTECTED]> time java -cp . DrawDash .0005 100 real 0m2.426s user 0m2.220s sys 0m0.044s ...while these two, with a dash/length ratio 1/10th of that above, I had to kill because they were taking longer than 2 minutes!... time java -cp . DrawDash .0005 1000 time java -cp . DrawDash .00005 100 ...which seems to suggest that it is not entirely based upon the ratio since if that were the case they should take around 10 or 11 seconds as the one above with the same ratio. However, they take much longer than that. Maybe they will never finish! But, anyway, something is going on that it seems should be easily fixed. Anyone have any ideas? Cheers, Ken Here is the code for my tests... import javax.swing.JDialog; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.geom.Line2D; public class DrawDash { public static void main( String[] args ) { double lineSize = 1000.; float dashLength = 10; if ( args.length >= 1 ) { dashLength = Float.parseFloat( args[0] ); } if ( args.length >= 2 ) { lineSize = Double.parseDouble( args[1] ); } JDialog dialog = new JDialog(); dialog.setSize( new Dimension( 800, 800 ) ); dialog.show(); Graphics2D graphics = (Graphics2D) dialog.getGraphics(); graphics.setPaint( Color.RED ); if ( dashLength > 0 ) { float[] dashArray = new float[]{ dashLength, dashLength }; BasicStroke stroke; stroke = new BasicStroke( 1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 10.0f, dashArray, 0 ); graphics.setStroke( stroke ); } graphics.draw( new Line2D.Double( -lineSize, -lineSize, lineSize, lineSize ) ); System.exit( 0 ); } } =========================================================================== 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".