Np... thank Claude... it's all his :-)

On Sat, Nov 22, 2008 at 12:31 AM, Sefi Ninio <[EMAIL PROTECTED]> wrote:

>   Well anyway, it works great.
> Thanks a lot for your help.
>
> Sefi
>
>
> On Fri, Nov 21, 2008 at 11:55 PM, Brendan Meutzner <[EMAIL PROTECTED]>wrote:
>
>>   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/
>>
>
>  
>



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

Reply via email to