On Nov 28, 2009, at 2:50 PM, Quincey Morris wrote:

> On Nov 27, 2009, at 14:58, Shane wrote:
> 
>> I think I'm understanding this in part ...
>> 
>> // *.h
>>      NSMutableData *pointData;
>>      NSPointArray *points;
>> 
>> // *.m
>>      pointData = [[NSMutableData alloc] init];
>> 
>>      ...
>> 
>>      NSPoint point = NSMakePoint([iters floatValue], [mse floatValue]);
>>      // not sure how to get an NSPoint into NSMutableData?
>> 
>>      // here I resize NSMutableData, but this will always only be
>>      // increasing the length by 1.
>>      [pointData increaseLenghtBy:sizeof(NSPoint)];
>> 
>>      // and here I assign the data to NSPointArray
>>      points = (NSPoint *) [pointData bytes];
>> 
>> And from here I can pass this NSPointArray around till I get to the
>> point where I will use this data for my NSBezierPath. Will
>> NSBezierPath (which takes an NSPointArray) be able to properly read
>> from 'points' by doing the above?
> 
> In part, but not quite. Although Graham's advice was good, and might be a 
> better approach, for completeness here's how this approach works.
> 
> You only need one instance variable:
> 
>       NSMutableData *pointData;
> 
> which you can initialize as above.
> 
> To add a point, I'd do something like this:
> 
>       NSUInteger pointCount = [pointData length] / sizeof (NSPoint);
>       [pointData setLength: (pointCount  + 1) * sizeof (NSPoint)];
>       NSPointArray points = [pointData mutableBytes];
>       points [pointCount] = somePoint;
> 
> To add the points to a Bezier path:
> 
>       [somePath appendBezierPathWithPoints: [pointData mutableBytes] count: 
> [pointData length] / sizeof (NSPoint)];
> 
> Note:
> 
> 1. 'NSPointArray*' isn't the correct type for an array of points. Plain 
> 'NSPointArray' is what you want.
> 
> 2. You will get a compiler warning if you try to assign [pointData bytes] to 
> the NSPointArray variable, because the [point bytes] is of type 'const 
> void*'. You need [pointData mutableBytes] which is just of type 'void*'.
> 
> 3. There's no need to cast [point mutableBytes] to NSPointArray because 
> there's no warning assigning from 'void*' to a compatible pointer type. 
> Casting it is not wrong, but any time you write an explicit cast, you're 
> overriding much of the compiler's type checking, so it's easy to introduce 
> bugs that way. (Not likely in this case, but as a general consideration.) 
> It's a personal thing, though -- I guess some people like to have the 
> explicit cast because it documents what the code is supposed to be doing.

Another possible approach is simply use a NSMutableArray full of NSValue 
objects that contain
the NSPoint structures . . .

    Cheers,
        . . . . . . . .    Henry


_______________________________________________

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 arch...@mail-archive.com

Reply via email to