I’m developing a simple a graphical editor for my flash-based app. In my editor there’s a posibility of scaling, range of scaling is big (maximum scale is 16.0, minimum scale is 0.001 and default scale is 0.2). So it’s quite possible that a user can draw a line with thickness 0.1 or 300.0, and it looks that line possible thickness (in Graphics.lineStyle()) has upper border. As I found out from livedocs maximum value is 255. So if thickness is greater then 255.0 there’is drawn a line of thickness 255.0. Whether mentioned upper border exists and how big is it. Here’re my questions:
- Right now I’m drawing lines with
drawPath()orlineTo()methods. Natural walkarround if thickness is greater then255.0is to draw a rectange instead of segment and two circles on the ends of segment (instead oflineTo()). Or even to draw two thin segments and two half-circles and fill interior. Maybe there’s more elegant/quick solution? - Another question is if the thickness of line is big but less then
255.0(e.g.100.0), what is faster drawing a line withlineTo()or drawing two thin segments and two half-circles and fill interior? - And finally, maybe someone knows a good article/book where I can read what’s inside all methods of
flash.display.Graphicsclass (or even not flash specific article/book on graphics)?
Any thoughts are appreciated. Thank you in advance!
I agree with f-a that putting the line in a container would probably be better and more efficient than drawing a rectangle and extra circles.
I don’t think that the math would be too difficult to work out. For efficiency you should probably only do this if the line style is going to be over 255.
To setup the display object to hold your line I would start by halving the width of your line (the length can stay the same). Then create a new sprite and draw the line in the sprite at half size (e.g. if you wanted 300, just draw it at 150). It would be most simple to just start at (0,0) and draw the segment straight so that all of your transformations can be applied to the new sprite.
From here you can just double the scaleY of the sprite to get the desired line weight. It should keep the same length and the ends should also be rounded correctly.
Hope this helped out!
A cool resource for working with the graphics class is Flash and Math. This site has several cool effects and working examples and source code.
http://www.flashandmath.com/