【原文请参照: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的基础知识相关推荐

  1. AndroidStudio 开发基础知识【翻译完成】

    协议:CC BY-NC-SA 4.0 尔曹身与名俱灭,不废江河万古流.--杜甫<戏为六绝句·其二> 在线阅读 在线阅读(Gitee) ApacheCN 学习资源 目录 AndroidStu ...

  2. NumPy 基础知识·翻译完成

    原文:Numpy Essentials 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 7241 ...

  3. 南师大考研632c语言,2019南京师范大学外国语言学及应用语言学考研623外国语言文学基础知识与汉语写作与830英语语言学基础知识与翻译考试真题试卷...

    2019南京师范大学外国语言学及应用语言学考研623外国语言文学基础知识与汉语写作与830英语语言学基础知识与翻译考试真题试卷 本复习全析是由仙林南师大考研网依托多年丰富的教学与辅导经验,组织仙林教学 ...

  4. c语言的源程序翻译成机器语言的目标,计算机基础知识2.3 源程序是如何被翻译成目标程序的?.ppt...

    计算机基础知识2.3 源程序是如何被翻译成目标程序的?.ppt Throughout: CPE, Competitive, Partner, Other? 2.3 编译test.c源程序生成目 标程序 ...

  5. Unity_基础知识_界面菜单翻译

    ​ ​https://docs.unity3d.com/cn/2021.3/Manual/script-GridLayoutGroup.html​ 1.File 2.Edit 3.Asset 4.Ga ...

  6. 数据可视化的基础知识·翻译完成

    原文:Fundamentals of Data Visualization 校验:飞龙 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. Ap ...

  7. 【翻译】CodeMix入门基础知识

    CodeMix入门 CodeMix是一个Eclipse插件,可以直接从Eclipse访问VS Code和为Code OSS构建的附加扩展的各种技术.如果您是一位经验丰富的Eclipse开发人员,Cod ...

  8. 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

  9. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

最新文章

  1. 使用球面目标自动标定雷达-相机外参
  2. 基于SSM实现在线聊天系统
  3. 企业网络推广网站排名首页但确保用户体验也是企业网络推广的关键
  4. JavaScript实现ShellSort希尔排序算法(附完整源码)
  5. appium---【Mac】appium-doctor提示WARN:“fbsimctl cannot be found”解决方案
  6. 7-4 堆栈模拟队列 (25 分)
  7. JAVA学习--集合的遍历
  8. [DBNETLIB][ConnectionOpen(connect()).]SQL Server 不存在或拒绝访问解决方
  9. Intellij Idea 创建maven WebAPP项目
  10. 服务器复制不进去文件等
  11. [置顶] NYOJ117 求逆序数
  12. Python basemap模拟导弹发射
  13. Python学习(52周存钱)
  14. 支持全球科研抗疫,艾柏森成功研发Omicron变异株重组蛋白
  15. windows 无法停止ics_多种方法解决Win10系统ICS服务启动后停止问题
  16. mixamo骨骼_UE4骨骼重定向(二)借助插件Mixamo Converter快速操作Mixamo网站资源
  17. draw.io软件添加常用字体
  18. jnz和djnz_第3章单片机指令系统_练习
  19. 类似YY 9158网页版多人语音视频聊天室远程教学系统源码
  20. CH340在STM32实现一键下载电路的理解

热门文章

  1. 朋少教你合理进行内部链接优化布局
  2. uni-app 实现微信分享
  3. 信息在计算机中用几进制表示,2017计算机等级考试知识点:数据在计算机中的表示...
  4. win系统中打印机驱动点击打开,没反应的解释
  5. 迁移学习基础知识(一)——分类及应用
  6. 书摘—做自己的公关专家
  7. 单词学习-Unit8Text3-2(15年7月30日,第9天)
  8. SecureBoost: A Lossless Federated Learning Framework论文笔记
  9. 基于ug的框架断路器抽屉座运动仿真
  10. 今天给大家介绍一下关于锂离子电池的负极材料选择