Hi,

I had a discussion with Alex about the FlexJS chart package and how it makes 
use of SVG. For a quick background, the FlexJS chart package makes use of the 
core.graphics package created by Om which makes FlexJS charts much more easily 
cross-compiled from ActionScript to JavaScript.

At the moment, the chart package creates a complex display list structure where 
each value to be plotted is a FlexJS component/element. In JavaScript, this 
comes down to a <div> with an <svg> (+ graphic, e.g., rectangle) for each item 
to be rendered to display the chart. Imagine you are plotting a lot of points 
(say 500). That would lead to 500 divs and more svgs. While feasible, it takes 
time to render and bloats the DOM.

Om added some efficiencies by creating a GraphicsContainer (and single <svg>) 
and you can draw directly into it (have <rect>, <path>, etc.). I modified the 
FlexJS chart package to take advantage of this so that each item to be rendered 
makes use of the shared GraphicsContainer as its background and adds the 
necessary <rect>, <path> or whatever to draw the chart. Much more efficient.

Since then, I've been looking deeper into SVG and discovered some things I 
didn't know it was capable of (although I'm not sure how compatible they are 
with IE). For example, you can nest <svg> elements and even group them. This 
enables relative placement of the items. For example, right now to draw 
anything, all of the coordinates are based on the (0,0) of the shared 
GraphicsContainer. Meaning, each bar of a bar chart is placed relative to the 
underlying chart base (<svg>). That might sound OK, which it did to me, but 
after chatting with Alex, I can see that having more relative coordinates would 
allow for future things such as animations.

Consider a bar chart with two series. Right now, all of the bars are drawn 
relative to the <svg>. What if each series were its own <svg>, enabling each 
bar to be relative to its series origin? This would allow each series to be 
manipulated independently. Further, an SVG group could be used for all of the 
bars in the chart, giving them shared characteristics (color) and that could be 
changed all at once by changing the group color.

Basically, using containers within SVG will make manipulating the charts easier 
in the future and there are several ways to do. I am looking for any 
suggestions or thoughts folks might have who are more familiar with SVG than I 
am.

Regards,
Peter Ent
Adobe Systems

Reply via email to