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```