Exemplo n.º 1
0
        public override SnapResult FindSnappedPositionAndTime(Vector2 screenSpacePosition, SnapType snapType = SnapType.All)
        {
            if (snapType.HasFlagFast(SnapType.NearbyObjects) && snapToVisibleBlueprints(screenSpacePosition, out var snapResult))
            {
                return(snapResult);
            }

            if (snapType.HasFlagFast(SnapType.Grids))
            {
                if (distanceSnapToggle.Value == TernaryState.True && distanceSnapGrid != null)
                {
                    (Vector2 pos, double time) = distanceSnapGrid.GetSnappedPosition(distanceSnapGrid.ToLocalSpace(screenSpacePosition));
                    return(new SnapResult(distanceSnapGrid.ToScreenSpace(pos), time, PlayfieldAtScreenSpacePosition(screenSpacePosition)));
                }

                if (rectangularGridSnapToggle.Value == TernaryState.True)
                {
                    Vector2 pos = rectangularPositionSnapGrid.GetSnappedPosition(rectangularPositionSnapGrid.ToLocalSpace(screenSpacePosition));
                    return(new SnapResult(rectangularPositionSnapGrid.ToScreenSpace(pos), null, PlayfieldAtScreenSpacePosition(screenSpacePosition)));
                }
            }

            return(base.FindSnappedPositionAndTime(screenSpacePosition, snapType));
        }
Exemplo n.º 2
0
        public override SnapResult FindSnappedPositionAndTime(Vector2 screenSpacePosition, SnapType snapType = SnapType.All)
        {
            var    playfield  = PlayfieldAtScreenSpacePosition(screenSpacePosition);
            double?targetTime = null;

            if (snapType.HasFlagFast(SnapType.Grids))
            {
                if (playfield is ScrollingPlayfield scrollingPlayfield)
                {
                    targetTime = scrollingPlayfield.TimeAtScreenSpacePosition(screenSpacePosition);

                    // apply beat snapping
                    targetTime = BeatSnapProvider.SnapTime(targetTime.Value);

                    // convert back to screen space
                    screenSpacePosition = scrollingPlayfield.ScreenSpacePositionAtTime(targetTime.Value);
                }
            }

            return(new SnapResult(screenSpacePosition, targetTime, playfield));
        }
Exemplo n.º 3
0
        public Vector2 GetSnapPosition()
        {
            Vector2 result     = position;
            Vector2 evenOffset = Vector2.Zero;

            if (width % 2 == 0 && (type == SnapType.TopCenter || type == SnapType.Center || type == SnapType.BottomCenter))
            {
                evenOffset.X = 1;
            }
            if (height % 2 == 0 && (type == SnapType.LeftCenter || type == SnapType.Center || type == SnapType.RightCenter))
            {
                evenOffset.Y = 1;
            }
            position = (Main.MouseWorld + evenOffset * 8).ToTileCoordinates().ToVector2();
            int      halfWidth  = width / 2;
            int      halfHeight = height / 2;
            SnapType snapType   = type;

            if (Main.LocalPlayer.gravDir == -1f)
            {
                switch (snapType)
                {
                case SnapType.TopLeft:
                    snapType = SnapType.BottomLeft;
                    break;

                case SnapType.TopCenter:
                    snapType = SnapType.BottomCenter;
                    break;

                case SnapType.TopRight:
                    snapType = SnapType.BottomRight;
                    break;

                case SnapType.BottomLeft:
                    snapType = SnapType.TopLeft;
                    break;

                case SnapType.BottomCenter:
                    snapType = SnapType.TopCenter;
                    break;

                case SnapType.BottomRight:
                    snapType = SnapType.TopRight;
                    break;
                }
            }
            switch (snapType)
            {
            case SnapType.TopLeft:
                break;

            case SnapType.TopCenter:
                position = position.Offset(-halfWidth, 0);
                break;

            case SnapType.TopRight:
                position = position.Offset(-width + 1, 0);
                break;

            case SnapType.LeftCenter:
                position = position.Offset(0, -halfHeight);
                break;

            case SnapType.Center:
                position = position.Offset(-halfWidth, -halfHeight);
                break;

            case SnapType.RightCenter:
                position = position.Offset(-width + 1, -halfHeight);
                break;

            case SnapType.BottomLeft:
                position = position.Offset(0, -height + 1);
                break;

            case SnapType.BottomCenter:
                position = position.Offset(-halfWidth, -height + 1);
                break;

            case SnapType.BottomRight:
                position = position.Offset(-width + 1, -height + 1);
                break;
            }

            if (constrainToAxis)
            {
                if (constrainedX != -1)
                {
                    position.X = constrainedX;
                }
                if (constrainedY != -1)
                {
                    position.Y = constrainedY;
                }
            }

            if (!resultTilePosition)
            {
                position = (position * 16f) - Main.screenPosition;
                if (Main.LocalPlayer.gravDir == -1f)
                {
                    position.Y  = (float)Main.screenHeight - position.Y;
                    position.Y -= height * 16;
                }
            }
            result = position;
            return(result);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Initializes a new instance of the MapAround.UI.WinForms.SnapInfo
 /// which describes a no snapping abilities.
 /// </summary>
 public Snapper()
 {
     _snapType = SnapType.None;
     _snapMethod = emptySnapMethod;
 }
Exemplo n.º 5
0
        public void TestSnapPointToPoint()
        {
            XNAGame game = new XNAGame();

            SnapInformation inf1 = new SnapInformation();
            SnapInformation inf2 = new SnapInformation();

            SnapPoint p1 = new SnapPoint();

            p1.Position = new Vector3(1.7f, 1, 1);
            p1.Normal   = new Vector3(0, 0, 1);
            p1.Normal.Normalize();
            p1.Up = new Vector3(0, -1, 0);
            p1.Up.Normalize();

            SnapPoint p2 = new SnapPoint();

            p2.Position = new Vector3(1, 1, 1);
            p2.Normal   = new Vector3(1, 0, 0);
            p2.Normal.Normalize();
            p2.Up = new Vector3(0, -1, 0);
            p2.Up.Normalize();

            SnapPoint p3 = new SnapPoint();

            p3.Position = new Vector3(2, 0, 2);
            p3.Normal   = new Vector3(1, 1, 0);
            p3.Normal.Normalize();
            p3.Up = new Vector3(1, -1, 0);
            p3.Up.Normalize();

            SnapType type = new SnapType("t1");

            p1.SnapType = type;
            p2.SnapType = type;

            inf1.addSnapObject(p1);
            inf1.addSnapObject(p3);
            inf2.addSnapObject(p2);

            SnapEngineClass snapEngine = new SnapEngineClass();

            snapEngine.addSnapInformation(inf1);
            snapEngine.addSnapInformation(inf2);

            SphereMesh sphere1 = new SphereMesh(0.2f, 24, Color.Green);
            SphereMesh sphere2 = new SphereMesh(0.2f, 24, Color.Yellow);
            SphereMesh sphere3 = new SphereMesh(0.2f, 24, Color.Green);

            sphere1.WorldMatrix = Matrix.CreateTranslation(p1.Position);
            sphere2.WorldMatrix = Matrix.CreateTranslation(p2.Position);
            sphere3.WorldMatrix = Matrix.CreateTranslation(p3.Position);

            game.AddXNAObject(sphere1);
            game.AddXNAObject(sphere2);
            game.AddXNAObject(sphere3);

            game.DrawEvent += delegate
            {
                game.LineManager3D.AddLine(p1.Position, p1.Position + 0.5f * p1.Normal, Color.Red);
                game.LineManager3D.AddLine(p1.Position, p1.Position + 0.5f * p1.Up, Color.Yellow);

                game.LineManager3D.AddLine(p3.Position, p3.Position + 0.5f * p3.Normal, Color.Red);
                game.LineManager3D.AddLine(p3.Position, p3.Position + 0.5f * p3.Up, Color.Yellow);

                game.LineManager3D.AddLine(p2.Position, p2.Position + 0.5f * p2.Normal, Color.Red);
                game.LineManager3D.AddLine(p2.Position, p2.Position + 0.5f * p2.Up, Color.Yellow);
            };
            game.UpdateEvent += delegate
            {
                if (game.Keyboard.IsKeyPressed(Microsoft.Xna.Framework.Input.Keys.Enter))
                {
                    snapEngine.SnapTo(inf1, inf2);
                    sphere1.WorldMatrix = Matrix.CreateTranslation(p1.Position);
                    sphere2.WorldMatrix = Matrix.CreateTranslation(p2.Position);
                    sphere3.WorldMatrix = Matrix.CreateTranslation(p3.Position);
                }
            };

            game.Run();
        }
Exemplo n.º 6
0
 public SnapResult(ISnapPoint pt)
 {
     FrameS = pt.FrameS; Type = SnapType.Point; Point = pt;
 }
        /// <summary>
        /// スナップ処理を実行
        /// </summary>
        private static SnapResult ExecuteSnap(MapPoint input, Esri.ArcGISRuntime.Geometry.Geometry snapToGeometry, SnapType type, double vertexSnapTolerance)
        {
            //スナップ対象として頂点を使用する場合
            if ((type & SnapType.Vertex) == SnapType.Vertex)
            {
                //もっとも近いスナップ対象のジオメトリの頂点(スナップ対象の頂点)を取得
                var vertexResult = GeometryEngine.NearestVertex(snapToGeometry, input);

                //スナップ対象の頂点までの距離がスナップ許容値内の場合は値を返す
                if (vertexResult.Distance <= vertexSnapTolerance)
                {
                    return new SnapResult()
                    {
                        Result = vertexResult,
                        Type = SnapType.Vertex
                    };
                }
            }

            //スナップ対象として線分を使用する場合
            if ((type & SnapType.Segment) == SnapType.Segment)
            {
                //内部交差を避けるためポリゴンの外周をポリラインに変換
                var outline = snapToGeometry;
                if (outline is Polygon)
                {
                    outline = new Polyline(((Polygon)outline).Parts, outline.SpatialReference);
                }

                //もっとも近いスナップ対象の線分上の位置を取得
                var segmentResult = GeometryEngine.NearestCoordinate(outline, input);

                //スナップ対象の線分上の位置までの距離がスナップ許容値内の場合は値を返す
                if (segmentResult.Distance <= vertexSnapTolerance)
                {
                    return new SnapResult()
                    {
                        Result = segmentResult,
                        Type = SnapType.Segment
                    };
                }

            }

            //検索結果までの距離がスナップ許容値外の場合は結果を返さない
            return null;
        }
Exemplo n.º 8
0
        public static Vector2 GetSnapPoint(SnapType type, int width = 16, int height = 16)
        {
            Vector2  result;
            Vector2  point    = Main.MouseWorld.ToTileCoordinates().ToVector2() * 16;
            SnapType snapType = type;

            if (Main.LocalPlayer.gravDir == -1f)
            {
                switch (snapType)
                {
                case SnapType.TopLeft:
                    snapType = SnapType.BottomLeft;
                    break;

                case SnapType.TopCenter:
                    snapType = SnapType.BottomCenter;
                    break;

                case SnapType.TopRight:
                    snapType = SnapType.BottomRight;
                    break;

                case SnapType.BottomLeft:
                    snapType = SnapType.TopLeft;
                    break;

                case SnapType.BottomCenter:
                    snapType = SnapType.TopCenter;
                    break;

                case SnapType.BottomRight:
                    snapType = SnapType.TopRight;
                    break;
                }
            }
            switch (snapType)
            {
            case SnapType.TopLeft:
                break;

            case SnapType.TopCenter:
                point = point.Offset(width / 2, 0);
                break;

            case SnapType.TopRight:
                point = point.Offset(width, 0);
                break;

            case SnapType.LeftCenter:
                point = point.Offset(0, height / 2);
                break;

            case SnapType.Center:
                point = point.Offset(width / 2, height / 2);
                break;

            case SnapType.RightCenter:
                point = point.Offset(width, height / 2);
                break;

            case SnapType.BottomLeft:
                point = point.Offset(0, height);
                break;

            case SnapType.BottomCenter:
                point = point.Offset(width / 2, height);
                break;

            case SnapType.BottomRight:
                point = point.Offset(width, height);
                break;
            }
            if (Main.LocalPlayer.gravDir == -1f)
            {
                point.Y = (float)Main.screenHeight - point.Y;
                //point.Y -= height * 16;
            }
            result = point;
            return(result);
        }
Exemplo n.º 9
0
 public static void removeFromActiveSnaps(SnapType st)
 {
     activeSnaps.Remove(st);
 }
Exemplo n.º 10
0
        /// <summary>
        /// Initializes a new instance of the MapAround.UI.WinForms.SnapInfo
        /// which describes a snapping to the points and the segments.
        /// </summary>
        public Snapper(IEnumerable<ICoordinate> points, IEnumerable<Segment> segments)
        {
            _snapType = SnapType.PointsAndSegments;
            _snapMethod = this.pointsAndSegmentsSnapMethod;

            foreach (ICoordinate c in points)
                _points.Add((ICoordinate)c.Clone());

            foreach (Segment s in segments)
                _segments.Add((Segment)s.Clone());
        }
Exemplo n.º 11
0
 /// <summary>
 /// Initializes a new instance of the MapAround.UI.WinForms.SnapInfo
 /// which describes a snapping by the custom method.
 /// </summary>
 public Snapper(IEnumerable<ICoordinate> points, SnapMethodDelegate snapMethod)
 {
     _snapType = SnapType.PointsAndSegments;
     _snapMethod = snapMethod;
 }
Exemplo n.º 12
0
        /// <summary>
        /// Initializes a new instance of the MapAround.UI.WinForms.SnapInfo
        /// which describes a snapping to the segments.
        /// </summary>
        public Snapper(IEnumerable<Segment> segments)
        {
            _snapType = SnapType.Segments;
            _snapMethod = this.segmentsSnapMethod;

            foreach (Segment s in segments)
                _segments.Add((Segment)s.Clone());
        }
Exemplo n.º 13
0
        /// <summary>
        /// Initializes a new instance of the MapAround.UI.WinForms.SnapInfo
        /// which describes a snapping to the points.
        /// </summary>
        public Snapper(IEnumerable<ICoordinate> points)
        {
            _snapType = SnapType.Points;
            _snapMethod = this.pointsSnapMethod;

            foreach(ICoordinate c in points)
                _points.Add((ICoordinate)c.Clone());
        }
Exemplo n.º 14
0
        /// <summary>
        /// Initializes a new instance of the MapAround.UI.WinForms.SnapInfo
        /// which describes a snapping to the regular grid.
        /// </summary>
        public Snapper(ICoordinate gridOrigin, double gridCellSize)
        {
            _snapType = SnapType.Grid;
            _snapMethod = this.gridSnapMethod;

            _gridCellSize = gridCellSize;
            _gridOrigin = gridOrigin;
        }
Exemplo n.º 15
0
        /// <summary>
        /// Make control points snap to price
        /// </summary>
        /// <param name="snap"></param>
        public void SetSnapPrice(SnapType snap)
        {
            if (snap == SnapType.Price)
            {
                FormulaChart  BackChart = Manager.Canvas.Chart;
                IDataProvider idp       = BackChart.DataProvider;
                int           i1        = 0;
                int           i2        = 1;
                if (ControlPointNum == 1)
                {
                    i2 = 0;
                }

                int Bar1 = BackChart.DateToIndex(ControlPoints[i1].X);
                int Bar2 = BackChart.DateToIndex(ControlPoints[i2].X);
                if (Bar1 > Bar2)
                {
                    Swap(ref Bar1, ref Bar2);
                }

                FormulaData fd  = Area.FormulaDataArray[0];
                double[]    dd1 = fd["L"];
                if (dd1 == null)
                {
                    dd1 = fd.Data;
                }
                double[] dd2 = fd["H"];
                if (dd2 == null)
                {
                    dd2 = fd.Data;
                }
                if (Bar1 >= dd1.Length)
                {
                    Bar1 = dd1.Length - 1;
                }
                if (Bar2 >= dd1.Length)
                {
                    Bar2 = dd1.Length - 1;
                }

                float A = float.MaxValue;
                float B = float.MinValue;
                for (int i = Bar1; i <= Bar2; i++)
                {
                    A = Math.Min(A, (float)dd1[i]);
                    B = Math.Max(B, (float)dd2[i]);
                }
                if (ControlPointNum > 1)
                {
                    if (ControlPoints[0].Y < ControlPoints[1].Y)
                    {
                        Swap(ref A, ref B);
                    }
                    ControlPoints[0].Y = B;
                    ControlPoints[1].Y = A;
                }
                else
                {
                    if (ControlPoints[0].Y < A)
                    {
                        ControlPoints[0].Y = A;
                    }
                    else if (ControlPoints[0].Y > B)
                    {
                        ControlPoints[0].Y = B;
                    }
                }
            }
        }
Exemplo n.º 16
0
 public static void addToActiveSnaps(SnapType st)
 {
     activeSnaps.Add(st);
 }
Exemplo n.º 17
0
 public SnapResult FindSnappedPositionAndTime(Vector2 screenSpacePosition, SnapType snapType = SnapType.Grids) => new SnapResult(screenSpacePosition, 0);
Exemplo n.º 18
0
 protected void createAndPlaceSnapObj(Vector3 start, Vector3 end, SnapType st)
 {
     createAndPlaceSnapObj(start, end);
     newSnapObj.GetComponent <SnapObject_GenLine>().setType(st);
 }
Exemplo n.º 19
0
 public SnapResult(ISnapSegment seg, Vector3f hitScene)
 {
     FrameS = seg.GetHitFrameS(hitScene); Type = SnapType.Segment; Segment = seg;
 }
Exemplo n.º 20
0
	static void LoadPrefs() {
		if (prefsLoaded) return;
		prefsLoaded   = true;
		hideMeshes    = EditorPrefs.GetBool ("Ferr_hideMeshes", true);
		pathScale     = EditorPrefs.GetFloat("Ferr_pathScale",  1   );
		updateTerrainSkipFrames = EditorPrefs.GetInt("Ferr_updateTerrainAlways", 0);
		snapMode      = (SnapType)EditorPrefs.GetInt("Ferr_snapMode", (int)SnapType.SnapRelative);
		ppu           = EditorPrefs.GetInt  ("Ferr_ppu", 64);
		smoothTerrain = EditorPrefs.GetBool ("Ferr_smoothTerrain", false);
		smartSnapDist = EditorPrefs.GetFloat("Ferr_smartSnapDist", 0.4f);
	}
Exemplo n.º 21
0
 public SnapResult FindSnappedPositionAndTime(Vector2 screenSpacePosition, SnapType snapType = SnapType.All) =>
 new SnapResult(screenSpacePosition, beatSnapProvider.SnapTime(getTimeFromPosition(Content.ToLocalSpace(screenSpacePosition))));
Exemplo n.º 22
0
        public override SnapResult FindSnappedPositionAndTime(Vector2 screenSpacePosition, SnapType snapType = SnapType.All)
        {
            var result = base.FindSnappedPositionAndTime(screenSpacePosition, snapType);

            result.ScreenSpacePosition.X = screenSpacePosition.X;

            if (snapType.HasFlagFast(SnapType.Grids))
            {
                if (distanceSnapGrid.IsPresent && distanceSnapGrid.GetSnappedPosition(result.ScreenSpacePosition) is SnapResult snapResult &&
                    Vector2.Distance(snapResult.ScreenSpacePosition, result.ScreenSpacePosition) < distance_snap_radius)
                {
                    result = snapResult;
                }
            }

            return(result);
        }