Sub Graph_DrawLine
' param x, y - logical point to endt line
' param _x, _y - logical point to start line
If x = 0 Then ' for SB 1.2
sign = 0
Else
sign = x / Math.Abs(x)
EndIf
Graph_ToGWCoordinate()
If _gwx <> "" And (continuous[p] Or (Not[continuous[p]] And Math.Abs(gwy - _gwy) < 30)) Then
If y2 <= _y And _y <= y1 And y2 <= y And y <= y1 Then
GraphicsWindow.DrawLine(_gwx, _gwy, gwx, gwy)
ElseIf y2 <= _y And _y <= y1 Then
Stack.PushValue("local", x)
Stack.PushValue("local", y)
Stack.PushValue("local", gwx)
Stack.PushValue("local", gwy)
If y < y2 Then
k = (_y - y2) / (_y - y)
x = (1 - k) * _x + k * x
y = y2
Else
k = (y1 - _y) / (y - _y)
x = (1 - k) * _x + k * x
y = y1
EndIf
Graph_ToGWCoordinate()
GraphicsWindow.DrawLine(_gwx, _gwy, gwx, gwy)
gwy = Stack.PopValue("local")
gwx = Stack.PopValue("local")
y = Stack.PopValue("local")
x = Stack.PopValue("local")
ElseIf y2 <= y And y <= y1 Then
Stack.PushValue("local", x)
Stack.PushValue("local", y)
Stack.PushValue("local", gwx)
Stack.PushValue("local", gwy)
Stack.PushValue("local", _gwx)
Stack.PushValue("local", _gwy)
_gwx = gwx
_gwy = gwy
If _y < y2 Then
k = (y - y2) / (y - _y)
x = (1 - k) * x + k * _x
y = y2
Else
k = (y1 - y) / (_y - y)
x = (1 - k) * x + k * _x
y = y1
EndIf
Graph_ToGWCoordinate()
GraphicsWindow.DrawLine(_gwx, _gwy, gwx, gwy)
_gwy = Stack.PopValue("local")
_gwx = Stack.PopValue("local")
gwy = Stack.PopValue("local")
gwx = Stack.PopValue("local")
y = Stack.PopValue("local")
x = Stack.PopValue("local")
EndIf
EndIf
_gwx = gwx
_gwy = gwy
EndSub
Sub Graph_DrawGrid
' param x1, y1 - logical left top of the grid
' param x2, y2 - logical right bottom of the grid
' param dx, dy - logical grid pitch
x = x1
y = y1
Graph_ToGWCoordinate()
gwx1 = gwx
gwy1 = gwy
x = x2
y = y2
Graph_ToGWCoordinate()
gwx2 = gwx
gwy2 = gwy
x = 0
For y = 0 To y2 Step -dy
Graph_ToGWCoordinate()
GraphicsWindow.DrawLine(gwx1, gwy, gwx2, gwy)
If num Then
GraphicsWindow.DrawText(gwx + 2, gwy, y)
EndIf
EndFor
For y = 0 To y1 Step dy
Graph_ToGWCoordinate()
GraphicsWindow.DrawLine(gwx1, gwy, gwx2, gwy)
If num Then
GraphicsWindow.DrawText(gwx + 2, gwy, y)
EndIf
EndFor
y = 0
For x = 0 To x2 Step dx
Graph_ToGWCoordinate()
GraphicsWindow.DrawLine(gwx, gwy1, gwx, gwy2)
If num Then
GraphicsWindow.DrawText(gwx + 2, gwy, x)
EndIf
EndFor
For x = 0 To x1 Step -dx
Graph_ToGWCoordinate()
GraphicsWindow.DrawLine(gwx, gwy1, gwx, gwy2)
If num Then
GraphicsWindow.DrawText(gwx + 2, gwy, x)
EndIf
EndFor
EndSub