Anyone with CartesianTransform knowledge?

I'm having a good bit of difficulty getting a dynamically assigned custom 
CartesianTransform to work. I'm not finding a whole lot of sample code to learn 
from and am currently slogging through the framework code trying to determine 
what's up. Hopefully someone with more knowledge or experience can point me in 
the right direction. 
I just spent way too much time with a related dataTransform issue before I 
realized that it was an unreported bug 
(https://bugs.adobe.com/jira/browse/FLEXDMV-2103), and I'd prefer to know more 
quickly if this too is a bug, or just inexperience.

I've made a simple demo to demonstrate the problem. The code is below.

Thanks in advance.
Eddie B.

Steps:
1) Compile and run the 2 files below (main app and custom transform)
2) Click the Change Data button to see that the data changes correctly.
3) Click the Set Transforms button to assign the new transform.
4) Click the Change Data button again to see the problem.


/***** File 1 : The Main App *****/

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"; >
<mx:Script>
<![CDATA[          
import mx.collections.ArrayCollection;
import mx.charts.chartClasses.*;
                
[Bindable]
private var medalsAC:ArrayCollection = new ArrayCollection( [
{ Country: "USA", Gold: 35, Silver:39, Bronze: 29 },
{ Country: "China", Gold: 32, Silver:17, Bronze: 14 },
{ Country: "Russia", Gold: 27, Silver:27, Bronze: 38 } ]);
[Bindable]
private var medalsAC2:ArrayCollection = new ArrayCollection( [
{ Country: "USA", Gold: 25, Silver:32, Bronze: 29 },
{ Country: "China", Gold: 12, Silver:17, Bronze: 44 },
{ Country: "Russia", Gold: 17, Silver:17, Bronze: 38 } ]);

private function setTransforms():void {
for (var i:int = 0; i < chart.series.length; i++) {
var cs:ColumnSeries  = chart.series[i] as ColumnSeries;
var elements:Array = cs.dataTransform.elements;
cs.dataTransform = new MyCartesianTransform();
//cs.dataTransform.elements = elements;
//cs.dataTransform.setAxis(CartesianTransform.HORIZONTAL_AXIS, ca);
//cs.invalidateProperties();
}
}
private function showTransforms():void {
var classInfo:XML;
textArea.text = "\nStacked chart's transforms:\n";
for (var i:int = 0; i < chart.series.length; i++) {
var cs:ColumnSeries = chart.series[i] as ColumnSeries;
classInfo = describeType(cs.dataTransform);
textArea.text += classin...@name.tostring() + "\n";
}
}

private function changeData():void {
if (chart.dataProvider == medalsAC) 
chart.dataProvider = medalsAC2;
else 
chart.dataProvider = medalsAC;
}
]]>
</mx:Script>

<mx:Panel title="Stacked Chart / CartesianTransform Bug" 
height="100%" width="100%" layout="vertical">
<mx:ColumnChart id="chart" height="100%" width="45%" 
dataProvider="{medalsAC}" >                
<mx:horizontalAxis>
<mx:CategoryAxis id="ca" categoryField="Country"/>
</mx:horizontalAxis>
<mx:series>
<mx:ColumnSeries xField="Country" yField="Gold" displayName="Gold"  />
<mx:ColumnSeries xField="Country" yField="Silver" displayName="Silver"  />
<mx:ColumnSeries xField="Country" yField="Bronze" displayName="Bronze" />
</mx:series>
</mx:ColumnChart>
<mx:Legend dataProvider="{chart}"/>
<mx:Button label="Change Data" click="changeData()"/>
<mx:Button label="Set Transforms" click="setTransforms()"/>
<mx:Button label="Show Transform info" click="showTransforms()"/>
<mx:TextArea id="textArea"  height="174" width="100%"/>
</mx:Panel>
</mx:Application>


/****  File 2 : The Custom Cartesian Transform ****/
package
{
import mx.charts.ColumnChart;
import mx.charts.chartClasses.CartesianTransform;

public class MyCartesianTransform extends CartesianTransform
{               
public function MyCartesianTransform(){
super();
}
override public function transformCache(cache:Array /* of Object */,
xField:String, xConvertedField:String, 
yField:String, yConvertedField:String):void
{
var series:MyColumnSeries = this.elements[0] as MyColumnSeries;
if (series != null) {
var str:String = series.owner.name;
trace("MyCartesianTransform: " + str);
} else {
trace("series == null. Where are the elements?");
}
super.transformCache(cache, xField, xConvertedField, yField, yConvertedField);
}
}

Reply via email to