Как бы я нарисовал что-то подобное в Core Graphics - PullRequest
6 голосов
/ 04 марта 2010

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

Edit: Не нужно перекосить по пути. Я просто не могу решить эту проблему в Illustrator. alt text

Ответы [ 4 ]

3 голосов
/ 15 марта 2010

Помогает ли Apple Doc?

См. Раздел в Руководство по программированию в 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 голосов
/ 09 марта 2010

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

Подробнее см. Здесь: http://likethought.com/opacity/workflow/информация.

2 голосов
/ 11 марта 2010

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

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

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

0 голосов
/ 04 марта 2010

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

...