I think the package was available for 2.0.1 build... I can't remember
exactly, it was quite a while ago...

Brendan



On Fri, Nov 21, 2008 at 2:28 PM, Sefi Ninio <[EMAIL PROTECTED]> wrote:

>   Thanks a lot.
> Where did you get the original LineSeries code? All I have is the swc
> file...
>
>
> On Fri, Nov 21, 2008 at 10:20 PM, Brendan Meutzner <[EMAIL PROTECTED]>wrote:
>
>>   package range_charts.extended_series
>> {
>> import mx.charts.HitData;
>> import mx.charts.chartClasses.CartesianTransform;
>>  import mx.charts.series.LineSeries;
>> import mx.charts.series.items.LineSeriesItem;
>>  import mx.graphics.IStroke;
>> import mx.graphics.LinearGradientStroke;
>> import mx.graphics.Stroke;
>>
>> public class CustomLineSeries extends LineSeries
>> {
>>  override public function
>> findDataPoints(x:Number,y:Number,sensitivity:Number):Array
>>     {
>>         // esg, 8/7/06: if your mouse is over a series when it gets added
>> and displayed for the first time, this can get called
>>         // before updateData, and before and render data is constructed.
>> The right long term fix is to make sure a stubbed out
>>         // render data is _always_ present, but that's a little
>> disruptive right now.
>>         if (interactive == false || !renderData)
>>             return [];
>>         var pr:Number = getStyle("radius");
>>         var minDist2:Number  = pr + sensitivity;
>>         minDist2 *= minDist2;
>>         var minItem:LineSeriesItem = null;
>>         var pr2:Number = pr * pr;
>>
>>         var len:int = renderData.filteredCache.length;
>>          if (len == 0)
>>             return [];
>>          if(sortOnXField == true)
>>         {
>>             var low:Number = 0;
>>             var high:Number = len;
>>             var cur:Number = Math.floor((low+high)/2);
>>
>>             var bFirstIsNaN:Boolean = isNaN(renderData.filteredCache[0]);
>>
>>             while (true)
>>             {
>>                 var v:LineSeriesItem = renderData.filteredCache[cur];
>>                 if (!isNaN(v.yFilter) && !isNaN(v.xFilter))
>>                 {
>>                     //var dist:Number = (v.x  - x)*(v.x  - x) + (v.y -
>> y)*(v.y -y);
>>                     var dist:Number = (v.x - x)*(v.x - x) ;
>>                     if (dist <= minDist2)
>>                     {
>>                         minDist2 = dist;
>>                         minItem = v;
>>                     }
>>                 }
>>
>>  if (v.x < x || (isNaN(v.x) && bFirstIsNaN))
>>                 {
>>                     low = cur;
>>                     cur = Math.floor((low + high)/2);
>>                     if (cur == low)
>>                         break;
>>                 }
>>                 else
>>                 {
>>                     high = cur;
>>                     cur = Math.floor((low + high)/2);
>>                     if (cur == high)
>>                         break;
>>                 }
>>             }
>>         }
>>         else
>>         {
>>             var i:uint;
>>             for (i=0;i<len;i++)
>>             {
>>                v = renderData.filteredCache[i];
>>                if (!isNaN(v.yFilter) && !isNaN(v.xFilter))
>>                 {
>>                    //dist = (v.x  - x)*(v.x  - x) + (v.y - y)*(v.y -y);
>>                    dist = (v.x - x)*(v.x - x) ;
>>                    if (dist <= minDist2)
>>                    {
>>                        minDist2 = dist;
>>                        minItem = v;
>>                    }
>>                 }
>>            }
>>         }
>>
>>         if (minItem)
>>         {
>>             var hd:HitData = new
>> HitData(createDataID(minItem.index),Math.sqrt(minDist2),minItem.x,minItem.y,minItem);
>>              var istroke:IStroke = getStyle("lineStroke");
>>             if (istroke is Stroke)
>>                 hd.contextColor = Stroke(istroke).color;
>>             else if (istroke is LinearGradientStroke)
>>             {
>>                 var gb:LinearGradientStroke =
>> LinearGradientStroke(istroke);
>>                 if (gb.entries.length > 0)
>>                     hd.contextColor = gb.entries[0].color;
>>             }
>>             hd.dataTipFunction = formatDataTip;
>>             return [ hd ];
>>         }
>>         return [];
>>     }
>>
>>
>>     private function formatDataTip(hd:HitData):String
>>     {
>>         var dt:String = "";
>>
>>         var n:String = displayName;
>>         if (n && n != "")
>>             dt += "<b>" + n + "</b><BR/>";
>>          var xName:String =
>> dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS).displayName;
>>         if (xName != "")
>>             dt += "<i>" + xName+ ":</i> ";
>>         dt +=
>> dataTransform.getAxis(CartesianTransform.HORIZONTAL_AXIS).formatForScreen(
>>             LineSeriesItem(hd.chartItem).xValue) + "\n";
>>
>>         var yName:String =
>> dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).displayName;
>>         if (yName != "")
>>             dt += "<i>" + yName + ":</i> ";
>>         dt +=
>> dataTransform.getAxis(CartesianTransform.VERTICAL_AXIS).formatForScreen(
>>             LineSeriesItem(hd.chartItem).yValue) + "\n";
>>
>>         return dt;
>>     }
>>
>>
>> }
>> }
>>
>>
>>
>> <custom_series:CustomLineSeries id="baseSeries" name="Reading Value"
>> xField="readingDate" yField="reading" displayName="Reading Value"
>> stroke="{new Stroke(0xFF0000, 0)}"
>>                fill="{new SolidColor(0xFF0000, 0.6)}" lineStroke="{new
>> Stroke(0xFF0000, 1)}" form="curve" interpolateValues="false"
>>                 lineSegmentRenderer="mx.charts.renderers.LineRenderer"
>> radius="2"
>>                    />
>>
>>
>>
>>
>>
>> On Fri, Nov 21, 2008 at 1:48 PM, Sefi Ninio <[EMAIL PROTECTED]> wrote:
>>
>>>   Hi Brendan,
>>>
>>> Could you maybe paste your implementation of the extending class?
>>>
>>> Thanks,
>>> Sefi
>>>
>>> On Fri, Nov 21, 2008 at 8:41 PM, Sefi Ninio <[EMAIL PROTECTED]>wrote:
>>>
>>>> Hi Brendan
>>>>
>>>> Thanks for the reply, I'll give it a try.
>>>>
>>>> Sefi
>>>>
>>>>
>>>> On Fri, Nov 21, 2008 at 6:34 PM, Brendan Meutzner <[EMAIL PROTECTED]>wrote:
>>>>
>>>>>   Claude Hussenet has come up with a solution for this.  Here's the
>>>>> past post.
>>>>>
>>>>> http://tech.groups.yahoo.com/group/flexcoders/message/90045
>>>>>
>>>>> I've used and it works great.
>>>>>
>>>>>
>>>>> Brendan
>>>>>
>>>>>
>>>>>
>>>>> On Fri, Nov 21, 2008 at 4:56 AM, Sefi Ninio <[EMAIL PROTECTED]>wrote:
>>>>>
>>>>>>   Hey,
>>>>>>
>>>>>> I have a chart set up and using dataTipFunction to format the
>>>>>> datatips. It works great.
>>>>>> However, what I'd really like, is to display the datatips for all the
>>>>>> series for the current x axis value the mouse pointer is over (and only
>>>>>> those).
>>>>>> Example: if the mouse pointer is over x value 10, and I have 3 line
>>>>>> series in that chart, then all 3 points correlating to x value 10 will 
>>>>>> have
>>>>>> their datatips visible.
>>>>>>
>>>>>> There are a few issues with this:
>>>>>> 1. I don't have an easy way to translate mouse pointer location on
>>>>>> mouse over to the relevant x axis value.
>>>>>> 2. Once I (hopefully) get the x value, I'd also have to have all y
>>>>>> values for the series (relatively simple).
>>>>>> 3. If I get here, I'll have to think of a way to cause the points to
>>>>>> show their datatip and ofcourse clear all previous open datatips...
>>>>>>
>>>>>> any ideas on either of those points?
>>>>>>
>>>>>> Thanks,
>>>>>> Sefi
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Brendan Meutzner
>>>>> http://www.meutzner.com/blog/
>>>>>
>>>>
>>>>
>>>
>>
>>
>> --
>> Brendan Meutzner
>> http://www.meutzner.com/blog/
>>
>
>  
>



-- 
Brendan Meutzner
http://www.meutzner.com/blog/

Reply via email to