图形变换

使用几何变换,可以利用已有图形快速得到新的图形或新的位置上的图形。利用Shape对象的属性,可以实现图形平移、旋转、缩放和翻转等几何变换操作。[大谦Excel,dqexcel点com]

图形平移

使用Shape对象的IncrementLeft方法,将该对象所表示的图形进行水平方向的平移。该方法有一个参数,参数的值大于0时图形向右移,值小于0时向左移。

使用Shape对象的IncrementTop方法,将该对象所表示的图形进行垂直方向的平移。该方法有一个参数,参数的值大于0时图形向下移,值小于0时向上移。

下面的例子创建一个添加水滴预设纹理的矩形区域,然后将该区域向右平移70个单位,向下平移50个单位。

【Excel VBA】

示例文件的存放路径为Samples\ch17\Excel VBA\图形平移.xlsm。

code.vba
Sub Test()
  Dim shp As Shape
  Set shp = ActiveSheet.Shapes.AddShape(1, 100, 50, 200, 100) '矩形区域
  shp.Fill.PresetTextured 5  '水滴预设纹理
  shp.IncrementLeft 70  '右移70
  shp.IncrementTop 50  '下移50
End Sub

运行过程,生成图形并进行平移。

【Python】

在Python Shell窗口输入:

code.python
>>> shp=sht.api.Shapes.AddShape(1, 100, 50, 200, 100)  #矩形区域
>>> shp.Fill.PresetTextured(5)  #水滴预设纹理
>>> shp.IncrementLeft(70)  #右移70
>>> shp.IncrementTop(50)  #下移50

平移前后的图形如图5-14和图5-15所示。

Document Image Document Image

图5-14 平移前的图形 图5-15 平移后的图形

图形旋转

使用Shape对象的IncrementRotation方法实现图形的旋转。该方法绕Z轴旋转指定的角度。有一个参数,表示旋转的角度,以度为单位。为正值时顺时针方向旋转图形,为负值时逆时针方向旋转图形。

下面的例子创建一个添加水滴预设纹理的矩形区域,然后将该区域绕Z轴顺时针方向旋转30度。

【Excel VBA】

示例文件的存放路径为Samples\ch17\Excel VBA\图形旋转.xlsm。

code.vba
Sub Test()
  Dim shp As Shape
  Set shp = ActiveSheet.Shapes.AddShape(1, 100, 50, 200, 100) '矩形区域
  shp.Fill.PresetTextured 5  '水滴预设纹理
  shp.IncrementRotation 30  '顺时针方向旋转30度
End Sub

运行过程,生成图形并进行旋转。

【Python】

在Python Shell窗口输入:

code.python
>>> shp=sht.api.Shapes.AddShape(1, 100, 50, 200, 100)  #矩形区域
>>> shp.Fill.PresetTextured(5)  #预设纹理
>>> shp.IncrementRotation(30)  #顺时针方向旋转30度

图5-16和图5-17为旋转前后的矩形区域。

Document Image Document Image

图5-16 旋转前的图形 图5-17 旋转后的图形

图形缩放

图形缩放又称为比例变换,是将给定的图形按照一定的比例放大或缩小。使用Shape对象的ScaleWidth方法和ScaleHeight方法可以指定水平方向和垂直方向的缩放比例,实现图形的缩放操作。

ScaleWidth方法和ScaleHeight方法都有3个参数,如表5-11所示。

表5-11 ScaleWidth方法和ScaleHeight方法的参数

名 称 必需/可选 数据类型 说 明
Factor 必需 Single 指定图形调整后的宽度与当前或原始宽度的比例
RelativeToOriginalSize 必需 MsoTriState 值为False时,相对于其当前大小进行缩放。 仅当指定的图形是图片或 OLE 对象时,才能将此参数指定为True
Scale 可选 Variant MsoScaleFrom类型的常量之一, 指定缩放图形时, 该图形的哪一部分保持在原有的位置

Scale参数的值为MsoScaleFrom枚举类型常量,表示缩放以后,图形那部分保持原来的位置。该参数的取值如表5-12中所示。

表5-12 Scale参数的取值

名 称 说 明
msoScaleFromBottomRight 2 图形的右下角保持在原有的位置
msoScaleFromMiddle 1 图形的中点保持在原有的位置
msoScaleFromTopLeft 0 图形的左上角保持在原有的位置

下面创建一个椭圆区域,添加花岗岩纹理。然后对该区域图形水平方向缩小为原来宽度的0.75倍,垂直方向放大为原来高度的1.75倍。

【Excel VBA】

示例文件的存放路径为Samples\ch17\Excel VBA\图形缩放.xlsm。

code.vba
Sub Test()
  Dim shp As Shape
  Set shp = ActiveSheet.Shapes.AddShape(9, 100, 50, 200, 100)  '椭圆区域
  shp.Fill.PresetTextured 12  '预设纹理,花岗岩
  shp.ScaleWidth 0.75, False '宽度*0.75
  shp.ScaleHeight 1.75, False '高度*1.75
End Sub

运行过程,生成图形并进行缩放。

【Python】

在Python Shell窗口输入:

code.python
>>> shp=sht.api.Shapes.AddShape(9, 100, 50, 200, 100)  #椭圆区域
>>> shp.Fill.PresetTextured(12)  #预设纹理,花岗岩
>>> shp.ScaleWidth(0.75,False)  #宽度*0.75
>>> shp.ScaleHeight(1.75,False)  #高度*1.75

缩放前后的图形如图5-18和图5-19所示。

Document Image Document Image

图5-18 原始图形 图5-19 缩放以后的图形

图形翻转

图形的翻转也叫做图形的镜像变换,或对称变换。使用Shape对象的Flip方法实现图形的翻转。该方法是相对于水平对称轴或垂直对称轴作翻转的,它有一个参数,指定是水平翻转还是垂直翻转。水平翻转和垂直翻转对应的取值分别为0和1。

下面的例子创建一个矩形区域,为了便于对比,添加了木质纹理。然后对该区域进行水平翻转和垂直翻转操作。

【Excel VBA】

示例文件的存放路径为Samples\ch17\Excel VBA\图形翻转.xlsm。

code.vba
Sub Test()
  Dim shp As Shape
  Set shp = ActiveSheet.Shapes.AddShape(1, 100, 50, 200, 100)  '矩形区域
  shp.Fill.PresetTextured 22  '预设纹理
  shp.Flip 0  '水平翻转
  shp.Flip 1  '垂直翻转
End Sub

运行过程,生成图形并进行翻转。

【Python】

在Python Shell窗口输入:

code.python
>>> shp=sht.api.Shapes.AddShape(1, 100, 50, 200, 100)  #矩形区域
>>> shp.Fill.PresetTextured(22)  #预设纹理
>>> shp.Flip(0)  #水平翻转
>>> shp.Flip(1)  #垂直翻转

翻转前的图形如图5-20所示。图5-21为原图形水平翻转后的图形。图5-22为水平翻转后的图形再垂直翻转后的结果。所以,当前翻转操作是针对前步变换结果进行的,而不是针对原图形。

Document Image Document Image Document Image

图5-20 原图形 图5-21 水平翻转 图5-22 垂直翻转