Platforms to show: All Mac Windows Linux Cross-Platform
/Mac64bit/SceneKit/SceneKit Spheres
Required plugins for this example: MBS Mac64bit Plugin, MBS MacBase Plugin, MBS MacCG Plugin, MBS Main Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Mac64bit/SceneKit/SceneKit Spheres
This example is the version from Wed, 17th Mar 2020.
Project "SceneKit Spheres.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
EventHandler Sub Open()
#if Target64Bit and TargetMacOS then
// okay
#else
MsgBox "Please switch project to 64-bit and run on MacOS."
#endif
End EventHandler
End Class
Class MainWindow Inherits Window
Control MyControl Inherits SCNControlMBS
ControlInstance MyControl Inherits SCNControlMBS
EventHandler Function MouseDown(x as Integer, y as Integer, Modifiers as Integer) As Boolean
Dim p As New CGPointMBS(x,y)
Dim results() As SCNHitTestResultMBS = myview.hitTest(p)
If results <> Nil And results.Ubound >= 0 Then
// hit something
Dim result As SCNHitTestResultMBS = results(0)
info.Text = "Clicked on: "+result.node.Name+" @ "+_
Str(result.localCoordinates.x)+"/"+_
Str(result.localCoordinates.y)+"/"+_
Str(result.localCoordinates.z)
'Break
End If
End EventHandler
EventHandler Sub Open()
MyView = me.View
MyScene = new SCNSceneMBS
MyView.scene = MyScene
MyView.backgroundColor = NSColorMBS.blackColor
MyView.autoenablesDefaultLighting = true
Myview.allowsCameraControl = true
End EventHandler
End Control
Control SegControl Inherits SegmentedControl
ControlInstance SegControl Inherits SegmentedControl
EventHandler Sub Action(itemIndex as integer)
Select case itemIndex
case 0
CreateSphere
case 1
CreateRow
case 2
CreateGrid
case 3
CreateTriangle
case 4
CreateCube
end Select
End EventHandler
End Control
Control Info Inherits Label
ControlInstance Info Inherits Label
End Control
Sub CreateCube()
MyScene = New SCNSceneMBS
dim y as double = 0.0
dim radius as double = 1.0
const yCount = 7
const zCount = 7
const xCount = 7
for row as integer = 0 to yCount-1
dim z as double = 0.0
for depth as integer = 0 to zCount-1
dim x as double = 0.0
for column as integer = 0 to xCount-1
dim sphereGeometry as new SCNSphereMBS(radius)
if (row mod 2 = 0) then
sphereGeometry.firstMaterial.diffuse.contents = NSColorMBS.orangeColor()
else
sphereGeometry.firstMaterial.diffuse.contents = NSColorMBS.purpleColor()
end if
Dim sphereNode As New SCNNodeMBS(sphereGeometry)
sphereNode.position = SCNVector3MBS.Vector(x, y, z)
sphereNode.name = "Sphere "+str(row)+" "+str(depth)+" "+str(column)
MyScene.rootNode.addChildNode(sphereNode)
x = x + 2.0 * (radius)
next
z = z + 2 * (radius)
next
y = y + 2 * (radius)
next
// show scene
MyView.scene = MyScene
End Sub
Sub CreateGrid()
MyScene = New SCNSceneMBS
dim y as Double = 0
dim radius as Double = 1.0
const yCount = 20
const xCount = 20
for row as integer = 0 to yCount-1
dim x as double = 0.0
for column as integer = 0 to xCount-1
dim sphereGeometry as new SCNSphereMBS(radius)
if (row + column) mod 2 = 0 then
sphereGeometry.firstMaterial.diffuse.contents = NSColorMBS.orangeColor()
else
sphereGeometry.firstMaterial.diffuse.contents = NSColorMBS.purpleColor()
end if
dim sphereNode as new SCNNodeMBS(sphereGeometry)
sphereNode.position = SCNVector3MBS.Vector(x, y, 0.0)
sphereNode.name = "Sphere "+Str(row)+" "+Str(column)
MyScene.rootNode.addChildNode(sphereNode)
x = x + 2 * (radius)
next
y = y + 2 * (radius)
next
// show scene
MyView.scene = MyScene
End Sub
Sub CreateRow()
MyScene = New SCNSceneMBS
dim x as Double
dim radius as Double = 1
dim numberOfSpheres as integer = 20
for i as integer = 1 to numberOfSpheres
dim sphereGeometry as new SCNSphereMBS(radius)
if i mod 2 = 0 then
sphereGeometry.firstMaterial.diffuse.contents = NSColorMBS.orangeColor
else
sphereGeometry.firstMaterial.diffuse.contents = NSColorMBS.purpleColor
end if
dim sphereNode as new SCNNodeMBS(sphereGeometry)
sphereNode.position = SCNVector3MBS.Vector(x, 0.0, 0.0)
sphereNode.name = "Sphere "+Str(i)
MyScene.rootNode.addChildNode(sphereNode)
x = x + 3 * radius
next
// show scene
MyView.scene = MyScene
End Sub
Sub CreateSphere()
MyScene = New SCNSceneMBS
dim sphereGeometry as new SCNSphereMBS(1.0)
dim sphereNode as new SCNNodeMBS(sphereGeometry)
sphereGeometry.firstMaterial.diffuse.contents = NSColorMBS.redColor
MyScene.rootNode.addChildNode(sphereNode)
sphereNode.name = "Red Sphere"
// second sphere
dim secondSphereGeometry as new SCNSphereMBS(0.5)
dim secondSphereNode as new SCNNodeMBS(secondSphereGeometry)
secondSphereNode.position = New SCNVector3MBS(3.0, 0.0, 0.0)
secondSphereGeometry.firstMaterial.diffuse.contents = NSColorMBS.greenColor
MyScene.rootNode.addChildNode(secondSphereNode)
secondSphereNode.name = "Green Sphere"
// show scene
MyView.scene = MyScene
End Sub
Sub CreateTriangle()
MyScene = New SCNSceneMBS
dim y as double = 0.0
const radius = 1.0
const yCount = 20
const xCount = 20
for row as integer = 0 to yCount-1
dim x as double = (radius) * (row)
for column as integer = 0 to xCount-row-1
dim sphereGeometry as new SCNSphereMBS(radius)
if ((row + column) mod 2 = 0) then
sphereGeometry.firstMaterial.diffuse.contents = NSColorMBS.orangeColor()
else
sphereGeometry.firstMaterial.diffuse.contents = NSColorMBS.purpleColor()
end if
dim sphereNode as new SCNNodeMBS(sphereGeometry)
sphereNode.position = New SCNVector3MBS(x, y, 0.0)
sphereNode.name = "Sphere "+str(row)+" "+str(column)
MyScene.rootNode.addChildNode(sphereNode)
x = x + 2 * (radius)
next
y = y + sqrt(3.0) * (radius)
next
// show scene
MyView.scene = MyScene
End Sub
Note "Note"
Based on code found in the tutorial
Introduction To SceneKit – Part 1
https://www.weheartswift.com/introduction-scenekit-part-1/
Property MyScene As SCNSceneMBS
Property MyView As SCNViewMBS
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
See also:
The items on this page are in the following plugins: MBS Mac64bit Plugin.