コード例 #1
0
        public void Execute(int index)
        {
            var roadEntity = NonIntersectingRoadEntities[index];

            RoadCenterLineDataComponents[roadEntity] = new RoadCenterLineData
            {
                StreetId          = index,
                StartIntersection = Entity.Null,
                EndIntersection   = Entity.Null
            };

            var splineEntity     = NonIntersectingSplineEntities[index];
            var splineBuffer     = SplineSampleBuffers[splineEntity].Reinterpret <RigidTransform>();
            var centerLineBuffer = RoadCenterLineSampleBuffers[roadEntity].Reinterpret <RigidTransform>();

            centerLineBuffer.CopyFrom(splineBuffer);
        }
コード例 #2
0
        public void Execute(int index)
        {
            var range      = RoadSplineRanges[index];
            var roadEntity = RoadEntities[index];

            RoadCenterLineDataComponents[roadEntity] = new RoadCenterLineData
            {
                StreetId          = range.StreetId,
                StartIntersection = range.StartIntersectionEntity,
                EndIntersection   = range.EndIntersectionEntity
            };

            var splineBuffer = RoadSplineSampleBuffers[range.SplineEntity].Reinterpret <RigidTransform>();
            var roadBuffer   = RoadCenterLineSampleBuffers[roadEntity].Reinterpret <RigidTransform>();

            // Get nearest integer spline indices
            var firstIntegerIdx = (int)math.floor(range.StartIndex + 1f);
            var lastIntegerIdx  = (int)math.ceil(range.EndIndex - 1f);

            // Add first point if between spline indices
            if (!Utilities.GeometryUtility.ApproximatelyEqual(range.StartIndex, firstIntegerIdx))
            {
                roadBuffer.Add(SplineUtility.LerpTransform(
                                   splineBuffer[firstIntegerIdx - 1],
                                   splineBuffer[firstIntegerIdx],
                                   range.StartIndex - (firstIntegerIdx - 1)));
            }

            // Intermediate points
            for (var i = firstIntegerIdx; i <= lastIntegerIdx; i++)
            {
                roadBuffer.Add(splineBuffer[i]);
            }

            // Add last point if between spline indices
            if (!Utilities.GeometryUtility.ApproximatelyEqual(range.EndIndex, lastIntegerIdx))
            {
                roadBuffer.Add(SplineUtility.LerpTransform(
                                   splineBuffer[lastIntegerIdx],
                                   splineBuffer[lastIntegerIdx + 1],
                                   range.EndIndex - lastIntegerIdx));
            }
        }
コード例 #3
0
 static Entity GetIntersection(RoadCenterLineData data, IntersectionRoadDirection direction)
 {
     return(direction == IntersectionRoadDirection.Outgoing ? data.EndIntersection : data.StartIntersection);
 }