Как я потянул бы что-то вроде этого в Базовой Графике

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

Править: Это не должно деформироваться к пути. Я просто coultn't устраняю ту проблему в Illustrator. alt text

6
задан Jab 8 March 2010 в 17:31
поделиться

4 ответа

Вы можете попробовать импортировать документ Illustrator в это приложение: Непрозрачность , а затем выполнить «Экспортировать как исходный код».

См. Здесь: http://likethought.com/opacity/workflow/ для получения дополнительной информации.

3
ответ дан 16 December 2019 в 21:38
поделиться

Похоже, это задание для OpenGL. CoreGraphics не предлагает какого-либо известного мне простого способа деформировать звезды в зависимости от их близости к пути.

0
ответ дан 16 December 2019 в 21:38
поделиться

Вам нужно будет пройти путь и вычислить координаты кривой на равных расстояниях (вдоль пути). Это не требует больших затрат. Вращение становится немного сложным (вращение вокруг касательной), но в целом это базовая задача кривой Безье. Просто решите уравнение кривой и отрисуйте звезду в каждой вершине.

Нет ничего встроенного, что могло бы сделать все это. Вы можете запросить точки пересечения, но только рендеринг решает кривую. Это инкапсулировано в CoreGraphics, поэтому вы не можете вытащить это или воспользоваться тем, что у них уже есть.

Это то, что вы должны написать сами. Это не сложно, честно. Требуется только базовое понимание калькуляции... если вообще требуется. Если вы напишете его сами, вы даже сможете добавить эффекты искривления, если захотите.

2
ответ дан 16 December 2019 в 21:38
поделиться

Помогает ли документ Apple?

См. Раздел в Руководство по программированию Quartz 2D, Как работают шаблоны или Шаблоны в целом .

Вот как нарисовать начало (из приведенных выше документов), PSIZE - это размер звезды:

static void MyDrawStencilStar (void *info, CGContextRef myContext)
{
    int k;
    double r, theta;

    r = 0.8 * PSIZE / 2;
    theta = 2 * M_PI * (2.0 / 5.0); // 144 degrees

    CGContextTranslateCTM (myContext, PSIZE/2, PSIZE/2);

    CGContextMoveToPoint(myContext, 0, r);
    for (k = 1; k < 5; k++) {
        CGContextAddLineToPoint (myContext,
                    r * sin(k * theta),
                    r * cos(k * theta));
    }
    CGContextClosePath(myContext);
    CGContextFillPath(myContext);
}

Просто добавьте преобразование кривой и нарисуйте звезду в каждой точке.

Вот простой код C для вычисления точек на кубической кривой Безье .

3
ответ дан 16 December 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: