gpt4 book ai didi

ios - 与CGPathCreateCopyByStrokingPath相反?

转载 作者:行者123 更新时间:2023-12-01 16:33:27 26 4
gpt4 key购买 nike

是否有任何核心方法或其他框架方法可返回表示路径对象的Fill部分的CGPath或某种类型的集合?

我正在寻找基本上与 CGPathCreateCopyByStrokingPath 相反的东西。

在有关low-level-text-rendering的文章的帮助下,我能够提出一个代表字母表中每个字母的路径。

问题在于路径是字母的轮廓,而我实际上想要的是仅代表字母填充部分而不是笔划的路径。例如,字母“A”仅由3条不同的线组成。

我目前正在尝试通过类来解决此问题,该类的行为就像一个过于复杂的16段显示器。这是一些有兴趣的人的示例代码:

const NSUInteger segmentsPerDimension = 4;
const CGFloat oneOverTheNumberOfSegments = 1.0 / segmentsPerDimension;

@implementation PathSegments

- (instancetype)initWithRect:(CGRect)rect {
self = [super init];
[self setSegmentBounds:rect];
_segments = [[NSMutableArray alloc] init];
...
[self addVerticalSegments];
...
return self;
}

- (void)addVerticalSegments {
for (NSUInteger i = 0; i <= segmentsPerDimension; i++) {
[self createColumnSegmentsForRow:i];
}
}

- (void)createColumnSegmentsForRow:(NSUInteger)row {
for (NSUInteger i = 0; i < segmentsPerDimension; i++) {
CGFloat x = _segmentBounds.size.width * oneOverTheNumberOfSegments * row;
CGFloat yEnd = _segmentBounds.size.height * oneOverTheNumberOfSegments * i;
CGFloat yStart = _segmentBounds.size.height * oneOverTheNumberOfSegments * (i + 1);
[self addLineSegmentWithXStart:x YStart:yStart XEnd:x YEnd:yEnd];
}
}
...
@end

最佳答案

我确定返回路径的填充部分没有任何意义。虽然可以通过填充轮廓来定义绘制圆形,矩形或自定义形状的路径,但是将填充部分复制到另一条路径将是模棱两可的,因为它与开始时的路径完全相同。

分段的路径然后使用GPathAddPath(...)组合为一个完整的路径,似乎是继续进行下去的方法。使用一系列直线和曲线,您可以滚动自己的字母形状。

基于您已定义了一组点用作路径段的假设的摘要:

_generatedSegmentPath = CGPathCreateMutable();
CGMutablePathRef subPath = CGPathCreateMutable();

...

if (CGPathIsEmpty(subPath)) {
CGPoint start = [[points objectAtIndex:startIndex] CGPointValue];
CGPathMoveToPoint(subPath, nil, start.x, start.y);
}

if (points.count == 2) {
CGPoint point = [[points objectAtIndex:startIndex + indexChange] CGPointValue];
CGPathAddLineToPoint(subPath, nil, point.x, point.y);
}
else {
CGPoint controlPoint = [[points objectAtIndex:startIndex + indexChange] CGPointValue];
CGPoint endPoint = [[points objectAtIndex:startIndex + (2 * indexChange)] CGPointValue];
CGPathAddQuadCurveToPoint(subPath, nil, controlPoint.x, controlPoint.y, endPoint.x, endPoint.y);
}

然后将子路径组合在一起:
CGPathAddPath(_generatedSegmentPath, nil, subPath);

关于ios - 与CGPathCreateCopyByStrokingPath相反?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30424612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com