如果我有一个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'? –