2009-09-02 4 views
0

В настоящее время я переношу приложение jruby/java2d Graph Drawing/Layouting в macruby/какао. Поэтому мне нужно получить точку пересечения открытого NSBezierPath с закрытым NSBezierPath.NSBezierPath/Line Пересечение/сглаживание

В java2d Я использовал следующий трюк. Я сплющил оба пути и провел простой тест пересечения линий для каждого сегмента.

Итак, есть простой способ конвертировать NSBezierPath в связку прямых линий?

Мой текущий алгоритм просто проходит линию (по пути двоичного поиска), пока не найду NSPoint, для которого containsPoint является true. Но он работает только для прямых линий. Тот, который я реализовал в java2d, тоже работал для искривленных путей.

def getIntersection edge, path 
    out = edge.source 
    ins = edge.target 
    until (out.dist(ins) < 1.0) 
    mid = out + ((ins - out) * 0.5) 
    if (path.containsPoint (NSMakePoint(mid.x, mid.y))) 
     ins = mid 
    else 
     out = mid 
    end 
    end 
    return out 
end 

Graph http://i28.tinypic.com/168zs03.png

ответ

3

Так есть простой способ преобразования NSBezierPath в кучу прямых?

Послать ссылку a bezierPathByFlatteningPath сообщение. Это вернет новый путь, поэтому преобразуется.

+1

Спасибо, что не дал мне RTFM, которого я явно заслужил. – thestoneage