Исключение с CGPathApplierFunction
Мой CGPathRef
имеет 5 элементов, я хочу удалить начальную точку и иметь путь с 4 элементами, чья начальная точка совпадает с концом пути, чью начальную точку я хочу удалить.
теперь это моя функция, которая генерирует исключение:
static void constructPath(void *info, const CGPathElement *element)
{
NSBezierPath *bezierPath = (NSBezierPath *)info;
switch (element->type) {
case kCGPathElementMoveToPoint:
// some kind of skipping using points[0] kCGPathElementMoveToPoint
[bezierPath lineToPoint:element->points[1]]; // line exception in gdb
[bezierPath lineToPoint:element->points[2]];
[bezierPath lineToPoint:element->points[3]];
[bezierPath lineToPoint:element->points[4]];
break;
case kCGPathElementAddLineToPoint:
if ([bezierPath isEmpty]) {
[bezierPath moveToPoint:element->points[0]]; // the new start, how to go to next from here ?
} else {
[bezierPath moveToPoint:element->points[1]];
[bezierPath moveToPoint:element->points[2]];
[bezierPath moveToPoint:element->points[3]];
[bezierPath moveToPoint:element->points[4]];
}
break;
default:
break;
}
}
1 ответ
Решение
Просто игнорируйте первый элемент исходного пути (который имеет тип kCGPathElementMoveToPoint
). Затем для каждой линии добавьте новую строку, кроме случаев, когда путь пуст, и в этом случае вам необходимо перейти к исходной точке.
static void constructPath (void * info, const CGPathElement * element) { NSBezierPath * bezierPath = (NSBezierPath *) info; if (kCGPathElementAddLineToPoint == element-> type) { if ([bezierPath isEmpty]) { [bezierPath moveToPoint: element-> points [0]]; } еще { [bezierPath lineToPoint:element->points[0]]; } } }