Example: /ChartDirector/surface4d

Online Documentation   -   Statistics   -   FAQ   -   Plugin Parts (All, Dependencies)   -   Class hierarchy

New in Version 22.2 22.3 22.4 22.5 23.0 23.1 23.2 23.3 23.4 23.5 24.0 24.1

The list of the   topics,   classes,   interfaces,   controls,   modules,   global methods by category,   global methods by name,   screenshots,   licenses   and   examples.

Platforms to show: All Mac Windows Linux Cross-Platform

/ChartDirector/surface4d


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/surface4d

This example is the version from Fri, 9th Feb 2023.

Project "surface4d.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(-10.0, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Dim dataX_size As Integer = dataX.Ubound + 1 Dim dataY() As Double = Array(-10.0, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Dim dataY_size As Integer = dataY.Ubound + 1 // The values at the grid points. In this example, we will compute the values using the formula // z = x * sin(y) + y * sin(x). Dim dataZ_size As Integer = dataX_size * dataY_size Dim dataZ() As Double Redim dataZ(dataZ_size - 1) For yIndex As Integer = 0 To dataY_size - 1 Dim y As Double = dataY(yIndex) For xIndex As Integer = 0 To dataX_size - 1 Dim x As Double = dataX(xIndex) dataZ(yIndex * dataX_size + xIndex) = x * Sin(y) + y * Sin(x) Next Next // Create a SurfaceChart object of size 460 x 460 pixels, with white (ffffff) background and // grey (888888) border. Dim c As New CDSurfaceChartMBS(460, 460, &hffffff, &h888888) // Add a color axis at the top center of the chart, with labels at the bottom side Dim cAxis As CDColorAxisMBS = c.setColorAxis(c.getWidth / 2, 10, CDBaseChartMBS.kTop, 250, CDBaseChartMBS.kBottom) // If the color is based on the z-values, the color axis will synchronize with the z-axis. (The // Axis.syncAxis can be used to disable that.) Otherwise, the color axis will auto-scale // independently. In the latter case, we set the tick spacing to at least 20 pixels. cAxis.setTickDensity(20) // Set flat color axis style cAxis.setAxisBorder(CDBaseChartMBS.kTransparent, 0) If (chartIndex = 0) Then // The default is to use the Z values to determine the color. Call cAxis.setTitle("Color based on Z", "Arial Bold", 15) c.setData(dataX, dataY, dataZ) Elseif (chartIndex = 1) Then // ChartDirector supports using an extra value (called W value) to determine the color. Call cAxis.setTitle("Color based on W", "Arial Bold", 15) // Use random W values Dim r As New CDRanSeriesMBS(5) Dim dataW() As Double = r.get2DSeries(dataX_size, dataY_size, 0.5, 9.5) c.setData(dataX, dataY, dataZ, dataW) Elseif (chartIndex = 2) Then // We can set the W values to the X coordinates. The color will then be determined by the X // coordinates. Call cAxis.setTitle("Color based on X", "Arial Bold", 15) Dim colorX_size As Integer = dataZ_size Dim colorX() As Double Redim colorX(colorX_size-1) For yIndex As Integer = 0 To dataY_size - 1 For xIndex As Integer = 0 To dataX_size - 1 colorX(yIndex * dataX_size + xIndex) = dataX(xIndex) Next Next c.setData(dataX, dataY, dataZ, colorX) Else // We can set the W values to the Y coordinates. The color will then be determined by the Y // coordinates. Call cAxis.setTitle("Color based on Y", "Arial Bold", 15) Dim colorY_size As Integer = dataZ_size Dim colorY() As Double Redim colorY(colorY_size-1) For yIndex As Integer = 0 To dataY_size - 1 For xIndex As Integer = 0 To dataX_size - 1 colorY(yIndex * dataX_size + xIndex) = dataY(yIndex) Next Next c.setData(dataX, dataY, dataZ, colorY) 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) // Add the axis titles 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.


💬 Ask a question or report a problem