2009-09-02 24 views
0

我目前正在將我的jruby/java2d Graph Drawing/Layouting應用程序移植到macruby/cocoa。因此我需要獲得一個打開的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轉換成一堆直線的簡單方法?

發送路徑一個bezierPathByFlatteningPath消息。這將返回一個新的路徑,如此轉換。

+1

謝謝你不給我一個我明顯應得的RTFM。 – thestoneage 2009-09-02 10:33:50