private void CreateOrEditNode(IssoPoint2D pt1) { // РЕДАКТИРОВАНИЕ УЗЛА // Сначала найдём ближайший к pt1 компонент и точку на нём - // Если pt1 далека от какого-либо компонента, не делаем ничего // Если эта точка далека от существующего узла компонента, то // Создаём новый узел, разделяя компонент на две части IssoPoint2D pt2; ComponentBasic comp = modelVM.GetComponent(pt1, out pt2); // Если эта точка близка к началу или концу линейного компонента - выбираем начало или конец // Если нет - разбиваем компонент на две части if (comp?.CompType == ComponentTypes.ctLinear) { modelVM.SplitLinearAt((ComponentLinear)comp, pt2); EditedComp = new ComponentNode(pt2); RModel.CompsList.Add(EditedComp); OnComponentSelected?.Invoke(EditedComp, null); } if (comp?.CompType == ComponentTypes.ctNode) { EditedComp = comp; OnComponentSelected?.Invoke(EditedComp, null); } }
private void SelectByFrame(IssoPoint2D pt1, bool over) { if (!SelectionStarted) { SelectionStarted = true; SelectionRect.Left = pt1.X; SelectionRect.Top = pt1.Y; SelectionRect.Right = SelectionRect.Left; SelectionRect.Bottom = SelectionRect.Top; } else { SelectionRect.Right = pt1.X; SelectionRect.Bottom = pt1.Y; } if (over) { if (modelVM.SelectElementsByRect(SelectionRect) > 0) { OnComponentSelected?.Invoke(modelVM.FirstSelectedBeam, null); } SelectionStarted = false; EditorAction = EditorActions.None; CancelAction(); Invalidate(); } ; }
private void SelectComponent(IssoPoint2D pt1) { // Если в данный момент никакой операции редактирования не выполняется, // то просто определяем, есть ли в зоне касания какой-либо компонент. // Если есть, то выбираем его if (EditorAction == EditorActions.None) { IssoPoint2D pt2; ComponentBasic comp = modelVM.GetComponent(pt1, out pt2); // НЕ НАДО) Меняем состояние ранее выбранного компонента на обычное // modelVM.DropSelection(); if (comp != null) { EditedComp = comp; EditedComp.CompState = ComponentState.csSelected; } else { EditedComp = null; } OnComponentSelected?.Invoke(EditedComp, null); Invalidate(); } }