图形变换

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

图形平移

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

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

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

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

平移前后的图形如图4-36和图4-37所示。

Document Image Document Image

图4-36 平移前的图形 图4-37 平移后的图形

图形旋转

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

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

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

图4-38和图4-39为旋转前后的矩形区域。

Document Image Document Image

图4-38 旋转前的图形 图4-39 旋转后的图形

图形缩放

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

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

表4-19 ScaleWidth方法和ScaleHeight方法的参数

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

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

表4-20 Scale参数的取值

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

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

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

缩放前后的图形如图4-40和图4-41所示。

Document Image Document Image

图4-40 原始图形 图4-41 缩放以后的图形

图形翻转

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

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

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

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

Document Image Document Image Document Image

图4-42 原图形 图4-43 水平翻转 图4-44 垂直翻转