Shape.DrawSpline 方法 (Visio)
创建一个新建形状,其路径沿着给定的点序列。
语法
expression. DrawSpline
( _xyArray()_
, _Tolerance_
, _Flags_
)
expression 一个代表 Shape 对象的变量。
参数
名称 | 必需/可选 | 数据类型 | 说明 |
---|---|---|---|
xyArray () | 必需 | Double | 一个交替出现 x 和 y 值的数组,这些值定义新建形状路径中的点。 |
Tolerance | 必需 | Double | 新建形状的路径必须接近于给定点的程度。 |
Flags | 必需 | Integer | 影响形状绘制方式的标志。 |
返回值
Shape
说明
DrawSpline 方法创建一个新建形状,其路径在一组给定点的给定公差范围内。 要与给定点完全吻合,请指定公差为零 (0)。 通常,DrawSpline 方法会使样条线段与这些点吻合,但有时也会在新建形状中生成线条或圆弧线段。
控制点和公差以在其中创建新建形状的页面、主控形状或组的坐标空间的内部绘图单位(英寸)表示。 传递的数组应该是 SAFEARRAY 类型的由引用 (VT_R8|VT_ARRAY|VT_BYREF) 传递的 8 字节浮点值。 这是 Microsoft Visual Basic 向自动对象传递数组的方式。
从这些点到结果形状路径的误差大致在公差范围之内。 点数很多时,实际的误差有时可能会超出指定的公差。
Flags 参数是一个位掩码,指定用于绘制新建形状的选项。 此参数的值应为零或下面一个或多个值的组合。
常量 | 值 |
---|---|
visSplinePeriodic | 1 (&H1) |
visSplineDoCircles | 2 (&H2) |
visSplineAbrupt | 4 (&H4) |
visSpline1D | 8 (&H8) |
如果 Flags 包括 visSplinePeriodic 且满足下列条件,应用程序将尝试绘制一个周期性样条。 否则,Visio 将绘制一个非周期性样条:
最后一个点必须与第一个点重叠。
如果还包含标志 visSplineAbrupt,则由这些点勾勒出的整个封闭路径不得在方向和曲度上有突然变化。
如果 Flags 包括 visSplineDoCircles,则 Microsoft Visio 识别一组给定点中的圆弓形,并为这些圆弓形生成圆弧而不是样条行。
如果 Flags 包括 visSplineAbrupt,则每当在点的尾部检测到方向或曲度发生了突然变化时,Visio 将断开样条。 对于列表中三个连续的点 A、B、C,如果点 B 和线段 AC 之间的距离大于两倍的公差,则认为方向发生突然变化。 如果线段 AB 或 BC 中一条线段的长度超过另一条的两倍,则应用程序也认为点 B 发生了突然变化。 在检测到发生了突然变化的点上,应用程序会结束当前段(线条、弧或样条)并开始一个新段。
如果 Flags 包括 visSpline1D 且 xyArray () 中的第一个和最后一个点不一致, 则 DrawSpline 方法将生成具有一维 (1D) 行为的形状,否则将生成具有二维 (2D) 行为的形状。
如果 xyArray() 中的第一个点和最后一个点重合,则 DrawSpline 方法生成填充形状。
示例
以下示例显示如何绘制一个通过五个任意点的周期性样条,同时要求样条与各个点之间的距离在 0.25(绘图)英寸范围内。 该示例允许 Visio 在新建形状的路径上发生突然变化的点处开始新段。
Public Sub DrawSpline_Example()
Dim vsoShape As Visio.Shape
Dim intCounter As Integer
Dim adblXYPoints(1 To (5 * 2)) As Double
For intCounter = 1 To 5
'Set x components (array elements 1,3,5,7,9) to 1,2,3,4,5
adblXYPoints((intCounter * 2) - 1) = intCounter
'Set y components (array elements 2,4,6,8,10) to f(i)
adblXYPoints(intCounter * 2) = (intCounter * intCounter) - (7 * intCounter) + 15
Next intCounter
Set vsoShape = ActivePage.DrawSpline(adblXYPoints, 0.25, visSplineAbrupt)
End Sub
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。