2010-12-26 4 views
2

У меня есть NSBezierPath, что я заполняю и поглаживаю. Я хотел бы добавить некоторое внутреннее свечение на путь (легкий ход, только внутри внешнего такта), и то, что приходит на ум, - это использовать тот же путь, сокращенный на 1 пиксель (размер линии, которая равна уже) погладил. Есть ли способ сделать это?Любой простой способ «изменить размер» NSBezierPath?

В качестве альтернативы, есть ли какой-то узор, который я могу использовать, применяя как границу (штрих), так и свечение к пути безье?

Например, (очень тонкий) внутреннее свечение на закладках Google Chrome:

Chrome Tab

ответ

3

Вы можете изменить размер NSBezierPath довольно легко, используя NSAffineTransform.

+0

Это работает лучше, спасибо. Изменение ширины линии фактически размещает более тонкую линию внутри (как в равноцентрированной) более толстой линии, заставляя ее выглядеть так, как будто на обоих краях светится свечение. Это дает немного «набросанного» ощущения, но это не тот чистый взгляд, который я собирался сделать. Настройка пути с помощью NSAffineTransform очищает вещи. – d11wtq

+0

Прохладный. Кстати, если вы хотите делать объекты с толстыми/тонкими линиями без изменения пути, вы можете установить путь как область отсечения с помощью '[path addClip]' перед рисованием строк. Затем он будет рисовать только части линий, которые лежат внутри * пути. –

3

Вы знаете, что вы на самом деле не должны изменять размеры Безье ... все, что вы должны сделать это изменить ширину обводки:

  1. сделать дубликат Безье
  2. на новый, сделать ширина хода уже. (Итак, может быть, 30 на вашем оригинале, попробуйте 26 на этом дубликате.)

Поместите новый снимок сверху на более крупный.

Я надеюсь, что это сработает для вас (надеюсь, я понял, к чему вы клоните).

+0

Вы совершенно правы, спасибо. Он может даже просто работать над вызовом дважды на одном и том же пути с другой шириной. – d11wtq

+0

Зачем вам копировать путь безье? – Richard

+0

Как вы производите дубликат 'NSBezierPath'? – Jacob