[Drawkit] Now with added testing. (was Re: For the brave ; -)

Brad Larson larson at sonoplot.com
Thu Aug 7 13:16:22 PDT 2008


I ran into a strange issue where I was getting blank documents from  
low-feature-number patterns until I noticed that DKRouteFinder's  
initWithArray: returns nil for arrays with fewer than 4 objects in  
them.  This doesn't matter for the nearest-neighbor sort, so I added a  
check for that mode of sorting in the initWithArray.

I also removed some errant NSLogs from the code I attached previously.

On Aug 5, 2008, at 5:13 PM, Brad Larson wrote:

> You're right, that starts things off at the right point.  I added a  
> quick search routine at the beginning of the nearest neighbor method  
> to find the point closest to 0,0.
>
> I was still having problems with the result not starting at the  
> right point until I saw that in the sortedArrayFromArray: method you  
> were assuming an index of 0 for the first point in the list (based  
> on the previous symmetric search).  If any other point is the upper- 
> left point, this causes weird results.  I added an instance variable  
> to act as a holder for the correct index of the starting point.   
> With this in place, it is now perfectly optimizing the grids.
>
> I was also seeing some bizarre behavior with patterns containing  
> lines where some were dropped and others duplicated.  That came  
> about because the line
>
> mOrder[++k] = [points indexOfObject:[mVisited lastObject]] + 1;
>
> in the sortArrayUsingNearestNeighbour: method would run into a  
> problem if two lines had the same starting point.  The index for the  
> first line would be used when the second line came up.  To fix this,  
> I created a parallel array of indices that can be used to track the  
> unique items as they pass through the sort.
>
> This is close to complete, but it still does not recognize lines,  
> arcs, and other features that are touching and that we'd want to  
> draw in one motion, so I'm going ahead with a version that uses two  
> points for each object and finds nearest neighbors based on those  
> two points.
>
> On Aug 5, 2008, at 8:03 AM, Graham Cox wrote:
>
>> Not sure exactly what the problem is, but it would be better to  
>> start at the top, left point of a notional bounding box of the  
>> objects. Then you know that searching east should find something  
>> sensible in your object set. Starting at 0,0 might put the ideal  
>> first object outside the visibility of the NN search for a given  
>> direction.
>>
>> cheers, Graham
>>
>>
>> On 5 Aug 2008, at 9:16 am, Brad Larson wrote:
>>
>>> Testing it out, it's very close, but I'm having a problem with the  
>>> fact that the pathfinding starts at the first element drawn,  
>>> rather than the zero point.  This means that if you have a grid,  
>>> and the first point you drew was in the middle of the grid, you'll  
>>> get a nonoptimal path.  Our dispenser always starts from the 0,0  
>>> point when drawing, so this also reflects the actual behavior of  
>>> the device.  I tried modifying the nearest-neighbor to do this by  
>>> inserting a 0,0 point as the first point to test against, then  
>>> removing that 0,0 point at the end, but I'm getting weird behavior  
>>> from it (dropped lines, jumpiness at the start) so I must not be  
>>> doing it the right way.
>>
>> _______________________________________________
>> Drawkit mailing list
>> Drawkit at lists.apptree.net
>> http://lists.apptree.net/listinfo.cgi/drawkit-apptree.net
>
> ______________________
> Brad Larson
> SonoPlot, Inc.
> 3030 Laura Lane, Suite 120
> Middleton, WI 53562
>
>
> < 
> DKRouteFinder 
> .h><DKRouteFinder.m>_______________________________________________
> Drawkit mailing list
> Drawkit at lists.apptree.net
> http://lists.apptree.net/listinfo.cgi/drawkit-apptree.net

______________________
Brad Larson
SonoPlot, Inc.
3030 Laura Lane, Suite 120
Middleton, WI 53562
-------------- next part --------------
A non-text attachment was scrubbed...
Name: DKRouteFinder.m
Type: application/octet-stream
Size: 24616 bytes
Desc: not available
URL: <http://lists.apptree.net/pipermail/drawkit-apptree.net/attachments/20080807/d5213dd7/attachment-0001.obj>
-------------- next part --------------





More information about the Drawkit mailing list