ChartDirector 6.0 (ASP/COM/VB Edition)

Surface Lighting


      

This example demonstrates the effects of various surface lighting parameters, configured using SurfaceChart.setLighting.

Source Code Listing

[Web Version (in ASP)] aspdemo\surfacelighting.asp
<%@ language="vbscript" %>
<%
Set cd = CreateObject("ChartDirector.API")

' This script can draw different charts depending on the chartIndex
chartIndex = CInt(Request("img"))

' The x and y coordinates of the grid
dataX = Array(-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10)
dataY = Array(-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10)

' The values at the grid points. In this example, we will compute the values using the formula z = x
' * sin(y) + y * sin(x).
ReDim dataZ((UBound(dataX) + 1) * (UBound(dataY) + 1) - 1)
For yIndex = 0 To UBound(dataY)
    y = dataY(yIndex)
    For xIndex = 0 To UBound(dataX)
        x = dataX(xIndex)
        dataZ(yIndex * (UBound(dataX) + 1) + xIndex) = x * Sin(y) + y * Sin(x)
    Next
Next

' Create a SurfaceChart object of size 380 x 400 pixels, with white (ffffff) background and grey
' (888888) border.
Set c = cd.SurfaceChart(380, 400, &Hffffff, &H888888)

' Demonstrate various lighting parameters
If chartIndex = 0 Then
    Call c.addTitle( _
        "Default Lighting<*br*><*size=10*>Ambient = 0.5, Diffuse = 0.5, Specular = 1, Shininess = 8")
ElseIf chartIndex = 1 Then
    Call c.addTitle( _
        "Matte (Non-Glossy) Lighting<*br*><*size=10*>Ambient = 0.5, Diffuse = 0.5, Specular = " & _
        "0, Shininess = 0")
    Call c.setLighting(0.5, 0.5, 0, 0)
ElseIf chartIndex = 2 Then
    Call c.addTitle( _
        "Flat Lighting<*br*><*size=10*>Ambient = 1, Diffuse = 0, Specular = 0, Shininess = 0")
    Call c.setLighting(1, 0, 0, 0)
Else
    Call c.addTitle( _
        "Strong Glossy Lighting<*br*><*size=10*>Ambient = 0.5, Diffuse = 0.5, Specular = 4, " & _
        "Shininess = 32")
    Call c.setLighting(0.5, 0.5, 4, 32)
End If

' Set the center of the plot region at (175, 200), and set width x depth x height to 200 x 200 x 160
' pixels
Call c.setPlotRegion(175, 200, 200, 200, 160)

' Set the plot region wall thichness to 5 pixels
Call c.setWallThickness(5)

' Set the elevation and rotation angles to 45 and 60 degrees
Call c.setViewAngle(45, 60)

' Set the perspective level to 35
Call c.setPerspective(35)

' Set the data to use to plot the chart
Call c.setData(dataX, dataY, dataZ)

' Spline interpolate data to a 50 x 50 grid for a smooth surface
Call c.setInterpolation(50, 50)

' Set contour lines to semi-transparent black (c0000000)
Call c.setContourColor(&Hc0000000)

' Output the chart
Response.ContentType = "image/jpeg"
Response.BinaryWrite c.makeChart2(cd.JPG)
Response.End
%>

[Windows Version (in Visual Basic)] vbdemo\surfacelighting.cls
Public Sub createChart(viewer As Object, chartIndex As Integer)

    Dim cd As New ChartDirector.API

    ' The x and y coordinates of the grid
    Dim dataX()
    dataX = Array(-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10)
    Dim dataY()
    dataY = Array(-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10)

    ' The values at the grid points. In this example, we will compute the values using the formula z
    ' = x * sin(y) + y * sin(x).
    ReDim dataZ((UBound(dataX) + 1) * (UBound(dataY) + 1) - 1)
    Dim yIndex As Long
    For yIndex = 0 To UBound(dataY)
        Dim y As Double
        y = dataY(yIndex)
        Dim xIndex As Long
        For xIndex = 0 To UBound(dataX)
            Dim x As Double
            x = dataX(xIndex)
            dataZ(yIndex * (UBound(dataX) + 1) + xIndex) = x * Sin(y) + y * Sin(x)
        Next
    Next

    ' Create a SurfaceChart object of size 380 x 400 pixels, with white (ffffff) background and grey
    ' (888888) border.
    Dim c As SurfaceChart
    Set c = cd.SurfaceChart(380, 400, &Hffffff, &H888888)

    ' Demonstrate various lighting parameters
    If chartIndex = 0 Then
        Call c.addTitle( _
            "Default Lighting<*br*><*size=10*>Ambient = 0.5, Diffuse = 0.5, Specular = 1, " & _
            "Shininess = 8")
    ElseIf chartIndex = 1 Then
        Call c.addTitle( _
            "Matte (Non-Glossy) Lighting<*br*><*size=10*>Ambient = 0.5, Diffuse = 0.5, " & _
            "Specular = 0, Shininess = 0")
        Call c.setLighting(0.5, 0.5, 0, 0)
    ElseIf chartIndex = 2 Then
        Call c.addTitle( _
            "Flat Lighting<*br*><*size=10*>Ambient = 1, Diffuse = 0, Specular = 0, Shininess = 0")
        Call c.setLighting(1, 0, 0, 0)
    Else
        Call c.addTitle( _
            "Strong Glossy Lighting<*br*><*size=10*>Ambient = 0.5, Diffuse = 0.5, Specular = " & _
            "4, Shininess = 32")
        Call c.setLighting(0.5, 0.5, 4, 32)
    End If

    ' Set the center of the plot region at (175, 200), and set width x depth x height to 200 x 200 x
    ' 160 pixels
    Call c.setPlotRegion(175, 200, 200, 200, 160)

    ' Set the plot region wall thichness to 5 pixels
    Call c.setWallThickness(5)

    ' Set the elevation and rotation angles to 45 and 60 degrees
    Call c.setViewAngle(45, 60)

    ' Set the perspective level to 35
    Call c.setPerspective(35)

    ' Set the data to use to plot the chart
    Call c.setData(dataX, dataY, dataZ)

    ' Spline interpolate data to a 50 x 50 grid for a smooth surface
    Call c.setInterpolation(50, 50)

    ' Set contour lines to semi-transparent black (c0000000)
    Call c.setContourColor(&Hc0000000)

    ' Output the chart
    Set viewer.Picture = c.makePicture()

End Sub