示例#1
0
        static bool FindCustomSnappingPoints(Vector3 startWorldPoint, Vector3 currentWorldPoint, Grid worldSlideGrid, int contextIndex, List <Vector3> foundWorldspacePoints)
        {
            if (!s_SnappingContext.TryGetValue(contextIndex, out var snappingContext))
            {
                s_SnappingContext[contextIndex] = snappingContext = new SnappingContext();
            }

            snappingContext.Clear();
            s_DrawSurfaceSnapEvents.Clear();
            s_DrawEdgeSnapEvents.Clear();
            s_DrawVertexSnapEvents.Clear();

            var edgeSnappingActive    = Snapping.EdgeSnappingActive;
            var vertexSnappingActive  = Snapping.VertexSnappingActive;
            var surfaceSnappingActive = Snapping.SurfaceSnappingActive;

            if (!edgeSnappingActive &&
                !vertexSnappingActive &&
                !surfaceSnappingActive)
            {
                return(false);
            }

            var surfaceSnapEvents = surfaceSnappingActive ? snappingContext.s_AllSurfaceSnapEvents : null;
            var edgeSnapEvents    = edgeSnappingActive    ? snappingContext.s_AllEdgeSnapEvents    : null;
            var vertexSnapEvents  = vertexSnappingActive  ? snappingContext.s_AllVertexSnapEvents  : null;

            var selection = Selection.gameObjects;

            FindClosestSnapPointsToPlane(selection, startWorldPoint, currentWorldPoint, worldSlideGrid, kArbitrarySnapDistance, surfaceSnapEvents, edgeSnapEvents, vertexSnapEvents);

            snappingContext.CollectAllSnapPoints(foundWorldspacePoints);
            return(true);
        }
示例#2
0
        const float kArbitrarySnapDistance = 5; // TODO: use fixed step when no grid snapping, otherwise grid step size

        static bool FindCustomSnappingRayPoints(Vector3 worldRayStart, Vector3 worldRayDirection, int contextIndex, List <Vector3> foundWorldspacePoints)
        {
            if (!s_SnappingContext.TryGetValue(contextIndex, out var snappingContext))
            {
                s_SnappingContext[contextIndex] = snappingContext = new SnappingContext();
            }

            snappingContext.Clear();
            s_DrawSurfaceSnapEvents.Clear();
            s_DrawEdgeSnapEvents.Clear();
            s_DrawVertexSnapEvents.Clear();

            var edgeSnappingActive    = Snapping.EdgeSnappingActive;
            var vertexSnappingActive  = Snapping.VertexSnappingActive;
            var surfaceSnappingActive = Snapping.SurfaceSnappingActive;

            if (!edgeSnappingActive && !vertexSnappingActive && !surfaceSnappingActive)
            {
                return(false);
            }

            var selection = Selection.gameObjects;
            var step      = worldRayDirection * kArbitrarySnapDistance;

            FindSnapPointsAlongRay(selection, worldRayStart, step,
                                   surfaceSnappingActive ? snappingContext.s_AllSurfaceSnapEvents : null,
                                   edgeSnappingActive    ? snappingContext.s_AllEdgeSnapEvents    : null,
                                   vertexSnappingActive  ? snappingContext.s_AllVertexSnapEvents  : null);

            snappingContext.CollectAllSnapPoints(foundWorldspacePoints);
            return(true);
        }