




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Quartz2D中线条系统中的核心就是path。下图举例说明了一些基于path的图形,它们将会作为概述path和展示Quartz2D如何使用它们的一个极好的平台。Figure(5・1・ACoflectionofShapesMadefromPaths上图中的最左边上方的直线和下方的五角星都是使用path绘制的。其他的图形都是通过填充path而绘制的。描点和填充是线条图形中的两个最主要的画图操作。OnPaths在Quartz2D中绘制线条时涉及到绘制一个用户空间的区域,然后或者填充那个区域或者围绕着它的边绘制线条。在填充之前,你可以使用path画轮廓区域,也可以定义一个你想描点的线条。如果你使用Cocoa框架,有一个Cocoa类叫做NSBezierPath,你可以使用它去创建,存储和绘制path。在Cocoa中,path它自身不是图形上下文变成了绘图的主要接口。ComponentsofaPath我们看下面所示的简单路径。在这个图中,我们使用灰色填充了这个path。其他地方,包括中心的矩形块实际上是在路径path的外面。Figure&TheDifferentpartsofaPathStraightSeginferitCurvedSegm^rlFigure&TheDifferentpartsofaPathStraightSeginferitCurvedSegm^rlInnerContourOuterContour这个特定的路径有两个子路径或者是轮廓组成。第一个就是图形中的标记为OuterContour的轮廓。第二个就是内部的轮廓,是中心的矩形的边界。每一个轮廓都由一些片段直线和曲线)组成。BuildingPaths如果你的应用程序使用Quartz2DAPI想要创建一个独立的路径实例,就可以调用CGPathCreateMutable子程序,然后使用CGMutablePathRef类型的变量跟踪返回的物体。如果你已经创建了一个CGPath实例,你可以调用这个类的方法去构建它描绘的路径。正如在第四章所讲的,“TheGraphicsContext”。CGContext存储一个path(称为当前路径),作为它结构的一部分。CGContext类的接口包含了许多CGPath提供的相同的方法用于构建一个路径。CGContext也包含有一个应用到你建立的路径上的变换。CGPath方法将它作为一个额外的参数接收它。在所有的接口中,low-level接口允许你直接使用一些曲线片段构建路径。higher-level接口允许你使用一些完整的图形像线条,矩形和弧等去构建路径。BuildingfromSegments当一个路径开始创建后,它是空的,不包含任何的点。你可以使用CGContextBeginPath去清空一个CGContext的当前路径。可以使用removeAllPoints方法清空一个NSBezierPath。MoveToMoveTo操作在用户空间中取一个点作为一个参数。它从那个点开始一个新的轮廓。被传入的点也变成了路径中的当前点。在进行MoveTo操作时必须首先建立一个当前点。LineToLineTo操作给当前路径中添加一条直线。这个操作将把一个点作为参数然后添加一条从当前点到这个新点的直线。终点线段点将成为路径的新的当前点。CurveToCurveTo用于给当前路径添加一条曲线。你需要传入三个点,这个线段从路径的当前点开始。QuadCurveToCloseSubpath最后一个路径基元就是关闭子路径。在这种情况下,子路径和轮廓一样。当关闭一个轮廓时,如果终点与起点不匹配,计算机在它们之间添加一条直线。轮廓现在形成了一个没有端点的完整的闭合回路。事实上,当执行关闭子路径操作后,路径自身不再有当前点。如果想要开始一个新的轮廓,你需要使用MoveTo操作重新开始。关闭一个轮廓和轮廓自身的开始点和终点碰巧一致它们两者之间存在着显著的差异。下图展示了一个没有恰当的关闭路径的例子。Figure五・b・TheEffectofClosingaStrokedStarPathDp”5册Path 匚仞同StarPatkAPIDifferences前面已经讲了每一个路径构造接口,CGContext,CGPath,和NSBezierPath,使用基本的绘图操作去创建路径。然而它们的API中也存在着一些轻微的区别,有必要说一下。在CGPath中的基本操作如下:CGPathMoveToPointCGPathAddLineToPointCGPathAddQuadCurveToPointCGPathAddCurveToPointCGPathCloseSubpath构建CGContext当前路径的线段操作与上面的类似:CGContextMoveToPointCGContextAddLineToPointCGContextAddQuadCurveToPointCGContextAddCurveToPointCGContextClosePathNSBezierPath仅仅扩展了一些基本的路径操作,基本的方法如下:moveToPoint:lineToPoint:curveToPoint:controlPoint1:controlPoint2:closePath这些程序接收NSPoints作为参数而不是单个的原件。这些程序在参数列表中不支持变换,你可以构建一个路径然后再使用transformUsingAffineTransform方法去改变路径中的所有。除了以上提到的方法外,NSBezierPath接口也包含以下的方法:relativeMoveToPoint:relativeLineToPoint:relativeCurveToPoint:controlPoint1:controlPoint2:这些方法的名字指出了它们的相关操作。SegmentConstructionSampleCode使用线段构建路径是相当直观的。下面的例子不是很复杂,但是它阐述了使用直线和曲线结合的方法。下面列出了产生这个图形的代码voidDrawBottleProfile(CGContextRefcgContext,constHIRect&viewBounds){CGContextBeginPath(cgContext);CGContextMoveToPoint(cgContext,333,0);CGContextAddCurveToPoint(cgContext,333,0,332,26,330,26);CGContextAddCurveToPoint(cgContext,330,26,299,20,299,17)CGContextAddLineToPoint(cgContext,296,17);CGContextAddCurveToPoint(cgContext,296,17,296,19,291,19)CGContextAddLineToPoint(cgContext,250,19);CGContextAddCurveToPoint(cgContext,250,19,241,24,238,19)CGContextAddCurveToPoint(cgContext,236,20,234,24,227,24)CGContextAddCurveToPoint(cgContext,220,24,217,19,216,19)CGContextAddCurveToPoint(cgContext,214,20,211,22,207,20)CGContextAddCurveToPoint(cgContext,207,20,187,20,182,21)CGContextAddLineToPoint(cgContext,100,45);CGContextAddLineToPoint(cgContext,97,46);CGContextAddCurveToPoint(cgContext,97,46,86,71,64,72);CGContextAddCurveToPoint(cgContext,42,74,26,56,23,48);CGContextAddLineToPoint(cgContext,9,47);CGContextAddCurveToPoint(cgContext,9,47,0,31,0,0);CGContextStrokePath(cgContext);}ConstructingCommonShapes这部分讲解一些higher-level的路径构建程序和它们提供的服务。Lines如果你需要给当前路径添加一条单个的线,你可以简单的使用MoveTo和LineTo。如果你想构建多线条(有时候叫做多叉线),你可以使用CGContextAddLines,CGPathAddLines,或者NSBezierPath方法appendBezierPathWithPoints:count:。Rectangles矩形框是图形库中一个常用的基本的图元。在Quartz2D中,你可以使用核心绘图库中的CGContextAddRect和CGPathAddRect方法或者NSBezierPath方法appendBezierPathWithRect:给路径中添加一个完整矩形框。Ellipses(Ovals)如果你想在你的路径中添加一个椭圆形的轮廓。你可以使用核心绘图库中的CGContextAddEllipseInRect和CGPathAddEllipseInRect方法。NSBezierPath用户可以调用appendBezierPathWithOvallnRect:方法。CircularArcs
如果你不想得到一个圆,你可以让Quartz2D在你的路径中添加一个圆弧。Quartz2D提供了两种技术用于指定你想添加圆弧的形状。每一种技术使用了稍微不同的参数。第一种技术使用了中心,半径,角度去构建一个弧。这它将开始弧度和结束弧度作为参数传递给函数。根据你种技术如下图所示:Figure6.8・SpecifyingaCircularArcUsingSweepAngles它将开始弧度和结束弧度作为参数传递给函数。根据你种技术如下图所示:Figure6.8・SpecifyingaCircularArcUsingSweepAnglesoforad)ClockwiseArcno"(n/6rad)Can:nterdockwiseArc所使用的API的不同,你可以使用CGContextAddArc,CGPathAddArc,或者appendBezierPathWithArcWithCenter:radius:startAngle:endAngle:clockwise:产生这种类型的弧。第二种技术根据路径的当前点来建立弧,两个点和一个半径作为传入的参数。为了产生曲线弧,它使用点去定义输入和输出两个方向。它用一个特别的圆角弧度创建一个圆角矩形,下图展示了这种技术。JFigure6.Q.SpecifyingaFirstPoint・Parameter(pi)CircularArcU^ingStartandEndDirectionsCurrentPointSecondPointJFigure6.Q.SpecifyingaFirstPoint・Parameter(pi)CircularArcU^ingStartandEndDirectionsCurrentPointSecondPointPcrameier(pzJ当使用这种技术时,你需要给程序提供两个点(我们称之为pl和p2),和一个半径。这两个点和路径中的当前点一起指定了两个方向。弧将沿着当前点和起指定了两个方向。弧将沿着当前点和p1的方向,直线与曲线正切。弯曲围绕着指定的半径直到它遇见p1和p2构成的直线。你可以使用核心绘图库中的CGContextAddArcToPoint或者CGPathAddArcToPoint去创建这种圆弧。如果你使用的是Cocoa,你可以使用NSBezierPath方法appendBezierPathWithArcFromPoint:toPoint:radius:。一个更加详细的例子将会帮助你理解不同的圆弧构建方法,假定你想创建一个路径包括一些圆轮,如下图所示:产生这个图形的代码如下所示:voidDrawCircularCog(CGContextRefcgContext,constHIRect&viewBounds){constfloatradius=100;floathalfAngle=22.5*pi/180.0;CGPointmidPoint=CGPointMake(radius*cos(halfAngle),radius*sin(halfAngle));floatcurveRadi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业设备购买合同范本
- 代持股转让合同范例
- 买农村房子合同范例
- 信托基金购买合同范例
- 修理员聘用合同范例
- 代购代加工合同范本
- 临时借车合同范例
- 《格萨尔》史诗中的古代法律文化研究
- 冰箱购货合同范例
- 电地暖项目施工方案
- 四川省2023年普通高等学校高职教育单独招生文化考试(普高类)英语试题(含答案解析)
- 地质构造和构造地貌 -【公开课教学PPT课件】高中地理
- 大学生职业生涯规划PPT第3版高职完整全套教学课件
- 信息化武器装备智慧树知到答案章节测试2023年中北大学
- 中海大海洋化学课件02海洋的形成和海水的组成
- 高考英语作文练习纸(标准答题卡)
- 教科版二年级科学下册(做一个指南针)教育教学课件
- GB/T 19519-2014架空线路绝缘子标称电压高于1 000 V交流系统用悬垂和耐张复合绝缘子定义、试验方法及接收准则
- 用地性质分类表
- 电子技术基础(数字部分 第五版 康华光)华中科大课件 第
- 公路工程概论全套课件
评论
0/150
提交评论