【部分翻译】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-
closePath1 这个命令是用来标识当前子路径的终点。
需要注意的是:该命令的参数,通常是当前的绘画点。【这部分内容我还没有弄明白,需要后续确定。】
二.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的基础知识相关推荐
- AndroidStudio 开发基础知识【翻译完成】
协议:CC BY-NC-SA 4.0 尔曹身与名俱灭,不废江河万古流.--杜甫<戏为六绝句·其二> 在线阅读 在线阅读(Gitee) ApacheCN 学习资源 目录 AndroidStu ...
- NumPy 基础知识·翻译完成
原文:Numpy Essentials 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 面试求职交流群 7241 ...
- 南师大考研632c语言,2019南京师范大学外国语言学及应用语言学考研623外国语言文学基础知识与汉语写作与830英语语言学基础知识与翻译考试真题试卷...
2019南京师范大学外国语言学及应用语言学考研623外国语言文学基础知识与汉语写作与830英语语言学基础知识与翻译考试真题试卷 本复习全析是由仙林南师大考研网依托多年丰富的教学与辅导经验,组织仙林教学 ...
- c语言的源程序翻译成机器语言的目标,计算机基础知识2.3 源程序是如何被翻译成目标程序的?.ppt...
计算机基础知识2.3 源程序是如何被翻译成目标程序的?.ppt Throughout: CPE, Competitive, Partner, Other? 2.3 编译test.c源程序生成目 标程序 ...
- Unity_基础知识_界面菜单翻译
https://docs.unity3d.com/cn/2021.3/Manual/script-GridLayoutGroup.html 1.File 2.Edit 3.Asset 4.Ga ...
- 数据可视化的基础知识·翻译完成
原文:Fundamentals of Data Visualization 校验:飞龙 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. Ap ...
- 【翻译】CodeMix入门基础知识
CodeMix入门 CodeMix是一个Eclipse插件,可以直接从Eclipse访问VS Code和为Code OSS构建的附加扩展的各种技术.如果您是一位经验丰富的Eclipse开发人员,Cod ...
- 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...
注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...
- python常用变量名_python基础知识整理
Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...
最新文章
- 使用球面目标自动标定雷达-相机外参
- 基于SSM实现在线聊天系统
- 企业网络推广网站排名首页但确保用户体验也是企业网络推广的关键
- JavaScript实现ShellSort希尔排序算法(附完整源码)
- appium---【Mac】appium-doctor提示WARN:“fbsimctl cannot be found”解决方案
- 7-4 堆栈模拟队列 (25 分)
- JAVA学习--集合的遍历
- [DBNETLIB][ConnectionOpen(connect()).]SQL Server 不存在或拒绝访问解决方
- Intellij Idea 创建maven WebAPP项目
- 服务器复制不进去文件等
- [置顶] NYOJ117 求逆序数
- Python basemap模拟导弹发射
- Python学习(52周存钱)
- 支持全球科研抗疫,艾柏森成功研发Omicron变异株重组蛋白
- windows 无法停止ics_多种方法解决Win10系统ICS服务启动后停止问题
- mixamo骨骼_UE4骨骼重定向(二)借助插件Mixamo Converter快速操作Mixamo网站资源
- draw.io软件添加常用字体
- jnz和djnz_第3章单片机指令系统_练习
- 类似YY 9158网页版多人语音视频聊天室远程教学系统源码
- CH340在STM32实现一键下载电路的理解