DrawingArea PAINT.ROTATE(RAD(x))
Posted: Wednesday 22nd June 2022 12:49am
I have become pretty good at making gauges for GAMBAS, I drop in an SVG image, then overlay it with a DRAWINGAREA and draw a gauge with .stroke and .fill which look great.
I see there is a ROTATE command that uses RADIANS... so the command it's self would be .ROTATE(RAD(A)) where "A" would be the angle in degrees.
The issue is... HOW do I use it???
My thinking is that you would define your "stuff" in the drawing area and rotate it... like this...
But no... it doesn't work. And the documentation is underwhelming... really needs samples. Seriously.
I mean for now, I'm using math that would be hard for my students to comprehend...
Just make a 200x200 drawingarea and add a slider set 0 to 360. But yeah... I'd love to use the ROTATE command.
Code: Select all
Public Sub drawingarea1_Draw()
Dim cx As Integer = DrawingArea1.W / 2 'Horizontal Center
Dim cy As Integer = DrawingArea1.h / 2 'Vertical Center
With Paint
' The drawing area is 200 x 200 pixels
'-- Make Text --
.Brush = Paint.Color(&H00000000)
.Text("Drawing Area 1", cx, cy + 80, 000, 000, 3)
.fill
'-- Make Filled Area --
.Brush = Paint.Color(&H006666ff)
.MoveTo(CX, CY - 80)
.LineTo(cx + 10, cy)
.LineTo(cx, cy + 20)
.LineTo(cx - 10, cy)
.LineTo(cx, cy - 80)
.fill
' -- Make Outline --
.Brush = Paint.Color(&H00000000)
.MoveTo(CX, CY - 80)
.LineTo(cx + 10, cy)
.LineTo(cx, cy + 20)
.LineTo(cx - 10, cy)
.LineTo(cx, cy - 80)
.lineto(cx, cy + 20)
.stroke
' Finish the process
.end
End With
End
The issue is... HOW do I use it???
My thinking is that you would define your "stuff" in the drawing area and rotate it... like this...
Code: Select all
Public Sub drawingarea1_Draw()
Dim cx As Integer = DrawingArea1.W / 2 'Horizontal Center
Dim cy As Integer = DrawingArea1.h / 2 'Vertical Center
' -- Make Outline --
.Brush = Paint.Color(&H00000000)
.MoveTo(CX, CY - 80)
.LineTo(cx + 10, cy)
.LineTo(cx, cy + 20)
.LineTo(cx - 10, cy)
.LineTo(cx, cy - 80)
.lineto(cx, cy + 20)
.Rotate(Rad(45))
.stroke
' Finish the process
.end
End With
End
Can someone show me how to use this???Modifies the current transformation matrix (CTM) by rotating the user-space axes by angle radians. The rotation of the axes takes places after any existing transformation of user space. The rotation direction for positive angles is from the positive X axis toward the positive Y axis.
Angle : angle (in radians) by which the user-space axes will be rotated.
I mean for now, I'm using math that would be hard for my students to comprehend...
Code: Select all
'------------------------------------------------------------------------------------------
Public Sub Form_Open()
End
Public Sub DrawingArea1_Draw()
Dim cx As Integer = DrawingArea1.W / 2 'Horizontal Center
Dim cy As Integer = DrawingArea1.h / 2 'Vertical Center
Dim ca As Integer = Slider1.Value 'Active Angle Movement
Dim co As Integer = 0 'Angular Offset -> Adjust starting point
Dim x1 As Integer = 0 'X Draw Point
Dim y1 As Integer = 0 'Y Draw Point
With Paint
' The drawing area is 200 x 200 pixels
'-- Make Text --
.Brush = Paint.Color(&H00000000)
.Text("Angle: " & ca, cx, cy + 80, 000, 000, 3)
.fill
' -- Make Fill --
.Brush = Paint.Color(&H0066FF66)
x1 = Cos(Rad(ca - 90 - co)) * 80 + cx
y1 = Sin(Rad(ca - 90 - co)) * 80 + cy
.MoveTo(x1, y1)
x1 = Cos(Rad(ca - 0 - co)) * 10 + cx
y1 = Sin(Rad(ca - 0 - co)) * 10 + cy
.LineTo(x1, y1)
x1 = Cos(Rad(ca + 90 - co)) * 20 + cx
y1 = Sin(Rad(ca + 90 - co)) * 20 + cy
.LineTo(x1, y1)
x1 = Cos(Rad(ca + 180 - co)) * 10 + cx
y1 = Sin(Rad(ca + 180 - co)) * 10 + cy
.LineTo(x1, y1)
x1 = Cos(Rad(ca - 90 - co)) * 80 + cx
y1 = Sin(Rad(ca - 90 - co)) * 80 + cy
.LineTo(x1, y1)
' Center line - Not Required
.fill
' -- Make Outline --
.Brush = Paint.Color(&H00000000)
x1 = Cos(Rad(ca - 90 - co)) * 80 + cx
y1 = Sin(Rad(ca - 90 - co)) * 80 + cy
.MoveTo(x1, y1)
x1 = Cos(Rad(ca - 0 - co)) * 10 + cx
y1 = Sin(Rad(ca - 0 - co)) * 10 + cy
.LineTo(x1, y1)
x1 = Cos(Rad(ca + 90 - co)) * 20 + cx
y1 = Sin(Rad(ca + 90 - co)) * 20 + cy
.LineTo(x1, y1)
x1 = Cos(Rad(ca + 180 - co)) * 10 + cx
y1 = Sin(Rad(ca + 180 - co)) * 10 + cy
.LineTo(x1, y1)
x1 = Cos(Rad(ca - 90 - co)) * 80 + cx
y1 = Sin(Rad(ca - 90 - co)) * 80 + cy
.LineTo(x1, y1)
x1 = Cos(Rad(ca + 90 - co)) * 20 + cx
y1 = Sin(Rad(ca + 90 - co)) * 20 + cy
.LineTo(x1, y1)
.stroke
' Finish the process
.end
End With
End
Public Sub Slider1_Change()
drawingarea1.refresh
End