[Drawkit] Problem with creating shape from glyph (was Re: Beta 4 Finally up!)

James Maxwell jbmaxwell at rubato-music.com
Tue Jul 22 18:47:50 PDT 2008


hmm... I'll check this out later, but I'm pretty sure I'm not using a  
setPath: anywhere in my code - I remember you recommended against that  
a while ago. I'll triple-check it anyway, and if it's definitely not  
coming from anywhere in my code that I can find, maybe I'll send you a  
code snippet.

I'll look into the +drawableShapeWithBezierPath: option as well. Thanks.

J.



On 22-Jul-08, at 6:33 PM, Graham Cox wrote:

> Hi James,
>
> adoptPath: should still work. Yes it transforms the path you give it  
> to the unit square, but it can do that whether the original path is  
> square or not, since it applies independent scale factors in x and y.
>
> You could also simply create the shape in the first place from your  
> glyph using +drawableShapeWithBezierPath: which does something very  
> similar to adoptPath: but should be slightly more efficient because  
> it's not changing a path, but starting with the fresh one you give  
> it. However, it still ends up calling setPath:
>
> I can't think of a good reason why you should fall foul of the  
> sanity check unless you call setPath: directly with some random  
> path, because every other way to set the path applies an appropriate  
> transform that should allow the path to pass that check! So  
> something's weird, in other words.
>
> Note, when a DKTextShape is converted to a plain shape, it converts  
> the text to a path then creates the shape using it in this way, so  
> there is a built-in test case that's very similar to what you are  
> trying to do. It currently works fine, so you might want to compare  
> it to your code and see what is different.
>
> cheers, Graham
>
>
> On 23 Jul 2008, at 1:57 am, James Maxwell wrote:
>
>> Hey Graham,
>>
>> The new sanity check for unit size in DKDrawableShape has broken my  
>> glyph-based shapes.
>> I'm using -adoptPath:, but of course, although adoptPath: tries to  
>> resize the path to unit size, it then calls setPath:, which is  
>> where glyphs fail. This appears to be due to the fact that - 
>> appendBezierPathWithGlyph:inFont: returns a path whose bounds are  
>> generally oddly shaped - i.e., not square - but your sanity check  
>> wants a square path, so even adoptPath: can't fix paths from  
>> glyphs. At least that's my best guess. I've hackishly overridden  
>> setPath: and commented out the sanity check, just to get it working  
>> for now, but do you have any suggestions as to how I might devise a  
>> more "sane" method for creating glyph-based drawable shapes? Pretty  
>> much all of my musical objects - notes, clefs, and so on - will be  
>> coming from music fonts, and need to be single objects (i.e., I  
>> tried using text but it was very awkward). You had suggested the  
>> idea of DKDrawableShape and adoptPath: a few months ago. Any other  
>> ideas? Or is it possible, and safe, to make the sanity check accept  
>> non-square paths, as long as they're equal to 1.0 in their longest  
>> dimension?
>
> _______________________________________________
> Drawkit mailing list
> Drawkit at lists.apptree.net
> http://lists.apptree.net/listinfo.cgi/drawkit-apptree.net



More information about the Drawkit mailing list