更多渲染

图表的渲染,除了着色外,还有设置透明度、纹理映射、添加光照和设置材质等内容。本节进一步进行介绍。[大谦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.vba
Sub Test()
    ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$B$7")
    ActiveChart.FullSeriesCollection(1).Select
    Selection.Format.Shadow.Type = msoShadow21
    With Selection.Format.Shadow
        .Type = msoShadow21    ‘阴影类型
        .Visible = msoTrue    ‘阴影可见
        .Style = msoShadowStyleOuterShadow    ‘阴影样式msoShadowStyleOuterShadow
        .Blur = 4    ‘阴影的模糊度
        .OffsetX = 4.9497474683    ‘水平向偏移
        .OffsetY = 4.9497474683    ‘垂向偏移
        .RotateWithShape = msoFalse    ‘不旋转
        .ForeColor.RGB = RGB(0, 0, 0)    ‘颜色
        .Transparency = 0.599999994    ‘透明度
        .Size = 100    ‘大小
    End With
    Range("A2:C11").Select  ‘数据
‘生成第2个图表,为复合线形图
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$C$11")
    ActiveChart.FullSeriesCollection(2).Select    ‘获取图表
    Selection.Format.Shadow.Type = msoShadow24    ‘序列1添加阴影
    ActiveChart.FullSeriesCollection(1).Select
    Selection.Format.Shadow.Type = msoShadow24    ‘序列2添加阴影
End Sub

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

Document Image
\[\]

图1-29 给折线添加阴影

特效:发光

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

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

code.vba
Sub Test()'
‘柱状图
    ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$B$7")
    ActiveChart.FullSeriesCollection(1).Select
    With Selection.Format.Glow
        .Color.ObjectThemeColor = msoThemeColorAccent1
        .Color.TintAndShade = 0
        .Color.Brightness = 0
        .Transparency = 0.6000000238
        .Radius = 8
    End With
‘线形图
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$C$11")
    ActiveChart.FullSeriesCollection(2).Select
    With Selection.Format.Glow
        .Color.ObjectThemeColor = msoThemeColorAccent2    ‘msoThemeColorAccent1颜色
        .Color.TintAndShade = 0
        .Color.Brightness = 0    ‘亮度
        .Transparency = 0.6000000238    ‘透明度
        .Radius = 8    ‘半径
    End With
    ActiveChart.FullSeriesCollection(1).Select
    With Selection.Format.Glow    ‘给序列2添加发光特效
        .Color.ObjectThemeColor = msoThemeColorAccent1
        .Color.TintAndShade = 0
        .Color.Brightness = 0
        .Transparency = 0.6000000238
        .Radius = 5
    End With
End Sub

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

Document Image
\[\]

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

特效:边缘柔化

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

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

code.vba
Sub Test()
    ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$B$7")  ‘数据
    ActiveChart.FullSeriesCollection(1).Select    ‘获取图表
    Selection.Format.SoftEdge.Radius = 3    ‘边缘柔化
End Sub

运行代码生成图1-32。

Document Image
\[\]

图1-32

特效:三维效果

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

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

code.vba
Sub Test()
    ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
    ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$B$7")
    ActiveChart.FullSeriesCollection(1).Select
    With Selection.Format.ThreeD
        .BevelTopType = msoBevelAngle    ‘柱面顶部斜面类型
        .BevelTopInset = 6    ‘顶部斜面厚度
        .BevelTopDepth = 6    ‘顶部斜面深度
    End With
    ActiveChart.ChartArea.Select
    ActiveChart.FullSeriesCollection(1).Select
    Selection.Format.ThreeD.PresetMaterial = msoMaterialClear    ‘使用预设材质
    ActiveChart.ChartArea.Select
    ActiveSheet.Shapes(1).ThreeD.LightAngle = 60    ‘设置光照角度
    ActiveSheet.Shapes(1).ThreeD.PresetLighting = msoLightRigMorning    ‘设置预设光照
End Sub

运行代码生成图1-33。

Document Image
\[\]

图1-33