2017-02-28 34 views
1

鑑於我有一個CGPathRefUIBezierPath或其他一些等效的iOS表示,是否有內置庫函數可用於爲我計算此對象的剪輯?剪切CGPathRef或UIBezierPath

  • 我特別需要針對一個軸對齊的矩形進行裁剪。
  • 能夠對另一條任意路徑進行剪輯會非常酷。
  • 能夠在路徑上計算布爾運算會更酷:union,difference,intersection(clipping是交集操作)。

注意爲了澄清,我不要求要能與剪輯的路徑。我想獲得一個實際的剪輯路徑,作爲一個新的路徑。

回答

1

查看我對this other question的相似答案。我寫了一個庫,可以讓你計算任意兩個UIBezierPath之間的交集並計算它們之間的剪切路徑。圖書館在https://github.com/adamwulf/ClippingBezier

雖然其他問題涉及形狀的交集,但您也可以簡單地將兩個路徑拆分爲組件。

NSArray* clippedPathSegments = [UIBezierPath redAndGreenAndBlueSegmentsCreatedFrom:path1 bySlicingWithPath:path2 andNumberOfBlueShellSegments:NULL]; 

這種方法有一點尷尬的名字,它的內部使用了更好的命名uniqueShapesCreatedFromSlicingWithUnclosedPath:的方法,但應該做你想要什麼。

+0

感謝亞當 - 你的應用看起來不錯,它很棒,你已經分享了算法。我希望有一個非圖書館的方法,所以我會暫時擱置這個問題,但你會得到我的最高票數!我想象那裏不是建立在一個方式,或者你不會建立一個圖書館:-) – Benjohn

+0

如果沒有暴露的功能,這有點瘋狂。 'CGContext ...'相關函數在內部清楚地利用了CGPath交集功能。但我看不到一種方法來「解決問題」。我想知道是否可以使用'CGContextClip'然後「讀出」剪輯路徑,但似乎沒有辦法讀出它。 – Benjohn

+0

完全同意 - 對我來說,他們的貝塞爾代碼中的這麼少的內容暴露在API中是很奇怪的。即使UIBezierPath也更多地限制了MacOS上已經有限的NSBezierPath ...如果你發現一個非庫選項,一定要讓我知道,我會很好奇的看到它:) –