private void LegendHandleRectangleElement_RectangleTapped(object sender, object e, object datum) { TappedRoutedEventArgs args = e as TappedRoutedEventArgs; LineChartDatum lineChartDatum = datum as LineChartDatum; if (SelectionChanged != null) { Logger.Instance.Log($"selection,linechart,touch"); if (lineChartDatum.Rows == null || lineChartDatum.Rows.Count() < lineChartDatum.EnvelopeRows.Count()) { SelectionChanged(this, lineChartDatum.EnvelopeRows, SelectionChangedType.Add);//, ReflectReason2.SelectionChanged); } else { SelectionChanged(this, lineChartDatum.Rows, SelectionChangedType.Remove);//, ReflectReason2.SelectionChanged); } } args.Handled = true; }
private void Drawable_StrokeAdded(InkManager inkManager) { if (inkManager.GetStrokes().Count > 0) { List <Point> points = inkManager.GetStrokes()[0].GetInkPoints().Select(ip => ip.Position).ToList(); Rect boundingRect = inkManager.GetStrokes()[0].BoundingRect; List <Row> intersectedRows = new List <Row>(); Int32 index = 0; Boolean horizontalAxisStroke = false, legendStroke = false; index = 0; foreach (D3Rectangle rect in LegendHandleRectangleElement.ChildRectangles) { Rect r = new Rect(rect.X + ChartAreaEndX, rect.Y, rect.Width, rect.Height); if (Const.IsIntersected(r, boundingRect)) { if (IsCNN) { RemoveColumnViewModel(this, Data[index].Key.ToString()); drawable.RemoveAllStrokes(); } else { LineChartDatum datum = Data[index]; intersectedRows = intersectedRows.Concat(datum.EnvelopeRows).ToList(); legendStroke = true; } } index++; } index = 0; foreach (TextBlock label in HorizontalAxis.TickLabels) { Rect r = new Rect(Canvas.GetLeft(label), Canvas.GetTop(label) + ChartAreaEndY, label.ActualWidth, label.ActualHeight); if (Const.IsIntersected(r, boundingRect)) { Object xScaleCategory = XScale.Domain[index]; intersectedRows = intersectedRows.Concat( Data.SelectMany(d => d.DataPoints).Where(dp => dp.Item1 == xScaleCategory) .Where(dp => dp.EnvelopeRows != null) .SelectMany(dp => dp.EnvelopeRows) ).ToList(); horizontalAxisStroke = true; } index++; } index = 0; foreach (LineChartDatum datum in Data) { List <Point> circlePoints = EnvelopeLineCoordinateGetter(datum, index); if (circlePoints.Exists(cp => cp.X >= 0 && boundingRect.Contains(cp))) // 하나라도 포함되는 포인트가 있으면 예를 선택 { intersectedRows = intersectedRows.Concat(datum.EnvelopeRows).ToList(); } index++; } intersectedRows = intersectedRows.Distinct().ToList(); if (Const.IsStrikeThrough(boundingRect)) // strikethrough 및 무조건 필터아웃 { if (FilterOut != null && intersectedRows.Count > 0) { Logger.Instance.Log($"filter out,linechart,pen"); if (horizontalAxisStroke && !legendStroke) { IEnumerable <Category> categories = intersectedRows .Select(row => row.Cells[SecondColumnViewModel.Index].Content as Category) .Distinct() .OrderBy(cate => cate.Order); FilterOut(this, categories); } else if (legendStroke && !horizontalAxisStroke && FirstColumnViewModel.Type == ColumnType.Categorical) { IEnumerable <Category> categories = intersectedRows .Select(row => row.Cells[FirstColumnViewModel.Index].Content as Category) .Distinct() .OrderBy(cate => cate.Order); FilterOut(this, categories); } } } else // 아니면 무조건 셀렉션 { Logger.Instance.Log($"selection,linechart,pen"); if (SelectionChanged != null) { SelectionChanged(this, intersectedRows, SelectionChangedType.Add);//, ReflectReason2.SelectionChanged); } } } drawable.RemoveAllStrokes(); }