前言:
学习笔记,随时更新。如有谬误,欢迎指正。
说明:
- 红色字体为较为重要部分。
- 绿色字体为个人理解部分。
原文链接:https://learn.microsoft.com/en-us/windows/win32/gdi/paths
13 路径
- 路径是一个或多个图形(或形状)。路径用于绘制和绘图应用程序。计算机辅助设计( CAD )应用程序使用路径来创建独特的裁剪区域,绘制不规则形状的轮廓,并填充不规则形状的内部。不规则形状是由曲线和直线组成的形状。(规则形状包括椭圆、圆形、矩形和多边形。)
13.1 关于路径
- 路径是与设备上下文( DC )相关联的对象之一。然而,与作为任何新 DC 一部分的默认对象(笔、画刷和字体)不同,没有默认路径。
13.1.1 路径创建
-
要创建路径并将其选择到 DC 中,首先需要定义描述路径的点。这是通过调用 BeginPath 函数,指定适当的绘图函数,然后调用 EndPath 函数来完成的。这些函数( BeginPath 、绘图函数和 EndPath )的组合构成了一个路径。可以使用的绘图函数如下: AngleArc 、 Arc 、 ArcTo 、 Chord 、 CloseFigure 、 Ellipse 、 ExtTextOut 、 LineTo 、 MoveToEx 、 Pie 、 PolyBezier 、 PolyBezierTo 、 PolyDraw 、 Polygon 、 Polyline 、 PolylineTo 、 PolyPolygon 、 PolyPolyline 、 Rectangle 、 RoundRect 、 TextOut 。
-
当应用程序调用 EndPath 时,系统将选择关联的路径进入指定的 DC 。(如果之前选择了另一个路径到 DC 中,系统将删除该路径而不保存它。)系统选择路径到 DC 后,应用可以通过以下方式之一来操作该路径:
- 绘制路径的轮廓(使用当前笔)。
- 绘制路径的内部(使用当前的画刷)。
- 绘制轮廓并填充路径的内部。
- 修改路径(将曲线转换为线段)。
- 将路径转换为裁剪路径。
- 将路径转换为区域。
- 通过将路径中的每条曲线转换为一系列线段来使路径平滑。
- 查询构成路径的直线和曲线的坐标。
13.1.2 轮廓路径和填充路径
-
一个应用程序可以通过调用 StrokePath 函数来绘制路径的轮廓,它可以通过调用 FillPath 函数来填充路径的内部,它可以通过调用 StrokeAndFillPath 函数来绘制和填充路径。
-
当应用程序填充路径时,系统使用 DC 当前的填充模式。应用程序可以通过调用 GetPolyFillMode 函数来从查询这个模式,并且可以通过调用 SetPolyFillMode 函数来设置一个新的填充模式。有关两种填充模式的说明,请参见区域。
13.1.3 路径变换
-
路径是使用逻辑单位和当前变换而定义的。(如果调用了 SetWorldTransform 函数,逻辑单位是世界单位;否则,逻辑单位就是页面单位。)应用程序可以使用世界转换来缩放、旋转、裁剪、平移和反射定义路径的直线和贝塞尔曲线。
-
路径的世界变换只影响在变换设置后绘制的线条和曲线。它不会影响在设置之前绘制的线条和曲线。有关世界变换的描述,请参见坐标空间和变换。
-
如果笔是几何笔,应用程序还可以使用 SetWorldTransform 来勾勒用于勾勒路径的笔的形状。有关几何笔的说明,请参见笔。
13.1.4 裁剪路径和图形效果
-
应用程序可以使用剪裁和路径来创建特殊的图形效果。
-
应用程序通过生成一个路径,然后调用 SelectClipPath 函数来创建裁剪路径。在将裁剪路径选择到 DC 后,输出仅显示在路径的边界内。
-
除了创建特殊的图形效果外,裁剪路径在将图像保存为增强图元文件的应用程序中也很有用。通过使用裁剪路径,应用程序能够确保设备独立性,因为用于指定路径的单位是逻辑单位。
13.1.5 将路径转换为区域
- 应用程序可以通过调用 PathToRegion 函数将路径转换为区域。与 SelectClipPath 一样, PathToRegion 在创建特殊图形效果时也很有用。例如,不存在允许应用程序偏移路径的函数;但是,有一个函数可以使应用程序偏移一个区域( OffsetRgn )。使用 PathToRegion ,应用程序可以通过创建定义形状的路径,将路径转换为区域(通过调用 PathToRegion ),然后重复绘制,移动和擦除该区域(通过调用一系列函数,例如 FillRgn 、 OffsetRgn )来创建复杂形状的动画效果。
13.1.6 曲线路径
- 应用程序可以通过调用 FlattenPath 函数来使路径中的曲线平滑。此函数对于将文本贴合到包含曲线的路径轮廓上的应用程序特别有用。为了适应文本,应用程序必须执行以下步骤:
- 创建显示文本的路径。
- 调用 FlattenPath 函数将路径中的曲线转换为线段。
- 调用 GetPath 函数来查询这些线段。
- 计算字符串中每行的长度和每个字符的宽度。
- 使用行宽和字符宽数据沿曲线定位每个字符。
13.2 使用路径
- 有关详细信息,请参阅使用路径。
13.3 路径参考
13.3.1 路径函数
- 有关详细信息,请参阅路径函数。