Xojo Developer Conference
25/27th April 2018 in Denver.
MBS Xojo Conference
6/7th September 2018 in Munich, Germany.

Platforms to show: All Mac Windows Linux Cross-Platform

/ChartDirector/simplePie with MouseClicks explode Web
Function:
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /ChartDirector/simplePie with MouseClicks explode Web
This example is the version from Sun, 17th Mar 2012.
Project "simplePie with MouseClicks explode Web.rbp"
Class App Inherits WebApplication
End Class
Class Session Inherits WebSession
End Class
Class WebPage1 Inherits WebPage
Control ImageView1 Inherits WebImageView
ControlInstance ImageView1 Inherits WebImageView
EventHandler Sub MouseDown(X As Integer, Y As Integer, Details As REALbasic.MouseEvent) dim sector as integer = findsector(x,y) if sector>=0 then Title="Sector "+Str(sector) else Title="" end if run sector End EventHandler
EventHandler Sub Open() run -1 End EventHandler
End Control
Control Label1 Inherits WebLabel
ControlInstance Label1 Inherits WebLabel
End Control
Protected Sub Parse(s as string) // Parse the html map s=ReplaceLineEndings(s,EndOfLine) dim lines(-1) as string = split(s,EndOfLine) for each line as string in lines // <area shape="poly" coords="350,145,428,166,484,222,505,300,504,320,350,300" href="a?sector=0&label=Germany&value=55&percent=27.09"> dim parts(-1) as string = split(line,"""") if UBound(parts)>=6 then if parts(1)="poly" then dim po as new MyPoly po.setCoords parts(3) po.setSector parts(5) polys.Append po elseif parts(1)="Rect" then dim re as new MyRect re.setCoords parts(3) re.setSector parts(5) rects.Append re end if end if next End Sub
Function findsector(x as integer, y as integer) As integer // click in on of the Rectangles? for each re as MyRect in rects if x>=re.left and x<=re.right and y>=re.top and y<=re.bottom then Return re.sector end if next // click in a polygon? for each po as MyPoly in polys dim polysides as integer=UBound(po.x) dim j as integer=polySides dim oddNodes as Boolean=False for i as integer=0 to polySides if (po.y(i)<y and po.y(j)>=y) or (po.y(j)<y and po.y(i)>=y) then if (po.x(i)+(y-po.y(i))/(po.y(j)-po.y(i))*(po.x(j)-po.x(i))<x) then oddNodes=not oddNodes end if end if j=i next if oddNodes then // found it! Return po.sector end if next // nothing found Return -1 End Function
Sub run(HighLightSector as integer) // The data for the pie chart dim data(-1) as double=array(55.0, 18.0, 25.0, 22.0, 18.0, 30.0, 35.0) // The labels for the pie chart, Words are choosen random to check font! dim labels(-1) as string=array("Germany","Italy","France","Spain","UK","Poland","Russia") // Create a PieChart object of size 360 x 300 pixels c = new CDPieChartMBS(700, 600) // Set the center of the pie at (180, 140) and the radius to 100 pixels c.setPieSize 350,300,150 // Set the pie data and the pie labels c.setData data,labels call c.setLabelStyle "Times New Roman",18 if HighLightSector>=0 then c.setExplode HighLightSector end if pic=c.makeChartPicture ImageView1.Picture=pic // read in the html map Parse C.getHTMLImageMap("a") End Sub
Property c As CDPieChartMBS
Property pic As picture
Property Protected polys() As MyPoly
Property Protected rects() As MyRect
End Class
Class MyPoly
Sub setCoords(s as string) // set coordinates dim co(-1) as string co=split(s,",") dim u as integer=UBound(co) for i as integer=0 to u x.Append val(co(i)) i=i+1 y.Append val(co(i)) next End Sub
Sub setSector(s as string) // set sector if left(s,9)="a?sector=" then sector=val(mid(s,10)) end if End Sub
Property sector As Integer
Property x() As double
Property y() As double
End Class
Class MyRect
Sub setCoords(s as string) // set coordinates dim co(-1) as string co=split(s,",") left=val(co(0)) top=val(co(1)) right=val(co(2)) bottom=val(co(3)) End Sub
Sub setSector(s as string) // set sector if left(s,9)="a?sector=" then sector=val(mid(s,10)) end if End Sub
Property bottom As Integer
Property left As Integer
Property right As Integer
Property sector As Integer
Property top As Integer
End Class
End Project

See also:

Feedback, Comments & Corrections

The items on this page are in the following plugins: MBS ChartDirector Plugin.




Links
MBS FileMaker tutorial videos