You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
junk/migrationbitmapb4a/jacksbitmapdrawerb4amigrati...

1171 lines
37 KiB

Build1=Default,b4a.bitmapdrawer2
File1=bitmapdrawer.bal
FileGroup1=Default Group
Group=Default Group
Library1=core
Library2=bitmapcreator
Library3=xui
Library4=xui2d
Library5=javaobject
Library6=gps
Library7=runtimepermissions
ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="28"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true" ~\n~ android:smallScreens="true" ~\n~ android:anyDensity="true"/>)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.DarkTheme)~\n~'End of default text.~\n~
Module1=|relative|..\sideextra
Module2=Starter
NumberOfFiles=1
NumberOfLibraries=7
NumberOfModules=2
Version=9.9
@EndOfDesignText@
#Region Project Attributes
#ApplicationLabel: b4amod
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
'todo
'set location start to center of bc
'turn on dads bc rotation bmc2
'current position in x,y=origin(x,y)+delta(x,y) times (current lat long - origin lat long
'increae bc size
'fire iteration on location changed, not on 1000ms timer
'breaking code up into seperate files"b4a break
''wait for could be removed in its entirety and program should still be good
Sub Process_globals
End Sub
Sub Globals
Type coordX (y As Float,x As Float)
Type coordxx (lat As Float,lng As Float)
Private mapsize As coordX
'Private fx As JFX
'Private MainForm As Form
Private xui As XUI
Private timerx As Int
Private rectanglewholeb4x As B4XRect
Private pnlGraph As Panel
Private cvsGraph As B4XCanvas
Private imvGraph As ImageView
Private pthGraph As BCPath
Private bmcGraph As BitmapCreator
Private bmc2ndgraph As BitmapCreator
Private PointX(6), PointY(6) As Double
' Private BtnClear As B4XView
' Private BtnDraw As B4XView
' Private BtnFast As B4XView
' Private BtnStop As B4XView
' Private BtnSlow As B4XView
' Private BtnLeft As B4XView
' Private BtnRight As B4XView
Private timeriterate As Timer
Private xpos, ypos, xposnew, yposnew As Float
Private xposleft, yposleft, xposright, yposright, widthsection As Float
Private velocity, heading, headingrate As Float
' Private BtnActivateTimerTick As B4XView
'/////
Private tractor1 As coordX 'location of tractor
Private trailer1 As coordX 'location of center of trailer
Private tractor0 As coordX 'location of tractor
Private trailer0 As coordX 'location of center of trailer
Private hitch1 As coordX 'location of tractor hitch
Private Offset_hitch As Float
Private offset_trailertoboom As Float
Private offset_trailerlength As Float
Private boomsectionwidth(4) As Float 'center is 1
Private vector1 As coordX
Private vectorlength1 As Float
Private boompoint0 As coordX
Private boompoint00 As coordX
Private boompoint01 As coordX 'leading point
Private boompoint1 As coordX
Private boompoint10 As coordX
Private boompoint11 As coordX
Private boompoint2 As coordX
Private boompoint20 As coordX
Private boompoint21 As coordX
Private boompoint3 As coordX
Private boompoint30 As coordX
Private boompoint31 As coordX
Private boompoint4 As coordX
Private boompoint40 As coordX
Private boompoint41 As coordX
Private boompoint5 As coordX
Private boompoint50 As coordX
Private boompoint51 As coordX 'leading point
Private boomcenter1 As coordX
Private unitvector1 As coordX
Private boomcolor(5) As Int
' Private boom1color As Int
' Private boom2color As Int
' Private boom3color As Int
' Private boom4color As Int
Public x1 As Int
Public x2 As Int
Public y1 As Int
Public y2 As Int
Public P1 As coordX
Public P2 As coordX
Public P3 As coordX
Public P4 As coordX
Public a0 As coordX
Public a1 As coordX
Public b0 As coordX
Public b1 As coordX
Public rectanglewhole As Rect
Public canvas1 As Canvas
Private rp As RuntimePermissions
Dim displayoutlines As Boolean
Dim displayfill As Boolean
'Public boomcolour As String
Public boomon As Boolean
Private Panel1 As B4XView
Type coord (lat As Long,lng As Long)
' Private location1 As Location
Public origin As coordxx
Private deltalat As Float
Private deltalong As Float
Private xposorigin As Int
Private yposorigin As Int
Private b4arect1 As B4XRect
Private section1colour As Panel
Private section2colour As Panel
Private section3colour As Panel
Private section4colour As Panel
Private section5colour As Panel
End Sub
Sub activity_create (FirstTime As Boolean)'(Form1 As Form, Args() As String)
'MainForm = Form1
'MainForm.RootPane.LoadLayout("Main") 'Load the layout file.
'MainForm.Show
Activity.LoadLayout("bitmapdrawer.bal")
'timeriterate.Initialize("IterateTimer",1000)
'timeriterate.Enabled = True
b4arect1.Initialize(0,0,imvGraph.Width,imvGraph.Height)
mapsize.Initialize
mapsize.x=1200
mapsize.y=1200
xposorigin=mapsize.x/2
yposorigin=mapsize.y/2
xpos = xposorigin
ypos = yposorigin
unitvector1.Initialize
Offset_hitch = 0
offset_trailerlength = 1
offset_trailertoboom = 1
boomsectionwidth(1) = 8
boomsectionwidth(2) = 8
boomsectionwidth(3) = 8
rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION)
a0.Initialize
a1.Initialize
b0.Initialize
b1.Initialize
trailer0.x=xpos
trailer0.y=ypos-Offset_hitch-offset_trailerlength
velocity = 10
heading = 180
' bmcGraph..b
boompoint50.Initialize
boompoint5.Initialize
boompoint0.Initialize
boompoint00.Initialize
boompoint51.Initialize
boompoint01.Initialize
boompoint1.Initialize
boompoint10.Initialize
boompoint11.Initialize
boompoint2.Initialize
boompoint20.Initialize
boompoint21.Initialize
boompoint3.Initialize
boompoint30.Initialize
boompoint31.Initialize
boompoint4.Initialize
boompoint40.Initialize
boompoint41.Initialize
boompoint00.x=0
boompoint50.x=0
boompoint10.x=0
boompoint20.x=0
boompoint30.x=0
boompoint40.x=0
headingrate = 0
widthsection = 100
cvsGraph.Initialize(imvGraph)
boomon=True
boomcolor(0)=xui.Color_Green
boomcolor(1)=xui.Color_Green
boomcolor(2)=xui.Color_Green
boomcolor(3)=xui.Color_Green
boomcolor(4)=xui.Color_Green
Initialize(1)
'location_center
Do While Starter.ValidGPS = False
Sleep (100)
Loop
''Log("a")
location_center
End Sub
Sub LocationChanged(Location1 As Location)'IterateTimer_Tick
If Starter.Location2.BearingValid = True Then
heading=Starter.Location2.Bearing
End If
'Log("b")
'heading = heading + headingrate
' If heading < 0 Then
' heading = heading + 360
'Else If heading >360 Then
' heading = heading - 360
'End If
timerx=DateTime.now
'Log("deltalong"&deltalong)
xposnew=xposorigin+deltalong*(Starter.Location2.Longitude-origin.lng)/2
yposnew=yposorigin+deltalat*(Starter.Location2.latitude-origin.lat)/2
'xposnew = xpos + velocity * SinD(heading)
'yposnew = ypos - velocity * CosD(heading)
Log("xposnew: " & NumberFormat(xposnew,0,0) & " yposnew: " & NumberFormat(yposnew,0,0) & " heading: " & NumberFormat(heading,0,0))
'bmcGraph.DrawLine(xpos,ypos,xposnew,yposnew,xui.Color_Black,10)
' xposright = xposnew + widthsection*CosD(heading)/2
' yposright = yposnew + widthsection*SinD(heading)/2
' xposleft = xposnew - widthsection*CosD(heading)/2
' yposleft = yposnew - widthsection*SinD(heading)/2
bmcGraph.DrawCircle(xposnew,yposnew,4,xui.Color_red,True,1)
'hiden by jack bmcGraph.DrawLine(xposleft,yposleft,xposright,yposright,xui.Color_Blue,4)
'///////
'convert all tractor positions to cartesian on our map
tractor0.x=xpos
tractor0.y=ypos
tractor1.x=xposnew
tractor1.y=yposnew
'find hitch position of tractor(1)
hitch1.x=tractor1.x-Offset_hitch*CosD(heading+90)
hitch1.y=tractor1.y-Offset_hitch*SinD(heading+90)
'Log(hitch1.x)
'Log(hitch1.y)
vector1.x = hitch1.x-trailer0.x
vector1.y = hitch1.y-trailer0.y
vectorlength1=Power(Power(vector1.x,2)+Power(vector1.y,2),.5)
unitvector1.x=vector1.x/vectorlength1
unitvector1.y=vector1.y/vectorlength1
trailer1.x=hitch1.x-vector1.x*offset_trailerlength/vectorlength1
trailer1.y=hitch1.y-vector1.y*offset_trailerlength/vectorlength1
boomcenter1.x=-unitvector1.x*offset_trailertoboom+trailer1.x
boomcenter1.y=-unitvector1.y*offset_trailertoboom+trailer1.y
'perpvect.x=vec.y
'perpvect.y=-vec.x
' Log("new1"&boompoint0)
' Log("old1"&boompoint00)
boompoint0.x=-(boomsectionwidth(1)/2+boomsectionwidth(2)+boomsectionwidth(3))*unitvector1.y+boomcenter1.x
boompoint0.y=-(boomsectionwidth(1)/2+boomsectionwidth(2)+boomsectionwidth(3))*-unitvector1.x+boomcenter1.y
boompoint01.x=boompoint0.x+ boompoint0.x-boompoint00.x
boompoint01.y=boompoint0.y+ boompoint0.y-boompoint00.y
boompoint1.x=-(boomsectionwidth(1)/2+boomsectionwidth(2))*unitvector1.y+boomcenter1.x
boompoint1.y=-(boomsectionwidth(1)/2+boomsectionwidth(2))*-unitvector1.x+boomcenter1.y
boompoint11.x=boompoint1.x+ boompoint1.x-boompoint10.x
boompoint11.y=boompoint1.y+ boompoint1.y-boompoint10.y
boompoint2.x=-(boomsectionwidth(1)/2)*unitvector1.y+boomcenter1.x
boompoint2.y=-(boomsectionwidth(1)/2)*-unitvector1.x+boomcenter1.y
boompoint21.x=boompoint2.x+ boompoint2.x-boompoint20.x
boompoint21.y=boompoint2.y+ boompoint2.y-boompoint20.y
boompoint3.x=(boomsectionwidth(1)/2)*unitvector1.y+boomcenter1.x
boompoint3.y=(boomsectionwidth(1)/2)*-unitvector1.x+boomcenter1.y
boompoint31.x=boompoint3.x+ boompoint3.x-boompoint30.x
boompoint31.y=boompoint3.y+ boompoint3.y-boompoint30.y
boompoint4.x=(boomsectionwidth(1)/2+boomsectionwidth(2))*unitvector1.y+boomcenter1.x
boompoint4.y=(boomsectionwidth(1)/2+boomsectionwidth(2))*-unitvector1.x+boomcenter1.y
boompoint41.x=boompoint4.x+ boompoint4.x-boompoint40.x
boompoint41.y=boompoint4.y+ boompoint4.y-boompoint40.y
boompoint5.x=(boomsectionwidth(1)/2+boomsectionwidth(2)+boomsectionwidth(3))*unitvector1.y+boomcenter1.x
boompoint5.y=(boomsectionwidth(1)/2+boomsectionwidth(2)+boomsectionwidth(3))*-unitvector1.x+boomcenter1.y
boompoint51.x=boompoint5.x+ boompoint5.x-boompoint50.x
boompoint51.y=boompoint5.y+ boompoint5.y-boompoint50.y
'boompoint51.x=boompoint5.x+ (boompoint0.x-boompoint00.x+boompoint5.x-boompoint50.x)/2
'boompoint51.y=boompoint5.y+ (boompoint0.y-boompoint00.y+boompoint5.y-boompoint50.y)/2
'boompoint01.x=boompoint0.x+ (boompoint0.x-boompoint00.x+boompoint5.x-boompoint50.x)/2
'boompoint01.y=boompoint0.y+ (boompoint0.y-boompoint00.y+boompoint5.y-boompoint50.y)/2
bmcGraph.DrawLine(boompoint0.x,boompoint0.y,boompoint1.x,boompoint1.y,xui.Color_Gray,1)
bmcGraph.DrawLine(boompoint1.x,boompoint1.y,boompoint2.x,boompoint2.y,xui.Color_Cyan,1)
bmcGraph.DrawLine(boompoint2.x,boompoint2.y,boompoint3.x,boompoint3.y,xui.Color_Green,1)
bmcGraph.DrawLine(boompoint3.x,boompoint3.y,boompoint4.x,boompoint4.y,xui.Color_Magenta,1)
bmcGraph.DrawLine(boompoint4.x,boompoint4.y,boompoint5.x,boompoint5.y,xui.Color_Black,1)
''Log(bmcGraph.GetColor(1,1))'(boompoint0.x+boompoint01.x+boompoint5.x+boompoint51.x)/4,(boompoint0.y+boompoint01.y+boompoint5.y+boompoint51.y)/4))
bmcGraph.DrawCircle(hitch1.x,hitch1.y,2,xui.Color_black,True,1)
trailer0.x=trailer1.x
trailer0.y=trailer1.y
If boompoint00.x <>0 Then
'Log("boomon"&boomon)
'If boomon=True Then
' Wait For(rectanglefiller(boompoint0, boompoint00, boompoint10, boompoint1,0)) complete '(result As Int)
' Wait For(rectanglefiller(boompoint1, boompoint10, boompoint20, boompoint2,1)) complete '(result As Int)
' Wait For(rectanglefiller(boompoint2, boompoint20, boompoint30, boompoint3,2)) complete '(result As Int)
' Wait For(rectanglefiller(boompoint3, boompoint30, boompoint40, boompoint4,3)) complete '(result As Int)
' Wait For(rectanglefiller(boompoint4, boompoint40, boompoint50, boompoint5,4)) complete '(result As Int)
' End If
' Wait For(rectanglechecker(boompoint01, boompoint0,boompoint1,boompoint11,0)) complete
' Wait For(rectanglechecker(boompoint11, boompoint1,boompoint2,boompoint21,1)) complete
' Wait For(rectanglechecker(boompoint21, boompoint2,boompoint3,boompoint31,2)) complete
' Wait For(rectanglechecker(boompoint31, boompoint3,boompoint4,boompoint41,3)) complete
' Wait For(rectanglechecker(boompoint41, boompoint4,boompoint5,boompoint51,4)) complete
Wait For (lineintersect(boompoint00,boompoint0,boompoint01,boompoint10,boompoint1,boompoint11,0)) complete
Wait For (lineintersect(boompoint10,boompoint1,boompoint11,boompoint20,boompoint2,boompoint21,1)) complete
Wait For (lineintersect(boompoint20,boompoint2,boompoint21,boompoint30,boompoint3,boompoint31,2)) complete
Wait For (lineintersect(boompoint30,boompoint3,boompoint31,boompoint40,boompoint4,boompoint41,3)) complete
Wait For (lineintersect(boompoint40,boompoint4,boompoint41,boompoint50,boompoint5,boompoint51,4)) complete
timerx=DateTime.Now-timerx
Log("timerx"&timerx)
bmcGraph.DrawLine(boompoint01.x,boompoint01.y,boompoint51.x,boompoint51.y,xui.Color_red,1)
bmcGraph.DrawLine(boompoint01.x,boompoint01.y,boompoint0.x,boompoint0.y,xui.Color_magenta,1)
'bmcGraph.DrawLine(boompoint0.x,boompoint0.y,boompoint5.x,boompoint5.y,xui.Color_red,1)'shows up too much on trail
bmcGraph.DrawLine(boompoint51.x,boompoint51.y,boompoint5.x,boompoint5.y,xui.Color_blue,1)
'(boompoint0, boompoint00, boompoint50, boompoint5))
'(boompoint0.x,boompoint0.y, boompoint00.x,boompoint00.y, boompoint50.x,boompoint50.y, boompoint5.x,boompoint5.y))
End If
boompoint00.x=boompoint0.x'custom type issue, equating one boompoint to another just refers rather than copying over, this is in reference to primitive and nonprimitive variables
boompoint00.y=boompoint0.y
boompoint10.x=boompoint1.x
boompoint10.y=boompoint1.y
boompoint20.x=boompoint2.x
boompoint20.y=boompoint2.y
boompoint30.x=boompoint3.x
boompoint30.y=boompoint3.y
boompoint40.x=boompoint4.x
boompoint40.y=boompoint4.y
boompoint50.x=boompoint5.x
boompoint50.y=boompoint5.y
'rectanglefiller(boompoint0.x)', boompoint00, boompoint50, boompoint5)
'/////// Jacks transform bitmapcreator
'Sleep(2000)
Dim r As B4XRect
r.Initialize(xposnew-400,yposnew-400,xposnew+400,yposnew+400)'defines the square that is observed and copied from bc
bmc2ndgraph.Initialize(imvGraph.Width, imvGraph.Height)
Dim dt As DrawTask = bmcGraph.CreateDrawTask(bmcGraph,r,imvGraph.Width/2,imvGraph.Height/2,True)
dt.SrcScaleX=4
dt.SrcScaleY=4
dt.Degrees=-Starter.Location2.Bearing
'Log("bearing"&Starter.Location2.Bearing)
''Log("bmc"&bmcGraph.mHeight)
''Log("imvgraph.width"&imvGraph.Width)
bmc2ndgraph.DrawBitmapCreatorTransformed(dt)
cvsGraph.DrawBitmap(bmc2ndgraph.Bitmap,b4arect1)
imvGraph.Invalidate
section1colour.Color=boomcolor(0)
section2colour.Color=boomcolor(1)
section3colour.Color=boomcolor(2)
section4colour.Color=boomcolor(3)
section5colour.Color=boomcolor(4)
'///
'Dim r As B4XRect
'r.Initialize(450,450, 550,550)'xposnew+bmcGraph.mWidth/20,yposnew+bmcGraph.mHeight/20)
'Dim dt As DrawTask = bmcGraph.CreateDrawTask(bmcGraph, r, 100, 100, True) '(50, 50) defines the target center
'dt.SrcScaleX = .5
'dt.SrcScaleY = .5
'Log(bmcGraph.mWidth)
'dt.Degrees = -heading
' dt.TargetX=200
' dt.TargetY=200
' dt.SkipBlending=True
' dt.Source=bmcGraph
' dt.SrcRect=r
' bmcGraph.DrawCircle(100,100,30,Colors.Black,True,1)
' bmcGraph.DrawLine(3,3,100,100,xui.Color_red,3)
'bmcGraph.DrawBitmapCreatorTransformed(dt)
' imvGraph.SetBitmap(bmcGraph.Bitmap)
' bmc2ndgraph.Initialize(pnlGraph.Width, pnlGraph.Height)
'need to clear bmc2ndgraph above before writing a clean image onto it. Otherwise DrawBitmapCreatorTransformed(dt) just draws over the top
' bmc2ndgraph.DrawBitmapCreatorTransformed(dt)
' canv.DrawBitmap(bc.Bitmap,Null,b4arect)
'imvGraph.SetBitmap(bmcGraph.Bitmap)
' cvsGraph.DrawBitmap(bmcGraph.Bitmap,rectanglewholeb4x)
' imvGraph.Invalidate
'imvGraph.Bitmap=(bmc2ndgraph.Bitmap)
', xposright, yposright, width
''Log("color"&bmcGraph.GetColor(100,100))
'r.Initialize(0, 0, bmcGraph.mWidth, bmcGraph.mHeight)
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
'ABOVE WORKS, BELOW DOSEN'T. i THINK IT IS BEACUSE RECTANGLE CAN'T HAVE NEGATIVE COORDS
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'FIXED BY ENLARGING MAIN BC AND STARTING IN MIDDLE. cRASHES WHEN AN ATTEMPT IS MADE TO DRAW OUTSIDE THIS BC.
'NEED TO CHECK THAT HEADING IS CORRECT.
'ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZXXXXXXXXXXXXXXXXXXCCCCCCCCCCCCCCCCCCVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
xpos = xposnew
ypos = yposnew
End Sub
Sub BtnFast_Click
velocity = velocity + 1
End Sub
Sub BtnStop_Click
velocity = 0
End Sub
Sub BtnSlow_Click
velocity = velocity - 1
End Sub
Sub BtnLeft_Click
headingrate = headingrate -1
End Sub
Sub BtnRight_Click
headingrate = headingrate +1
End Sub
Sub BtnClear_Click
'timeriterate.Enabled = False
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
bmcGraph.Initialize(pnlGraph.Width*10, pnlGraph.Height*10)
imvGraph.Bitmap=(bmcGraph.Bitmap)
'timeriterate.Enabled = True
End Sub
'Sub BtnActivateTimerTick_Click
'timeriterate.Enabled = True
'IterateTimer_Tick
'End Sub
Sub BtnDraw_Click
Dim intcolour As Int
For i=0 To pnlGraph.Width-1
For j=0 To pnlGraph.Height-1
intcolour = bmcGraph.GetColor(i,j)
'don't know why white is showing up as =0 in this test. Testing for color white doesn't work
If bmcGraph.GetColor(i,j) <> 0 Then 'fx.Colors.To32Bit(fx.Colors.White) and xui.Color_White don't work
'bmcGraph.SetColor(i,j,fx.Colors.To32Bit(fx.Colors.Green))
End If
Next
Next
bmcGraph.DrawLine(0,0,pnlGraph.Width, 0,xui.Color_Magenta,100)
Dim r As B4XRect
'r.Initialize(0, 0, bmcGraph.mWidth, bmcGraph.mHeight)
r.Initialize(bmcGraph.mWidth/4, bmcGraph.mHeight/4, bmcGraph.mWidth*0.75, bmcGraph.mHeight*0.75)
Dim dt As DrawTask = bmcGraph.CreateDrawTask(bmcGraph, r, pnlGraph.Width/2, pnlGraph.Height/2, True) '(50, 50) defines the target center
dt.SrcScaleX = 1
dt.SrcScaleY = 1
dt.Degrees = 15
' bmcGraph.DrawBitmapCreatorTransformed(dt)
' imvGraph.SetBitmap(bmcGraph.Bitmap)
bmc2ndgraph.DrawBitmapCreatorTransformed(dt)
imvGraph.Bitmap=(bmc2ndgraph.Bitmap)
'the inclusion of the following line results in unexpected behaviour
'bmcGraph = bmc2ndgraph
End Sub
'points must be in order
Sub rectanglechecker(point1 As coordX, point2 As coordX, point3 As coordX, point4 As coordX, k As Int)As ResumableSub
Dim RC_ACWmap As Map
Dim RC_CWmap As Map
Dim RC_line1xvalues As List
Dim RC_line2xvalues As List
Dim RC_line2yvalues As List
Dim RC_line1yvalues As List
'Dim boomcolor As Int
RC_ACWmap.Initialize 'used to progress clockwise and anticlockwise around rectangle
RC_ACWmap.Put(point1,point2)
RC_ACWmap.Put(point2,point3)
RC_ACWmap.Put(point4,point1)
RC_ACWmap.Put(point3,point4)
RC_CWmap.Initialize
RC_CWmap.Put(point1,point4)
RC_CWmap.Put(point2,point1)
RC_CWmap.Put(point4,point3)
RC_CWmap.Put(point3,point2)
RC_line1xvalues.Initialize
RC_line2xvalues.Initialize
RC_line1yvalues.initialize
RC_line2yvalues.Initialize
Dim pmax As coordX
Dim pmin As coordX
Dim temp As coordX
Dim Pmap As Map 'lets us grab the maxY and minY after finding the min and max value
Pmap.Initialize
Pmap.Put(point1.y,point1)
Pmap.Put(point2.y,point2)
Pmap.Put(point4.y,point4)
Pmap.Put(point3.y,point3)
pmax.Initialize
pmin.Initialize
Dim temp3 As Float
temp3 = Max(point1.y,Max(point2.y,Max(point4.y,point3.y)))
Dim temp4 As Float
temp4 = Min(point1.y,Min(point2.y,Min(point4.y,point3.y)))
pmax=Pmap.Get(temp3) 'temp variable required, otherwise pmax is null
pmin=Pmap.Get(temp4)
Dim temp2 As coordX
temp = pmax
RC_line1xvalues.add(pmax.x)'initial point to both line lists
RC_line1yvalues.add(pmax.y)
RC_line2xvalues.add(pmax.x)
RC_line2yvalues.add(pmax.y)
Do While temp <> pmin 'cwloop
temp2=RC_CWmap.Get(temp)'gets second point for line
Wait For(calcline(temp.x,temp.y, temp2.x,temp2.y,RC_line1xvalues,RC_line1yvalues)) complete 'RC_line2xvalues generated
temp = RC_CWmap.Get(temp) 'changes the first line point to the second
Loop
temp = pmax
Do While temp <> pmin 'acwloop
temp2=RC_ACWmap.Get(temp)'gets second point for line
wait for (calcline(temp.x,temp.y, temp2.x,temp2.y,RC_line2xvalues,RC_line2yvalues)) complete 'RC_line2xvalues generated
temp = RC_ACWmap.Get(temp) 'changes the first line point to the second
Loop
RC_line1xvalues.add(pmin.x)'adds final point to both line lists
RC_line1yvalues.add(pmin.y)
RC_line2xvalues.add(pmin.x)
RC_line2yvalues.add(pmin.y)
Dim ytemp As Int
Dim pixelchecked As Int
pixelchecked=0
'Dim loop1cycles As Int
' loop1cycles=0
' Dim loop2onetake2 As Double
' loop2onetake2=0
' bmcGraph.DrawLine(line1xvalues.Get(i),ytemp,line2xvalues.get(i),ytemp,boomcolour,1)
' ytemp=ytemp-1
ytemp=pmax.y 'could choose to save both x and y values to RC_line1xvalues rather than just x.
For i=0 To (Min(RC_line1xvalues.Size,RC_line2xvalues.Size)-1) 'iterates from top point to bottom of polygone, drawing a level line from left to right
For j=RC_line2xvalues.Get(i) To RC_line1xvalues.Get(i) Step 1'issue solved, was counting from a higher number to a lower number rather than lower to higher
'Log("j="&j)
pixelchecked=pixelchecked+1
' loop2onetake2=loop2onetake2+RC_line1xvalues.Get(i)-RC_line2xvalues.Get(i)
' Log("1 "&RC_line1xvalues.Get(i))
' Log("2 "&RC_line2xvalues.Get(i))
' Log("ytemp"&ytemp)
' Log("color"&bmcGraph.GetColor(j,ytemp))
'bmcGraph.DrawCircle(RC_line1xvalues.Get(i),ytemp,6,-16711936,False,2)'-7829368 is gray
If bmcGraph.GetColor(j,ytemp)=-1 Then
boomon=True
boomcolor(k)=xui.Color_Green
Log("pixelchecked"&pixelchecked)
' Log("loop2"&loop2onetake2)
' Log("boomon"&boomon)
Return boomcolor(k)
End If
' bmcGraph.setColor(j,ytemp,xui.Color_Yellow)
Next
' loop1cycles=loop1cycles+1
'bmcGraph.DrawLine(RC_line1xvalues.Get(i),ytemp,RC_line2xvalues.get(i),ytemp,xui.Color_green,1)
ytemp=ytemp-1
Next
Log("pixelchecked"&pixelchecked)
boomcolor(k)=xui.Color_yellow
'Log("line1size"&RC_line1xvalues.size)
' Log("line2size"&RC_line2xvalues.size)
' Log("loop1cycles"&loop1cycles)
' Log("loop2 "&loop2onetake2)
boomon=False
Log("boomon"&boomon)
' Log("pauselinefalse")
Return boomcolor(k)
End Sub
'Return true to allow the default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
Return True
End Sub
Private Sub Initialize(Index As Int)
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
bmcGraph.Initialize(1000,1000)
'the following line
'bmc2ndgraph.Initialize(pnlGraph.Width/2, pnlGraph.Height/2)
' results in the following commands enlarging the bmc2ndgraph to fit
'bmc2ndgraph.DrawBitmapCreatorTransformed(dt)
'imvGraph.SetBitmap(bmc2ndgraph.Bitmap)
bmc2ndgraph.Initialize(mapsize.x, mapsize.y)
rectanglewhole.Initialize(0,0,mapsize.x,mapsize.y)
rectanglewholeb4x.Initialize(0,0,1000,1000)
bmcGraph.DrawRect(rectanglewholeb4x,xui.Color_white,True,1)
bmcGraph.DrawLine(5,900,900,5,xui.Color_green,60)
bmcGraph.DrawLine(5,300,300,5,xui.Color_green,40)
'cvsGraph.DrawBitmap(bmcGraph.bitmap,rectanglewholeb4x)
'imvGraph.Invalidate
End Sub
'points must be in order
Sub rectanglefiller(point1 As coordX, point2 As coordX, point3 As coordX, point4 As coordX,k As Int)As ResumableSub
'find pmax, find pmin
'construct line clockwise from pmax to pmin
'construct line anticlockwise from pmax to pmin
'pull list of x values and draw canvas line between all
Dim timer As Long
timer=DateTime.Now
' point1.x=boompoint00.x
' point1.y=boompoint00.y
' point2.x=boompoint0.x
' point2.y=boompoint0.y
' point4.x=boompoint50.x
' point4.y=boompoint50.y
' point3.x=boompoint5.x
' point3.y=boompoint5.y
Dim line1xvalues As List
Dim line2xvalues As List
Dim line1yvalues As List
Dim line2yvalues As List
Dim CWmap As Map
Dim ACWmap As Map
ACWmap.Initialize 'used to progress clockwise and anticlockwise around rectangle
ACWmap.Put(point1,point2)
ACWmap.Put(point2,point3)
ACWmap.Put(point4,point1)
ACWmap.Put(point3,point4)
CWmap.Initialize
CWmap.Put(point1,point4)
CWmap.Put(point2,point1)
CWmap.Put(point4,point3)
CWmap.Put(point3,point2)
line1xvalues.Initialize
line2xvalues.Initialize
line1yvalues.initialize
line2yvalues.Initialize
Dim pmax As coordX
Dim pmin As coordX
Dim temp As coordX
Dim Pmap As Map 'lets us grab the maxY and minY after finding the min and max value
Pmap.Initialize
Pmap.Put(point1.y,point1)
Pmap.Put(point2.y,point2)
Pmap.Put(point4.y,point4)
Pmap.Put(point3.y,point3)
'//
'line1:y1=g1x1+h2
'line2:y2=g2x2+h2
'Dim g0 As Float
'Dim g1 As Float
'Dim h0 As Float
'Dim h1 As Float
'Dim Inter As floatcoord
'If point1.x = point4.x Then 'line is verticle, ie;x=2
' 'find line2(x=2) which is intercect point
'End If
'If point2.x = point3.x Then 'line2 is verticle'
' 'find line2(x=2) which is intercect point
'End If
'g0=(point1.y-point4.y)/(point1.x-point4.x)
'g1=(point2.y-point3.y)/(point2.x-point3.x)
'h0=point1.y-point1.x*(point1.y-point4.y)/(point1.x-point4.x)
'h1=point2.y-point2.x*(point2.y-point3.y)/(point2.x-point3.x)
'Inter.x=(h1-h0)/(g1-g0)
'Inter.y=g0*Inter.x+h0
'// vector form
'//
'pmax=Max(point1.y,Max(point2.y,Max(point4.y,point3.y)))
'pmin=Min(point1.y,Min(point2.y,Min(point4.y,point3.y)))
pmax.Initialize
pmin.Initialize
' Log(Max(point1.y,Max(point2.y,Max(point4.y,point3.y))))
Dim temp3 As Float
temp3 = Max(point1.y,Max(point2.y,Max(point4.y,point3.y)))
Dim temp4 As Float
temp4 = Min(point1.y,Min(point2.y,Min(point4.y,point3.y)))
' Log(Pmap.Get(temp3))
pmax=Pmap.Get(temp3) 'temp variable required, otherwise pmax is null
pmin=Pmap.Get(temp4)
Dim temp2 As coordX
temp = pmax
line1xvalues.add(pmax.x)'initial point to both line lists
line1yvalues.add(pmax.y)
line2xvalues.add(pmax.x)
line2yvalues.add(pmax.y)
Do While temp <> pmin 'cwloop
temp2=CWmap.Get(temp)'gets second point for line
Wait For(calcline(temp.x,temp.y, temp2.x,temp2.y,line1xvalues,line1yvalues)) complete 'line2xvalues generated
temp = CWmap.Get(temp) 'changes the first line point to the second
'Log("line1")
Loop
temp = pmax
Do While temp <> pmin 'acwloop
temp2=ACWmap.Get(temp)'gets second point for line
wait for (calcline(temp.x,temp.y, temp2.x,temp2.y,line2xvalues,line2yvalues)) complete 'line2xvalues generated
temp = ACWmap.Get(temp) 'changes the first line point to the second
'Log("line2")
Loop
line1xvalues.add(pmin.x)'final point to both line lists
line1yvalues.add(pmin.y)
line2xvalues.add(pmin.x)
line2yvalues.add(pmin.y)
Dim ytemp As Int
'bitmap1.InitializeMutable(40dip,40dip)
'canvas1.Initialize2(bitmap1)
ytemp=pmax.y 'could choose to save both x and y values to line1xvalues rather than just x.
For i=0 To Min(line1xvalues.Size,line2xvalues.Size)-1
bmcGraph.DrawLine(line1xvalues.Get(i),ytemp,line2xvalues.get(i),ytemp,boomcolor(k),1)
ytemp=ytemp-1
' Log(line1xvalues.size)
' Log(xposnew)
' Log(yposnew)
' Log(heading)
' Log(point1)
' Log(point2)
' Log(point4)
' Log(point3)
' bitmap2.Initializemutable(1000dip,1000dip)
' bitmap2=bitmap1.Resize(1000,1000,False)
'Label1.SetBackgroundImage(bitmap1)
' ImageView1.Color=(Colors.White)
' ImageView1.Bitmap = bitmap2
Next
'End If
' timer=DateTime.Now-timer
' Log("timer")
' Log(timer)
' bitmap2.Initializemutable(1000dip,1000dip)
' bitmap2=bitmap1.Resize(1000,1000,False)
'Label1.SetBackgroundImage(bitmap1)
' ImageView1.Color=(Colors.White)
' ImageView1.Bitmap = bitmap2
' Log($"line1size ${line1yvalues.size}"$)
' Log($"line2size ${line2yvalues.size}"$)
Return 2
End Sub
Sub calcline (tx1 As Int,ty1 As Int,tx2 As Int, ty2 As Int, linenumber As List, lineynumber As List) As ResumableSub
'initialy a duplicate of bresenham
Dim x As Int = tx1
Dim y As Int = ty1
Dim dx As Int = Abs(tx2 - tx1)
Dim dy As Int = Abs(ty2 - ty1)
Dim signx As Int = (tx2-tx1)/dx
Dim signy As Int = (ty2-ty1)/dy
Dim changed As Boolean = False
If (dy>=dx) Then
Dim dy As Int = Abs(tx2 - tx1) 'swap
Dim dx As Int = Abs(ty2 - ty1)
changed = True
' Log(changed)
Else
' Log(changed)
End If
Dim e As Float = (2*dy)-dx
For i=1 To dx
'canvas1.DrawPoint((x),(y),Colors.Black)
If lineynumber.Get(lineynumber.size-1)<>y Then
linenumber.add(x)
lineynumber.add(y)
End If
Do While e>=0
If changed=True Then
' If signx<0 Then
x=x+signx
'Else
' x=x+1
'End If
Else
' If signy<0 Then
y=y+signy
' Else
' y=y+1
' End If
End If
e=e-2*dx
Loop
If changed=True Then
y =y+signy
Else
x =x+signx
End If
e=e+(2*dy)
Next
' canvas1.DrawPoint(x2,y2,Colors.Black)
' linenumber.Add(tx2)
' lineynumber.add(ty2)
Return Null
End Sub
Sub location_center 'to convert lat and long into 0.5m bitmap location
'get current location
Private distance As Float
Private radius As Float
Private H1 As Float 'long
Private O1 As Float 'lat
Private H2 As Float 'long
Private O2 As Float 'lat
Dim location6 As Location
location6.Initialize
' location6.Latitude=(-32.6661)
' location6.Longitude=(118.1861)
Dim location7 As Location
location7.Initialize
' location7.Latitude=(-32.666)
' location7.Longitude=(118.1861)
origin.Initialize
radius =6372300
origin.lat =Starter.location2.Latitude
' Log("lat"&Starter.location2.Latitude)
origin.lng =Starter.location2.Longitude
' Log("long"&Starter.location2.Longitude)
H1=(origin.lng)/360*2*cPI
H2=(origin.lng+.01)/360*2*cPI
'Log(origin.lat)
O1=(origin.lat)/360*2*cPI
O2=(origin.lat+.01)/360*2*cPI
'Dim disttohouse As Float
location6.Latitude=O1
location6.Longitude=H1
location7.Latitude=O1
location7.Longitude=H2
deltalat=-2*radius*ASin(Power(Power(Sin((O2-O1)/2),2)+Cos(O1)*Cos(O2)*Power(Sin((0)/2),2),.5))/.01*2'111000
deltalong=2*radius*ASin(Power(Cos(O1)*Cos(O1)*Power(Sin((H2-H1)/2),2),.5))/.01*2'fudge'94000
'therefore 1 change in longitude equals deltalong in m
'and 1 change in latitude equals deltalat in m
'Log("det "&deltalat)
' Log("del "&deltalong)
' Log("location6 "&(location6.DistanceTo(location7)/.01))
' Log("house"&disttohouse)
' deltalat=-2*radius*ASin(Power(Power(Sin((O2-O1)/2),2)+Cos(O1)*Cos(O2)*Power(Sin((H1-H1)/2),2),.5))'111000
End Sub
Sub Activity_Resume
If Starter.GPS1.GPSEnabled = False Then
ToastMessageShow("Please enable the GPS device.", True)
StartActivity(Starter.GPS1.LocationSettingsIntent) 'Will open the relevant settings screen.
Else
Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION)
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
If Result Then CallSubDelayed(Starter, "StartGPS")
End If
End Sub
Sub Activity_Pause (UserClosed As Boolean)
CallSubDelayed(Starter, "StopGPS")
End Sub
Sub lineintersect (point1p As coordX, point1c As coordX,point1f As coordX, point2p As coordX, point2c As coordX,point2f As coordX,k As Int) As ResumableSub
'pointp=past: pointc=current: pointf=future
'filler(boompoint0, boompoint00, boompoint10, boompoint1,0))
'//
'line1:y1=g1x1+h2
'line2:y2=g2x2+h2
Dim U As Float
Dim V As Float
Dim denominat As Float
Dim intersectpoint As coordX
intersectpoint.Initialize
denominat=(point2c.x-point1c.x)*(point2f.y-point1f.y)-(point2c.y-point1c.y)*(point2f.x-point1f.x)
If denominat=0 Then
'lines are parrallel, do rectangle find
rectanglefiller(point1c,point1p,point2p,point2c,k)
rectanglechecker(point1f,point1c,point2c,point2f,k)
Return
End If
U=((point1c.y-point1f.y)*(point2f.x-point1f.x)-(point2f.y-point1f.y)*(point1c.x-point1f.x))/denominat
v=((point1c.y-point1f.y)*(point2c.x-point1c.x)-(point2c.y-point1c.y)*(point1c.x-point1f.x))/denominat
If (U>0 And U<1 And v<1 And v>0) Then
'lines intersect, therefore need to calculate areas inside two triangles rather than one rectangle
intersectpoint.x=point1c.x+(point2c.x-point1c.x)*U
intersectpoint.y=point1c.y+(point2c.y-point1c.x)*V
trianglefiller(point1c,point1p,intersectpoint,k)
trianglefiller(point2c,point2p,intersectpoint,k)
'!!need the case to be that if either of the following checkers return a "gap" then section needs to be on
boomcolor(k)=Colors.yellow
wait for (trianglechecker(point1f,point1p,intersectpoint,k)) complete
If boomcolor(k)=Colors.Yellow Then
wait for (trianglechecker(point2f,point2p,intersectpoint,k)) complete
End If
Return
Else
'lines are not parrellel, but dont intersect
wait for (rectanglefiller(point1c,point1p,point2p,point2c,k)) complete
wait for (rectanglechecker(point1f,point1c,point2c,point2f,k)) complete
Return
End If
End Sub
Sub trianglefiller(point1 As coordX, point2 As coordX, point3 As coordX,k As Int)As ResumableSub
'find pmax, find pmin
'construct line clockwise from pmax to pmin
'construct line anticlockwise from pmax to pmin
'pull list of x values and draw canvas line between all
Dim timer As Long
timer=DateTime.Now
Dim line1xvalues As List
Dim line2xvalues As List
Dim line1yvalues As List
Dim line2yvalues As List
Dim CWmap As Map
Dim ACWmap As Map
ACWmap.Initialize 'used to progress clockwise and anticlockwise around rectangle
ACWmap.Put(point1,point2)
ACWmap.Put(point2,point3)
ACWmap.Put(point3,point1)
CWmap.Initialize
CWmap.Put(point1,point3)
CWmap.Put(point2,point1)
CWmap.Put(point3,point2)
line1xvalues.Initialize
line2xvalues.Initialize
line1yvalues.initialize
line2yvalues.Initialize
Dim pmax As coordX
Dim pmin As coordX
Dim temp As coordX
Dim Pmap As Map 'lets us grab the maxY and minY after finding the min and max value
Pmap.Initialize
Pmap.Put(point1.y,point1)
Pmap.Put(point2.y,point2)
Pmap.Put(point3.y,point3)
pmax.Initialize
pmin.Initialize
Dim temp3 As Float
temp3 = Max(point1.y,Max(point2.y,point3.y))
Dim temp4 As Float
temp4 = Min(point1.y,Min(point2.y,point3.y))
pmax=Pmap.Get(temp3) 'temp variable required, otherwise pmax is null
pmin=Pmap.Get(temp4)
Dim temp2 As coordX
temp = pmax
line1xvalues.add(pmax.x)'initial point to both line lists
line1yvalues.add(pmax.y)
line2xvalues.add(pmax.x)
line2yvalues.add(pmax.y)
Do While temp <> pmin 'cwloop
temp2=CWmap.Get(temp)'gets second point for line
Wait For(calcline(temp.x,temp.y, temp2.x,temp2.y,line1xvalues,line1yvalues)) complete 'line2xvalues generated
temp = CWmap.Get(temp) 'changes the first line point to the second
'Log("line1")
Loop
temp = pmax
Do While temp <> pmin 'acwloop
temp2=ACWmap.Get(temp)'gets second point for line
wait for (calcline(temp.x,temp.y, temp2.x,temp2.y,line2xvalues,line2yvalues)) complete 'line2xvalues generated
temp = ACWmap.Get(temp) 'changes the first line point to the second
'Log("line2")
Loop
line1xvalues.add(pmin.x)'final point to both line lists
line1yvalues.add(pmin.y)
line2xvalues.add(pmin.x)
line2yvalues.add(pmin.y)
Dim ytemp As Int
ytemp=pmax.y 'could choose to save both x and y values to line1xvalues rather than just x.
For i=0 To Min(line1xvalues.Size,line2xvalues.Size)-1
bmcGraph.DrawLine(line1xvalues.Get(i),ytemp,line2xvalues.get(i),ytemp,boomcolor(k),1)
ytemp=ytemp-1
Next
Return 2
End Sub
Sub trianglechecker(point1 As coordX, point2 As coordX, point3 As coordX, k As Int)As ResumableSub
Dim ACWmap As Map
Dim CWmap As Map
Dim line1xvalues As List
Dim line2xvalues As List
Dim line2yvalues As List
Dim line1yvalues As List
ACWmap.Initialize 'used to progress clockwise and anticlockwise around rectangle
ACWmap.Put(point1,point2)
ACWmap.Put(point2,point3)
ACWmap.Put(point3,point1)
CWmap.Initialize
CWmap.Put(point1,point3)
CWmap.Put(point2,point1)
CWmap.Put(point3,point2)
line1xvalues.Initialize
line2xvalues.Initialize
line1yvalues.initialize
line2yvalues.Initialize
Dim pmax As coordX
Dim pmin As coordX
Dim temp As coordX
Dim Pmap As Map 'lets us grab the maxY and minY after finding the min and max value
Pmap.Initialize
Pmap.Put(point1.y,point1)
Pmap.Put(point2.y,point2)
Pmap.Put(point3.y,point3)
pmax.Initialize
pmin.Initialize
Dim temp3 As Float
temp3 = Max(point1.y,Max(point2.y,point3.y))
Dim temp4 As Float
temp4 = Min(point1.y,Min(point2.y,point3.y))
pmax=Pmap.Get(temp3) 'temp variable required, otherwise pmax is null
pmin=Pmap.Get(temp4)
Dim temp2 As coordX
temp = pmax
line1xvalues.add(pmax.x)'initial point to both line lists
line1yvalues.add(pmax.y)
line2xvalues.add(pmax.x)
line2yvalues.add(pmax.y)
Do While temp <> pmin 'cwloop
temp2=CWmap.Get(temp)'gets second point for line
Wait For(calcline(temp.x,temp.y, temp2.x,temp2.y,line1xvalues,line1yvalues)) complete 'line2xvalues generated
temp = CWmap.Get(temp) 'changes the first line point to the second
Loop
temp = pmax
Do While temp <> pmin 'acwloop
temp2=ACWmap.Get(temp)'gets second point for line
wait for (calcline(temp.x,temp.y, temp2.x,temp2.y,line2xvalues,line2yvalues)) complete 'line2xvalues generated
temp = ACWmap.Get(temp) 'changes the first line point to the second
Loop
line1xvalues.add(pmin.x)'adds final point to both line lists
line1yvalues.add(pmin.y)
line2xvalues.add(pmin.x)
line2yvalues.add(pmin.y)
Dim ytemp As Int
Dim pixelchecked As Int
pixelchecked=0
ytemp=pmax.y 'could choose to save both x and y values to line1xvalues rather than just x.
For i=0 To (Min(line1xvalues.Size,line2xvalues.Size)-1) 'iterates from top point to bottom of polygone, drawing a level line from left to right
For j=line2xvalues.Get(i) To line1xvalues.Get(i) Step 1'issue solved, was counting from a higher number to a lower number rather than lower to higher
pixelchecked=pixelchecked+1
If bmcGraph.GetColor(j,ytemp)=-1 Then
boomon=True
boomcolor(k)=xui.Color_Green
Return boomcolor(k)
End If
Next
ytemp=ytemp-1
Next
boomcolor(k)=xui.Color_yellow
boomon=False
Log("boomon"&boomon)
Return boomcolor(k)
End Sub