使用几何变换,可以利用已有图形快速得到新的图形或新的位置上的图形。利用Shape对象的属性,可以实现图形平移、旋转、缩放和翻转等几何变换操作。[大谦Excel,dqexcel点com]
图形平移
使用Shape对象的IncrementLeft方法,将该对象所表示的图形进行水平方向的平移。该方法有一个参数,参数的值大于0时图形向右移,值小于0时向左移。
使用Shape对象的IncrementTop方法,将该对象所表示的图形进行垂直方向的平移。该方法有一个参数,参数的值大于0时图形向下移,值小于0时向上移。
下面的例子创建一个添加水滴预设纹理的矩形区域,然后将该区域向右平移70个单位,向下平移50个单位。
>>> 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所示。
图4-36 平移前的图形 图4-37 平移后的图形
图形旋转
使用Shape对象的IncrementRotation方法实现图形的旋转。该方法绕Z轴旋转指定的角度。有一个参数,表示旋转的角度,以度为单位。为正值时顺时针方向旋转图形,为负值时逆时针方向旋转图形。
下面的例子创建一个添加水滴预设纹理的矩形区域,然后将该区域绕Z轴顺时针方向旋转30度。
>>> shp=sht.api.Shapes.AddShape(1, 100, 50, 200, 100) #矩形区域
>>> shp.Fill.PresetTextured(5) #预设纹理
>>> shp.IncrementRotation(30) #顺时针方向旋转30度
图4-38和图4-39为旋转前后的矩形区域。
图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倍。
>>> 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所示。
图4-40 原始图形 图4-41 缩放以后的图形
图形翻转
图形的翻转也叫做图形的镜像变换,或对称变换。使用Shape对象的Flip方法实现图形的翻转。该方法是相对于水平对称轴或垂直对称轴作翻转的,它有一个参数,指定是水平翻转还是垂直翻转。水平翻转和垂直翻转对应的取值分别为0和1。
下面的例子创建一个矩形区域,为了便于对比,添加了木质纹理。然后对该区域进行水平翻转和垂直翻转操作。
>>> 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为水平翻转后的图形再垂直翻转后的结果。所以,当前翻转操作是针对前步变换结果进行的,而不是针对原图形。
图4-42 原图形 图4-43 水平翻转 图4-44 垂直翻转