Platforms to show: All Mac Windows Linux Cross-Platform
/ChartDirector/simplePie with MouseClicks explode Web
Function:
Required plugins for this example: MBS ChartDirector Plugin
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.
Function:
Required plugins for this example: MBS ChartDirector Plugin
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.xojo_binary_project"
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:
- /ChartDirector/simplePie
- /ChartDirector/simplePie Korean
- /ChartDirector/simplePie with Cyrillic
- /ChartDirector/simplePie with DynaPDF
- /ChartDirector/simplePie with Japanese
- /ChartDirector/simplePie with MouseClicks
- /ChartDirector/simplePie with MouseClicks explode
- /ChartDirector/simplePie with SVG output
- /ChartDirector/simplePie with Thai
- /ChartDirector/simplePie with transparent background
The items on this page are in the following plugins: MBS ChartDirector Plugin.
Feedback: Report problem or ask question.