如果我有一個NSBezierPath對象,是否有辦法獲得所有繪製點的座標(x,y)。我想沿路徑移動NSRect。有沒有辦法獲得NSBezierPath對象所有點的x,y座標?
回答
NSBezierPath沒有精確定義它繪製哪些點,但它確實包含了定義它的片段所需的點。您可以使用elementAtIndex:associatedPoints:
方法獲取路徑中每個向量元素的點。要獲取路徑中的每個點,您必須迭代所有元素並獲取關聯的點。對於直線,此方法將爲您提供端點,但如果您記錄了前一點,則可以根據需要使用任意數量的點。
對於曲線,您需要實現代碼來確定曲線沿曲線找到點的路徑。使用bezierPathByFlatteningPath
來平坦化路徑會簡單得多,該路徑返回一條將所有曲線轉換成直線的新路徑。
下面是一個將路徑弄平並在結果中打印所有行的端點的示例。如果您的路徑包含長直線,您將需要根據長度添加沿線的點。
NSBezierPath *originalPath;
NSBezierPath *flatPath = [originalPath bezierPathByFlatteningPath];
NSInteger count = [flatPath elementCount];
NSPoint prev, curr;
NSInteger i;
for(i = 0; i < count; ++i) {
// Since we are using a flattened path, no element will contain more than one point
NSBezierPathElement type = [flatPath elementAtIndex:i associatedPoints:&curr];
if(type == NSLineToBezierPathElement) {
NSLog(@"Line from %@ to %@",NSStringFromPoint(prev),NSStringFromPoint(curr));
} else if(type == NSClosePathBezierPathElement) {
// Get the first point in the path as the line's end. The first element in a path is a move to operation
[flatPath elementAtIndex:0 associatedPoints:&curr];
NSLog(@"Close line from %@ to %@",NSStringFromPoint(prev),NSStringFromPoint(curr));
}
}
謝謝。沒有意識到elementAtIndex:associatedPoints:方法。但我有一個疑問。當我在bezierpathWithOvalInRect創建的bezierpath上展平路徑之後嘗試了元素數。我得到了一個數字17.如果每個元素只能包含一個點,我可以用17點創建一個完整的橢圓形,這怎麼可能? – Rakesh
這取決於使用的橢圓形和平面的大小。如果減小平坦度值,線條將創建更精確的表示,這意味着它需要更多點。 – ughoavgfhw
不,因爲路徑是基於矢量的,而不是基於像素的。您必須在CGContextRef
中呈現路徑,然後檢查從中設置了哪些像素。但是沒有內置的方法。
但是,如果您需要沿着路徑移動一個矩形,您可能可以使用CALayer
來完成此操作,但我並不完全知道如何操作。
- 1. Delphi FMX - 有沒有辦法在Firemonkey中獲取表單的X,Y座標?
- 2. 有沒有辦法獲得CCSprite相對於另一個父對象的x,y位置?
- 3. 有沒有辦法在對象上的鼠標事件中獲得光標的uv座標?
- 4. 有沒有辦法抑制「刪除所有斷點」的Y/N對話框?
- 5. 有沒有辦法在Google Maps中獲取標記的座標?
- 6. X的所有對,Y從每個點座標每隔一點與Java
- 7. Android:有沒有辦法獲得RemoteViews對象的大小?
- 8. 獲取目標中兩點之間的所有X,Y座標C
- 9. 如何獲取Android中imageview的所有x和y座標?
- 10. 有沒有辦法在客戶端獲得Tenant對象列表?
- 11. 有沒有辦法獲得JavaFX屬性的所有綁定?
- 12. 有沒有辦法獲得一個主題的所有訂閱?
- 13. 有沒有辦法獲得所有可用的action_types?
- 14. 有沒有辦法獲得DOMElement的所有屬性?
- 15. Jenkins:有沒有辦法獲得所有項目URL的列表
- 16. 有沒有辦法獲得創建另一個對象的對象的實例?
- 17. 量角器 - 有沒有辦法做一個點擊/拖動事件與x,y座標
- 18. 有沒有辦法通過Rmagick在種植後獲得修剪的座標?
- 19. PHP:有沒有辦法打印所有已創建的對象?
- 20. 有沒有辦法讓一個窗口的所有BindingExpression對象?
- 21. 有沒有辦法訪問給定對象的所有引用?
- 22. jquery「對象沒有辦法」
- 23. 有沒有辦法從FutureTask獲得Callable?
- 24. ShareKit - SHKFacebook:有沒有辦法獲得authorization_token?
- 25. Netbeans:獲得X和Y座標
- 26. 有沒有辦法在Away3D的Flash平臺上獲得2D座標的3D座標?
- 27. PDFsharp:有沒有辦法在頁面的標題中生成「Y的頁面X」?
- 28. 有沒有辦法從位置(x,y線)找到div名稱
- 29. 有沒有辦法按地點獲得facebook的公開帖子?
- 30. 有沒有辦法醃製FTP對象?
'cocoa-touch'中不存在NSRect。你的意思是'CGRect'? –