更多渲染

图表的渲染,除了着色外,还有设置透明度、纹理映射、添加光照和设置材质等内容。本节进一步进行介绍。[大谦Excel,dqexcel点com]

透明度

将图形对象设置为半透明在三维可视化中是一个很有用的技巧。它使用户不仅能看到对象的外观,还能看到对象内部的结构特征。

使用FillFormat对象和LineFormat对象的Transparency属性可以设置面和线的透明度。图1-9中设置复合柱状图中第一个序列的透明度为0.5,为半透明。

纹理映射

纹理映射技术将二维图像映射到曲面对象上。Excel中面的图片填充和纹理填充都是纹理映射技术的应用。

使用FillFormat对象的UserPicture方法进行图片填充。使用FillFormat对象的UserTextured方法进行纹理填充。前者通过拉伸图像对指定面进行填充,后者通过平铺和裁剪进行填充。图1-12介绍了对复合柱状图的不同序列进行图片填充和纹理填充的实现。

光照和材质

添加光照使图形场景更加真实,这一点是通过模拟自然光下对象的明暗色调来实现的。这里,自然光也就是阳光。Excel中可以对三维对象设置光照。另外还可以设置对象的材质,如金属材质、塑料材质等。

编程实现时,引用某些对象的ThreeD属性返回一个三维对象,设置该对象的跟光照和材质有关的属性可进行设置。

特效:阴影

Excel可以给图表中的对象添加阴影,可以设置阴影的方向、颜色、透明度、大小、模糊程度、角度和跟对象之间的距离。

本例创建简单柱状图和复合线形图,给它们添加阴影。完整代码见:Samples->ch04 美化Excel图表->21 特效:阴影->py.py。

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1')    #获取指定工作表对象
sht.api.Range('A2:B7').Select()  #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,20,20,350,250,True)
cht=shp.Chart    #获取图表
shadow=cht.SeriesCollection(1).Format.Shadow    #给序列1添加阴影,返回阴影对象
shadow.Type=21    #阴影类型
shadow.Visible=True    #阴影可见
shadow.Style=2    #阴影样式msoShadowStyleOuterShadow
shadow.Blur=4    #阴影的模糊度
shadow.OffsetX=4.95    #水平向偏移
shadow.OffsetY=4.95    #垂向偏移
shadow.RotateWithShape=False    #不旋转
shadow.ForeColor.RGB=xw.utils.rgb_to_int((0,0,0))    #颜色
shadow.Transparency=0.6    #透明度
shadow.Size=100    #大小
sht.api.Range('A2:C11').Select()  #数据
#生成第2个图表,为复合线形图
shp2=sht.api.Shapes.AddChart2(-1, xw.constants.ChartType.xlLine, 30, 20, 350, 250, True)
cht2=shp2.Chart    #获取图表
cht2.SeriesCollection(1).Format.Shadow.Type=24    #序列1添加阴影
cht2.SeriesCollection(2).Format.Shadow.Type=24    #序列2添加阴影

运行代码生成图1-28和图1-29。

Document Image

图1-29 给折线添加阴影

特效:发光

Excel可以给图表中的二维对象添加发光特效,可以设置光影的方向、颜色、透明度和大小。

本例创建简单柱状图和复合线形图,给它们添加发光特效。完整代码见:Samples->ch04 美化Excel图表->22 特效:发光->py.py。

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1')    #获取指定工作表对象
#柱状图
sht.api.Range('A2:B7').Select()  #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,20,20,350,250,True)
cht=shp.Chart    #获取图表
glow=cht.SeriesCollection(1).Format.Glow    #添加发光特效,返回发光对象
glow.Color.ObjectThemeColor=1    #msoThemeColorAccent1颜色
glow.Color.Brightness=0    #亮度
glow.Transparency=0.6    #透明度
glow.Radius=8    #半径
#线形图
sht.api.Range('A2:C11').Select()    #数据
shp2=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlLine,30,20,350,250,True)
cht2=shp2.Chart  #添加图表
glow2=cht2.SeriesCollection(1).Format.Glow    #给序列1添加发光特效,返回发光对象
glow2.Color.ObjectThemeColor=1    #msoThemeColorAccent1颜色
glow2.Color.Brightness=0    #亮度
glow2.Transparency=0.6    #透明度
glow2.Radius=5    #半径
glow3=cht2.SeriesCollection(2).Format.Glow    #给序列2添加发光特效
glow3.Color.ObjectThemeColor=1    #msoThemeColorAccent1
#glow3.Color.TintAndShade=0
glow3.Color.Brightness=0
glow3.Transparency=0.6
glow3.Radius=8

运行代码生成图1-30和图1-31。

Document Image

图1-31 给折线添加发光特效

特效:边缘柔化

Excel可以给图表中的二维对象添加边缘柔化特效。

本例创建简单柱状图,给它添加边缘柔化特效。完整代码见:Samples->ch04 美化Excel图表->23 特效:边缘柔化->py.py。

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1')    #获取指定工作表对象
sht.api.Range('A2:B7').Select()  #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,20,20,350,250,True)
cht=shp.Chart    #获取图表
shadow=cht.SeriesCollection(1).Format.SoftEdge.Radius=3    #边缘柔化

运行代码生成图1-32。

特效:三维效果

Excel可以给图表中的某些对象添加三维特效。1.4.3小节介绍的光照和材质是三维特效的一部分。此外还可以改变三维对象顶部和底部的形状及其宽度和高度。

本例创建简单柱状图,给它添加三维特效。完整代码见:Samples->ch04 美化Excel图表->24 特效:三维效果->py.py。

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r'/data.xlsx',read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets('Sheet1')    #获取指定工作表对象
sht.api.Range('A2:B7').Select()  #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,20,20,350,250,True)
cht=shp.Chart    #获取图表
threed=cht.SeriesCollection(1).Format.ThreeD    #添加三维效果
threed.BevelTopType=3    #柱面顶部斜面类型
threed.BevelTopInset=6    #顶部斜面厚度
threed.BevelTopDepth=6    #顶部斜面深度
threed.PresetMaterial=2    #使用预设材质
threed.LightAngle=60    #设置光照角度
threed.PresetLighting=1    #设置预设光照

运行代码生成图1-33。