CorelDRAW VBA - 创建直线和曲线

版权声明:知识诚无价,分享价更高。 https://blog.csdn.net/u013955940/article/details/80334612

coreldraw-vba-create-lines-and-curves

目的

这篇教程将教会你使用 CorelDRAW VBA代码在文档中创建直线和曲线,文档将说明子路径、分段的含义并演示一个“D”字形曲线的详细创建过程。

要在文档中创建一条直线或者曲线,必须首先使用 Application.CreateCurve 方法“在内存中”创建一个曲线对象。然后,把这个曲线对象再通过图层的 CreateCurve 方法创建曲线形状

注意:曲线对象曲线形状是不同的含义,要注意理解区分。下面进行简单说明。

曲线对象(Curve Object)

每一个曲线对象都至少有一个子路径(subpath),或者子路径对象(SubPath)。你可以通过曲线对象的 CreateSubPath 方法向一条直线或者曲线添加一个子路径。这个方法是 Curve 对象拥有的。

方法API:Curve.CreateSubPath

子路径对象(SubPath)和分段对象(Segment)

每一个子路径对象都至少有一个分段(segment),或者分段对象(Segment),这个分段对象可以是直线类型或者曲线类型。你可以使用子路径的 AppendLineSegment 方法向一个子路径的终点添加一个直线类型的分段。同样的,你也可以使用子路径的 AppendCurveSegmentAppendCurveSegment2 方法在子路径的重点添加一个曲线类型的分段。

下面对这几个方法API简单说明。

AppendLineSegment(添加直线分段)

SubPath.AppendLineSegment 方法用来向子路径追加直线分段,它需要一组笛卡尔坐标,该坐标定义了这个新追加分段的结尾。

AppendCurveSegment(添加曲线分段)

SubPath.AppendCurveSegment 方法用来向子路径追加曲线分段,它需要一组笛卡尔坐标,该坐标定义了这个新追加分段的结尾。另外有可选的参数,如果要定义分段的起始和结束控制句柄的长度和角度,可以指定两组极坐标。

AppendCurveSegment2(添加曲线分段)

SubPath.AppendCurveSegment2 方法用来向子路径追加曲线分段,它需要三组笛卡尔坐标:一个定义新追加分段的结束,另外两个定义新分段的开始和结束控制句柄的位置。

额外参数说明

  • 你可以在一个子路径的开始处添加分段(而不是末尾),只需要在创建分段的方法中,设置 AppendAtBeginning 为 True 即可。
  • 每一个分段对象都有一个节点(或 Node 节点对象)。你可以使用分段对象的 AddNodeAt 方法向一个分段添加节点。
  • 你可以通过设置子路径的 Closed 属性来闭合一个曲线。

代码演示

当你“在内存中”创建了一个曲线对象后,你就可以通过图层的 CreateCurve 方法将其添加到一个图层上,需要注意的是,当你调用了图层的这个方法,返回的是一个 Shape (形状)类型的对象引用,而不是曲线对象。

以下代码演示了创建一个“D”字形曲线:

' 声明变量引用
Dim sh As Shape, spath As SubPath, crv As Curve
ActiveDocument.Unit = cdrCentimeter

' 创建一个曲线对象
Set crv = Application.CreateCurve(ActiveDocument)

' 给曲线对象添加子路径
msgbox "即将添加子路径,请观察"
Set spath = crv.CreateSubPath(6, 6)
Set sh = ActiveLayer.CreateCurve(crv) ' 用于步骤演示,请删除这行

msgbox "即将添加一个垂直分段,请观察"
spath.AppendLineSegment 6, 3 ' 添加一个垂直分段
Set sh = ActiveLayer.CreateCurve(crv) ' 用于步骤演示,请删除这行

msgbox "即将添加下方的曲线分段,请观察"
spath.AppendCurveSegment 3, 0, 2, 270, 2, 0 ' 添加下方的曲线分段
Set sh = ActiveLayer.CreateCurve(crv) ' 用于步骤演示,请删除这行

msgbox "即将添加底部的直边,请观察"
spath.AppendLineSegment 0, 0 ' 添加底部的直边
Set sh = ActiveLayer.CreateCurve(crv) ' 用于步骤演示,请删除这行

msgbox "即将添加左边的直边,请观察"
spath.AppendLineSegment 0, 9 ' 添加左边的直边
Set sh = ActiveLayer.CreateCurve(crv) ' 用于步骤演示,请删除这行

msgbox "即将添加顶部的直边,请观察"
spath.AppendLineSegment 3, 9 ' 添加顶部的直边
Set sh = ActiveLayer.CreateCurve(crv) ' 用于步骤演示,请删除这行

msgbox "即将添加上方的曲线分段,请观察"
spath.AppendCurveSegment 6, 6, 2, 0, 2, 90 ' 添加上方的曲线分段
Set sh = ActiveLayer.CreateCurve(crv) ' 用于步骤演示,请删除这行

msgbox "即将闭合曲线,请观察"
spath.Closed = True ' 闭合曲线
Set sh = ActiveLayer.CreateCurve(crv) ' 用于步骤演示,请删除这行

' 在图层上创建曲线形状
'Set sh = ActiveLayer.CreateCurve(crv) ' 请把以上用于步骤演示的代码删除,再启用这一行代码即可

运行效果截图

以下是按照步骤运行完后的效果:
coreldraw-vba-create-lines-and-curves

虽然看起来是一个图形,但实际上,由于我们在代码中每一个步骤都调用了一次图层的创建曲线方法,所以得到的其实是多个【分段】重合在一起的效果,用鼠标把它按照图层顺序分步骤排列,效果如下:
coreldraw-vba-create-lines-and-curves

可以看出,最后一个步骤曲线闭合后,节点数量将减去1。

Layer图层对象提供的扩展方法

图层类提供了一些扩展方法,用来创建创建基本直线或基本曲线,基本直线或者曲线的特征是在单个子路径上只有单个分段:

  • Layer.CreateLineSegment:根据给定的起点和终点创建一条基本直线。
  • Layer.CreateCurveSegment:根据给定的起点和终点创建一条基本曲线,并且可选地,可以按照曲线的起始和结束控制手柄的长度和角度进行创建。

以上的方法,直接返回 Shape 形状对象。


原创声明:本文首发于个人CorelDRAW VBA博客,请尊重文章版权。
转载请注明原文链接:http://www.cdrvba.com/coreldraw-vba-create-lines-and-curves


CorelDRAW VBA - CSDN文章专栏https://blog.csdn.net/column/details/27356.html

猜你喜欢

转载自blog.csdn.net/u013955940/article/details/80334612
vba