On 9 Jul 2008, at 4:02 pm, Chris Suter wrote:

so you can get a worst case bounds by ignoring the mitre limit.



No you can't. If the stroke width is 'w' then you can outset the bounds by w/2 to enclose the path for straight edges and angles >= 90 degrees. When there is a more acute angle though the resulting spike quickly extends beyond this bounds up to the miter limit, at which point it becomes a bevel join and falls within the bounds again. Thus to calculate the bounds that will include all such spikes, you do need to factor in the miter limit.

Thanks to this page I now understand what the miter limit is:

http://tavmjong.free.fr/INKSCAPE/MANUAL/html/Attributes-Stroke.html

It's the distance 'm' along the widest part of the corner. This is the hypotenuse of a right-triangle whose other sides are the edge of the path and the normal to the path, which has the known width 'w'. Thus the angle 'a' of the corner is equal to 2*sin(w/m), or m = 2w/sin(a). But it's not necessary to worry about the angle itself for a worst case calculation, since only the value of m matters - it can never exceed the programmed miter limit. Thus the path bounds is simply outset by (miter limit * w/2) to ensure it is just beyond the tip of any possible spike.

Once I realised exactly what the miter limit actually defines it turns out the calculation is trivial - understandably so since when stroking a path the renderer will want to do this quickly and probably not get too bogged down in lots of trig.

Thanks to everyone who responded, all helped to focus my thoughts.

For the better calculation (rather than worst case), Kai's suggestion of using the outlined path bounds is a great solution ;-)


cheers, Graham



_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to