2013-09-12 3 views
1

Я ищу какой-то алгоритм или каким-то образом или даже некоторые ссылки, которые могут позволить мне сгенерировать набор прямоугольников из CGPathRef.CGPathRef для набора CGRects

Рассмотрим следующие случаи:

Добавить прямоугольник в пути

CGMutablePathRef pathref = CGPathCreateMutable(); 
CGPathAddRect(pathref, NULL, CGRectMake(10, 10, 200, 300)); 
CGPathCloseSubpath(pathref); 

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

Добавление Круг/Ellipse путь

CGMutablePathRef pathref = CGPathCreateMutable(); 
CGPathAddEllipseInRect(pathref, NULL, CGRectMake(10, 10, 500, 500)); 
CGPathCloseSubpath(pathref); 

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

бит более сложный путь

CGMutablePathRef pathref = CGPathCreateMutable(); 
CGPathAddRect(pathref, NULL, CGRectMake(10, 10, 200, 300)); 
CGPathAddEllipseInRect(pathref, NULL, CGRectMake(10, 10, 500, 500)); 
CGPathCloseSubpath(pathref); 

и так далее.

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

Может ли кто-нибудь направить меня на то, как это можно достичь?

ответ

1

Взгляните на сообщение в блоге Wrapping text around a shape with CoreText. Основная процедура в ней - copyRectangularPathsForPath:height:, которая принимает (почти) произвольный путь и возвращает вам массив прямоугольных путей заданной высоты, которые заполнят его. «Почти» состоит в том, что, как написано, он не может обрабатывать пути, которые потребуют непересекающихся нескольких прямоугольников в одной строке. Однако этот код может быть расширен, чтобы поддерживать эти формы.

+0

Спасибо, что мне нужно. Мне нужно переместить несколько прямоугольников в одну строку, но я могу отложить эту часть до тех пор, пока я не столкнусь с ситуацией. Еще раз спасибо! – MacGeek