Как изменить порядок точек CGPath в macOS - PullRequest
0 голосов
/ 30 октября 2019

Я ищу создание CGPath с инвертированным отсечением на основе входной формы CGPath в macOS. Мой план состоит в том, чтобы просто сделать достаточно большой простой прямоугольник и затем добавить в него версию входного пути в обратном порядке, чтобы сделать отверстие, основываясь на правиле направления намотки.

Проблема в том, что я не могукажется, найти какой-либо способ отменить CGPath. В iOS, кажется, есть bezierPathByReversingPath для UIBezierPath, но я не могу найти ничего подобного в macOS ( EDIT: оказывается, что это была ошибка с моей стороны, NSBezierPath имеет соответствующий метод ). Кто-нибудь знает, как изменить порядок точек / направление рисования существующего CGPath?

Я нашел эту старую нить, восемь лет назад просившую более или менее то же самое, но, похоже, там нет решенийдля macOS, за исключением одного, где ссылки, к сожалению, больше не работают, и я не могу комментировать. Как поменять порядок точек CGPath Так что я надеюсь на удачу в этот раз.

1 Ответ

0 голосов
/ 11 ноября 2019

Хотя это и не очень элегантно, в конце концов я сделал это, пройдя через NSBezierPath. В этих шагах:

  1. Создайте NSBezierPath на основе CGPath, используя CGPathApply, чтобы получить доступ к элементам в CGPath один за другим и добавьте соответствующие к NSBezierPath. (Например, вот так Преобразовать CGPathRef в NSBezierPath )

  2. Использовать bezierPathByReversingPath в NSBezierPath для изменения порядка точек.

  3. Получить обратный CGPath обратно из NSBezierPath, создав новый CGPath из элементов в NSBezierpath (например, так: Как я могу преобразовать NSBezierPath в CGPath )

...