#Region Project Attributes
#MainFormWidth: 800
#MainFormHeight: 600
#End Region
Sub Process_Globals
Private fx As JFX
Private MainForm As Form
Private Canvas1 As Canvas
Private AngleX, AngleY As Double
Private LastX, LastY As Double
Type Point(x As Double, y As Double)
End Sub
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
MainForm.RootPane.LoadLayout("Layout1") 'Load the layout file.
MainForm.Show
' Canvas1 = MainForm.RootPane.GetNode("Canvas1")
AngleX = 0
AngleY = 0
' AddMouseEvents(Canvas1)
DrawWireframeHalfSphere(Canvas1, AngleX, AngleY)
End Sub
'Sub AddMouseEvents(Canvas As Canvas)
' Canvas.SetOnMousePressed("Canvas_MousePressed")
' Canvas.SetOnMouseDragged("Canvas_MouseDragged")
'End Sub
Sub Canvas1_MousePressed(EventData As MouseEvent)
LastX = EventData.X
LastY = EventData.Y
End Sub
Sub Canvas1_MouseDragged(EventData As MouseEvent)
Dim dx As Double = EventData.X - LastX
Dim dy As Double = EventData.Y - LastY
AngleX = (AngleX + dy) Mod 360
AngleY = (AngleY + dx) Mod 360
LastX = EventData.X
LastY = EventData.Y
DrawWireframeHalfSphere(Canvas1, AngleX, AngleY)
End Sub
Sub DrawWireframeHalfSphere(Canvas As Canvas, AngleX1 As Double, AngleY1 As Double)
Canvas.ClearRect(0, 0, Canvas.Width, Canvas.Height)
Dim Radius As Double = 100
Dim CenterX As Double = Canvas.Width / 2
Dim CenterY As Double = Canvas.Height / 2
Dim StepAngle As Double = 10 ' Angle step in degrees
For theta = 0 To 180 Step StepAngle
For phi = 0 To 180 Step StepAngle
Dim x1, y1, z1 As Double
Dim x2, y2, z2 As Double
Dim x3, y3, z3 As Double
x1 = Radius * CosD(theta) * SinD(phi)
y1 = Radius * SinD(theta)
z1 = Radius * CosD(theta) * CosD(phi)
x2 = Radius * CosD(theta + StepAngle) * SinD(phi)
y2 = Radius * SinD(theta + StepAngle)
z2 = Radius * CosD(theta + StepAngle) * CosD(phi)
x3 = Radius * CosD(theta) * SinD(phi + StepAngle)
y3 = Radius * SinD(theta)
z3 = Radius * CosD(theta) * CosD(phi + StepAngle)
Dim p1 As Point
p1.Initialize
p1 = RotatePoint(x1, y1, z1, AngleX1, AngleY1)
Dim p2 As Point
p2.Initialize
p2 = RotatePoint(x2, y2, z2, AngleX1, AngleY1)
Dim p3 As Point
p3.Initialize
p3 = RotatePoint(x3, y3, z3, AngleX1, AngleY1)
Canvas.DrawLine(CenterX + p1.X, CenterY - p1.Y, CenterX + p2.X, CenterY - p2.Y, fx.Colors.Black, 1)
Canvas.DrawLine(CenterX + p1.X, CenterY - p1.Y, CenterX + p3.X, CenterY - p3.Y, fx.Colors.blue, 1)
Next
Next
End Sub
Sub RotatePoint(x As Double, y As Double, z As Double, AngleX1 As Double, AngleY1 As Double) As Point
Dim radX As Double = AngleX1 * cPI / 180
Dim radY As Double = AngleY1 * cPI / 180
Dim cosa As Double = Cos(radY)
Dim sina As Double = Sin(radY)
Dim cosb As Double = Cos(radX)
Dim sinb As Double = Sin(radX)
Dim x1 As Double = x * cosa - z * sina
Dim z1 As Double = x * sina + z * cosa
Dim y1 As Double = y * cosb - z1 * sinb
Dim z2 As Double = y * sinb + z1 * cosb
Return CreatePoint(x1, y1)
End Sub
Sub CreatePoint(x As Double, y As Double) As Point
Dim p As Point
p.Initialize
p.x = x
p.y = y
Return p
End Sub