objective-c – 有没有办法获得NSBezierPath对象的所有点的x,y坐标?

objective-c – 有没有办法获得NSBezierPath对象的所有点的x,y坐标?,第1张

概述如果我有一个NSBezierPath对象,有没有办法得到绘制的所有点的坐标(x,y).我想沿着路径移动NSRect. NSBezierPath没有准确定义它绘制的点,但它确实包含定义其片段所需的点.您可以使用 elementAtIndex:associatedPoints:方法获取路径中每个向量元素的点.要获取路径中的每个点,您必须迭代所有元素并获取关联点.对于直线,此方法将为您提供端点,但如果您 如果我有一个NSBezIErPath对象,有没有办法得到绘制的所有点的坐标(x,y).我想沿着路径移动NSRect.解决方法 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(curr));    }}
总结

以上是内存溢出为你收集整理的objective-c – 有没有办法获得NSBezierPath对象的所有点的x,y坐标?全部内容,希望文章能够帮你解决objective-c – 有没有办法获得NSBezierPath对象的所有点的x,y坐标?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1002080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存