【部分翻译】NSBezierPath的基础知识

【原文请参照:CocoaDrawingGuide中的Path部分】

【阅读过程,存在理解有偏差的地方,在后续的使用中逐一确认后补充之】

 NSBezierPath是Cocoa中用来绘制基本或复杂形状的工具。

一个 NSBezierPath对象包含了与路径(path,我在这里翻译成路径)相关的信息:用来定义路径的点,及影响路径显示的属性等。

下面的内容简单的介绍 NSBezierPath中的path信息和属性。

一.Path Elements

Path Elements就是 NSBezierPath对象用来创建路径的元素。一个path element 由命令和(一个或多个)点组成。

 NSBezierPath类中定义了四种基本的path element命令:

命令 点的数目 描述
NSMoveToBezier-
moveToPoint:
1 这个命令不会在界面上绘画出线条,
而只是将当前的绘画点移动至指定的点。
如[aPath moveToPoint:NSMakePoint(0,5)];
将aPath当前的绘画点定在了(0,5)。
在绘制路径的过程中使用该命令,会产生断开不连贯的线段。
NSLineToBezier-
lineToPoint:
1 这个命令是从当前点和指定点之间绘制一条直线。
当前绘画点一般是上一个命令结束的点。
如之前我们将绘画点定在了(0,5),
现在使用[aPath lineToPoint:NSMakePoint(5,10)];就在界面上绘制了一条从(0,5)到(5,10)的直线,且当前的绘画起点也变成了(5,10)。
在线条和矩形的绘制过程中,常用到此命令。
NSCurveToBezier-
CurveToPoint:                      controlPoint1:    controlPoint2:
3 这个命令主要是用来绘制曲线。有三个点作为参数,第一个点表示曲线段的终点,第二个点和第三个点是指定的控制点,以这两个点来决定曲线段的走向。
在绘制椭圆,弧线和Bezier曲线时,常会使用此命令。
NSClosePathBezier-
closePath
1 这个命令是用来标识当前子路径的终点。
需要注意的是:该命令的参数,通常是当前的绘画点。
【这部分内容我还没有弄明白,需要后续确定。】


二.Subpaths

subpaths,子路径。一个path实例中,包含着很多的subpaths。

一个subpath,一般从moveToPoint:指定的点开始,直到closePath指定的地方(或者另一个moveToPoint:上一个命令的地方)截止。

subpath是将一个完整的path实例分成了不同的部分,在“Winding Rules"中会对整个path的填充产生影响。

但是subpaths总体来说是同一个path对象的组成部分,因此绘制过程中仍然保持path对象设置的线宽,交叉点格式等基本属性。

三.Path的基本属性

注意:1)path的属性应用于整个对象的描绘过程中。如果想对path中某部分进行不一样的设置,必须将这部分独立出来,创建一个新的path对象。

            2)path的各个属性都有其默认值,如在整个绘制过程中,没有出现自定义的设置,则继续沿用默认的属性设置; 如在绘制过程中,出现了自定义的设置,则沿用自定义的设置,默认的不执行。

            3)对path的属性进行自定义设置时,如进行多次设置,则按照最后一次的设置执行。

  1. Line Width

  2.Line Cap Style

  3.Line Join Style

  4.Line Dash Style

  5.Miter Limits 

四.Winding Rules

在填充path形成的封闭区域时,从给定区域内部画一条射线,指向该区域外的任何一个方向。根据该射线穿过的路径来决定该区域是否要被填充。有两种填充区域的方式。

填充方式 描述
NSNoneZeroWindingRule 将射线穿过的路径中,从左指向右的方向的记为+1,从右指向左的记为-1。
将射线穿过的所有路径的计数相加。
和为0,则射线起点所在的区域不填充;
和不为0,射线起点所在区域填充。
NSEvenOddWindingRule 计算射线穿过的路径的数目。
如为偶数,射线起点所在的区域不填充;
为奇数,则填充。


你可能感兴趣的:(【部分翻译】NSBezierPath的基础知识)