コード例 #1
0
ファイル: WorldView.cs プロジェクト: speskuric/worldmaker
        private void selectActionMouseDown(MouseEventArgs e)
        {
            currentAction = ActionType.Select;
            double     selectionWorldDistance = selectionPixelDistance / (zoomPercent / 100);
            double     pointDistance          = selectionWorldDistance;
            LineGraph  closestPointsLine      = null;
            WorldPoint closestPoint           = null;
            double     lineDistance           = selectionWorldDistance;
            LineGraph  closestLine            = null;

            foreach (LineGraph line in World.Lines)
            {
                bool   isLine;
                double distance;
                int    index = line.Grab(mouseDownWorldX, mouseDownWorldY, selectionWorldDistance, out distance, out isLine);
                if (index != -1)
                {
                    if (isLine)
                    {
                        if (distance < lineDistance)
                        {
                            lineDistance = distance;
                            closestLine  = line;
                        }
                    }
                    else
                    {
                        if (distance < pointDistance)
                        {
                            pointDistance     = distance;
                            closestPoint      = line[index];
                            closestPointsLine = line;
                        }
                    }
                }
            }
            if (closestPoint != null)
            {
                if (!selection.Contains(closestPoint))
                {
                    selection.Clear();
                    selectionIndices.Clear();
                    selection.Add(closestPoint);
                    selectionIndices.Add(closestPoint.getIndex());
                }
                currentAction = ActionType.MoveSelection;
            }
            else if (closestLine != null)
            {
                selection.Clear();
                selectionIndices.Clear();
                for (int i = 0; i < closestLine.Count; i++)
                {
                    selection.Add(closestLine[i]);
                    selectionIndices.Add(i);
                }
                currentAction = ActionType.MoveSelection;
            }
        }