Platforms to show: All Mac Windows Linux Cross-Platform
Required plugins for this example: MBS ChartDirector Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /ChartDirector/surfacecolor
This example is the version from Fri, 9th Feb 2023.
Project "surfacecolor.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
EventHandler Sub Open()
For i As Integer = 0 To 3
createChart i
Next
End EventHandler
Sub createChart(chartIndex as integer)
// The x and y coordinates of the grid
Dim dataX() As Double = Array(-4.0, -3, -2, -1, 0, 1, 2, 3, 4)
Dim dataX_size As Integer = dataX.Ubound + 1
Dim dataY() As Double = Array(-4.0, -3, -2, -1, 0, 1, 2, 3, 4)
Dim dataY_size As Integer = dataY.Ubound + 1
// Use random numbers for the z values on the XY grid
Dim r As New CDRanSeriesMBS(99)
Dim dataZ() As Double = r.get2DSeries(dataX_size, dataY_size, -0.9, 0.9)
// Create a SurfaceChart object of size 460 x 460 pixels with white (&hffffff) background and
// grey (&h888888) border
Dim c As New CDSurfaceChartMBS(460, 460, &hffffff, &h888888)
// Set the surface data
c.setData(dataX, dataY, dataZ)
// Add a color axis (the legend) in at the top center of the chart, with labels at the bottom.
// Set the axis to flat style.
Dim cAxis As CDColorAxisMBS = c.setColorAxis(c.getWidth / 2, 15, CDBaseChartMBS.kTop, 250, CDBaseChartMBS.kBottom)
Call cAxis.setTitle("Color Axis")
cAxis.setAxisBorder(CDBaseChartMBS.kTransparent, 0)
// By default, the color axis is synchronized with the z-axis. The following code remove the
// synchronization so that the color axis will auto-scale independently. Set the auto-scale
// minimum tick spacing to 20 pixels.
cAxis.syncAxis(Nil)
cAxis.setTickDensity(20)
If (chartIndex = 1) Then
// Speicify a color gradient as a list of colors, and use it in the color axis.
Dim colorGradient() As Integer = Array( CType(&h0044cc, Integer), &hffffff, &h00aa00)
cAxis.setColorGradient(False, colorGradient)
Elseif (chartIndex = 2) Then
// Specify the color scale to use in the color axis
Dim colorScale() As Double = Array(-1.0, &h1a9850, -0.75, &h66bd63, -0.5, &ha6d96a, -0.25, &hd9ef8b, 0, &hfee08b, 0.25, &hfdae61, 0.5, &hf46d43, 0.75, &hd73027, 1)
cAxis.setColorScale(colorScale)
Elseif (chartIndex = 3) Then
// Specify the color scale to use in the color axis. Also specify an underflow color
// &h66ccff (blue) for regions that fall below the lower axis limit.
Dim colorScale() As Double = Array(0, &hffff99, 0.2, &h80cdc1, 0.4, &h35978f, 0.6, &h01665e, 0.8, &h003c30, 1)
cAxis.setColorScale(colorScale, &h66ccff)
End If
// Set the center of the plot region at (230, 250), and set width x depth x height to 240 x 240
// x 170 pixels
c.setPlotRegion(230, 250, 240, 240, 170)
// Set the plot region wall thichness to 3 pixels
c.setWallThickness(3)
// Set the elevation and rotation angles to 45 degrees
c.setViewAngle(45, 45)
// Set the perspective level to 20
c.setPerspective(20)
// Spline interpolate data to a 50 x 50 grid for a smooth surface
c.setInterpolation(50, 50)
// Set the axis title
Call c.xAxis.setTitle("X-Axis", "Arial Bold", 10)
Call c.yAxis.setTitle("Y-Axis", "Arial Bold", 10)
Call c.zAxis.setTitle("Z Axis", "Arial Bold", 10)
// 2x for higher DPI displays
c.setOutputOptions("bmpscale=2")
// Output the chart
Dim pic As Picture = c.makeChartPicture
Dim w As New MainWindow
w.pic = pic
w.Left = 10 + w.Width * chartIndex
w.top = 50
End Sub
End Class
Class MainWindow Inherits Window
EventHandler Sub Paint(g As Graphics, areas() As REALbasic.Rect)
If pic <> Nil Then
// scale to window
g.DrawPicture pic, 0, 0, g.Width, g.Height, 0, 0, pic.Width, pic.Height
End If
End EventHandler
Property pic As Picture
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
End Project
The items on this page are in the following plugins: MBS ChartDirector Plugin.