public void OnMarkerMoved(ChartObjectMarker marker)
 {
     throw new NotImplementedException();
 }
        public void OnMarkerMoved(ChartObjectMarker marker)
        {
            // пересчитать координаты маркера
            marker.RecalculateModelCoords(Owner.Owner.WorldRect, Owner.Owner.CanvasRect);

            if (marker.action == ChartObjectMarker.MarkerAction.Move)
            {
                // изменилась точка привязки к свечкам
                PivotPrice = marker.centerModel.Y;
                PivotIndex = marker.centerModel.X;
                CalculateTextMarkerCoords();
                return;
            }
            // изменилось расположение коментария
            markers[0].CalculateScreenCoords(Owner.Owner.WorldRect, Owner.Owner.CanvasRect);
            var vx = marker.centerScreen.X - markers[0].centerScreen.X;
            var vy = marker.centerScreen.Y - markers[0].centerScreen.Y;
            var len = Math.Sqrt(vx*vx + vy*vy);
            ArrowLength = (int) len;
            ArrowAngle = Math.Atan2(vy, vx) * 180 / Math.PI;
        }
 public void OnMarkerMoved(ChartObjectMarker marker)
 {
     var markerIndex = 0;
     for (var i = 0; i < markers.Length; i++)
     {
         if (markers[i] != marker) continue;
         markerIndex = i;
         break;
     }
     marker.RecalculateModelCoords(Owner.Owner.WorldRect, Owner.Owner.CanvasRect);
     var pointIndex = points.Count == 2 ? markerIndex : 0;
     points[pointIndex] = new Cortege2<int, float>((int)marker.centerModel.X,
         (float)marker.centerModel.Y);
     // пересчитать отметки Фибоначчи
     CalculateProjections();
 }
 public void OnMarkerMoved(ChartObjectMarker marker)
 {
     marker.RecalculateModelCoords(Owner.Owner.WorldRect, Owner.Owner.CanvasRect);
     candleIndex = marker.centerModel.X;
     Price = marker.centerModel.Y;
 }
        public override void OnMarkerMoved(ChartObjectMarker marker)
        {
            // если речь не идет о точке, задающей ширину канала...
            if (marker.action == ChartObjectMarker.MarkerAction.Move)
            {
                base.OnMarkerMoved(marker);
                return;
            }
            var markerIndex = 0;
            for (var i = 0; i < markers.Length; i++)
            {
                if (markers[i] != marker) continue;
                markerIndex = i - 1;
                break;
            }
            if (markerIndex < 2)
            {
                base.OnMarkerMoved(marker);
                return;
            }

            marker.RecalculateModelCoords(Owner.Owner.WorldRect, Owner.Owner.CanvasRect);
            // определить ширину канала
            Point3 = marker.centerModel;
        }
 public void OnMarkerMoved(ChartObjectMarker marker)
 {
 }
        public void OnMarkerMoved(ChartObjectMarker marker)
        {
            // пересчитать маркер
            marker.RecalculateModelCoords(Owner.Owner.WorldRect, Owner.Owner.CanvasRect);

            // переместить
            if (marker.action == ChartObjectMarker.MarkerAction.Move)
            {
                float vx, vy;
                if (points.Count > 1)
                {
                    vx = (float) (marker.centerModel.X - (points[0].X + points[1].X)*0.5f);
                    vy = (float) (marker.centerModel.Y - (points[0].Y + points[1].Y)*0.5f);
                }
                else
                {
                    vx = (float)(marker.centerModel.X - points[0].X);
                    vy = (float)(marker.centerModel.Y - points[0].Y);
                }
                for (var i = 0; i < points.Count; i++)
                {
                    points[i] = new PointF(points[i].X + vx, points[i].Y + vy);
                    markers[i + 1].centerModel = points[i];
                }
                return;
            }

            // растянуть
            var markerIndex = 0;
            for (var i = 0; i < markers.Length; i++)
            {
                if (markers[i] != marker) continue;
                markerIndex = i - 1;
                break;
            }
            if (markerIndex < 0 || points.Count <= markerIndex) return;
            points[markerIndex] = new PointF((float)marker.centerModel.X, (float)marker.centerModel.Y);
        }
Exemple #8
0
        public virtual void OnMarkerMoved(ChartObjectMarker marker)
        {
            marker.RecalculateModelCoords(Owner.Owner.WorldRect, Owner.Owner.CanvasRect);

            if (copyModeOn)
            {
                // копировать исходную линию
                ((TrendLineSeries)Owner).CopyLine(this);
                copyModeOn = false;
            }

            // параллельный перенос
            if (marker.action == ChartObjectMarker.MarkerAction.Move)
            {
                var mid = linePoints.Count == 2
                              ? new PointD(
                                    (linePoints[0].X + linePoints[1].X) * 0.5,
                                    (linePoints[0].Y + linePoints[1].Y) * 0.5) : linePoints[0];
                var vx = marker.centerModel.X - mid.X;
                var vy = marker.centerModel.Y - mid.Y;
                for (var i = 1; i < 3; i++)
                {
                    markers[i].centerModel = new PointD(markers[i].centerModel.X + vx,
                        markers[i].centerModel.Y + vy);
                }
                linePoints[0] = markers[1].centerModel;
                linePoints[linePoints.Count - 1] = markers[2].centerModel;

                return;
            }

            // растягивание
            var markerIndex = 0;
            for (var i = 0; i < markers.Length; i++)
            {
                if (markers[i] != marker) continue;
                markerIndex = i - 1;
                break;
            }
            var pointIndex = markerIndex >= linePoints.Count ? 0 : markerIndex;
            linePoints[pointIndex] = marker.centerModel;
            markers[0].centerModel = new PointD(
                (markers[1].centerModel.X + markers[2].centerModel.X) * 0.5,
                (markers[1].centerModel.Y + markers[2].centerModel.Y) * 0.5);
        }
        /// <summary>
        /// возвращает флаг - необходимость перерисовки
        /// </summary>
        private bool EditChartObjectMouseDown(int mouseX, int mouseY, Keys modifiers)
        {
            var ptScreen = chart.PointToScreen(new Point(mouseX, mouseY));
            int x = ptScreen.X, y = ptScreen.Y;

            // если объект не выбран - показать диалог выбора объекта
            if (editingObject == null)
            {
                var selected = GetSelectedObjects(x, y);
                if (selected.Count == 0) return false;
                if (selected.Count == 1)
                {
                    SelectObject(selected[0]);
                    return true;
                }
                // множественный выбор
                chart.toolSkipMouseDown = true;
                var dlg = new ChartObjectSelectForm(selected);
                dlg.ShowDialog();
                var selectedObj = dlg.SelectedObject;
                if (selectedObj != null)
                {
                    SelectObject(selectedObj);
                    return true;
                }
                return false;
            }

            // иначе проверить попадание в маркер
            var marker = editingObject.IsInMarker(x, y, modifiers);
            if (marker == null)
            {
                // снять выделение с объекта
                DeselectObject();
                return true;
            }

            // маркер будет перемещаться - событие OnMouseMove
            editingMarker = marker;
            zoomTool.Enabled = false;

            return false;
        }
 private void DeselectObject()
 {
     editingObject.Selected = false;
     editingObject = null;
     editingMarker = null;
 }
 private bool SelectObject(IChartInteractiveObject obj)
 {
     if (editingObject == obj) return false;
     if (editingObject != null)
         editingObject.Selected = false;
     editingObject = obj;
     obj.Selected = true;
     editingMarker = null;
     return true;
 }
 private void EditChartObjectMouseUp()
 {
     zoomTool.Enabled = true;
     if (editingObject != null && editingMarker != null)
     {
         // завершить перетаскивание маркера
         editingMarker = null;
     }
 }