Ejemplo n.º 1
0
 public StrokeDto GetStroke(int userId, StrokeType strokeType = StrokeType.Forehand, StrokeAngle strokeAngle = StrokeAngle.Front)
 {
     //todo:get from azure
     return(new StrokeDto());
 }
Ejemplo n.º 2
0
        private IEnumerable <Line> CreateStrokesOnMainPolylineSegment(
            Point3d currentPoint, Point3d previousPoint, double scale)
        {
            var segmentStrokeDependencies = new List <Line>();

            var segmentVector          = currentPoint - previousPoint;
            var segmentLength          = segmentVector.Length;
            var perpendicular          = segmentVector.GetPerpendicularVector().Negate();
            var distanceAtSegmentStart = _mainPolyline.GetDistAtPoint(previousPoint);

            var overflowIndex = 0;

            // Индекс штриха. Возможные значения - 0, 1, 2
            var strokeIndex          = 0;
            var sumDistanceAtSegment = 0.0;

            while (true)
            {
                overflowIndex++;
                var distance = 0.0;
                if (Math.Abs(sumDistanceAtSegment) < 0.0001)
                {
                    if (FirstStrokeOffset == GroundLineFirstStrokeOffset.ByHalfSpace)
                    {
                        distance = Space / 2.0 * scale;
                    }
                    else if (FirstStrokeOffset == GroundLineFirstStrokeOffset.BySpace)
                    {
                        distance = Space * scale;
                    }
                    else
                    {
                        distance = StrokeOffset * scale;
                    }
                }
                else
                {
                    if (strokeIndex == 0)
                    {
                        distance = Space * scale;
                    }

                    if (strokeIndex == 1 || strokeIndex == 2)
                    {
                        distance = StrokeOffset * scale;
                    }
                }

                if (strokeIndex == 2)
                {
                    strokeIndex = 0;
                }
                else
                {
                    strokeIndex++;
                }

                sumDistanceAtSegment += distance;

                if (sumDistanceAtSegment >= segmentLength)
                {
                    break;
                }

                var firstStrokePoint = _mainPolyline.GetPointAtDist(distanceAtSegmentStart + sumDistanceAtSegment);
                var helpPoint        =
                    firstStrokePoint + (segmentVector.Negate().GetNormal() * StrokeLength * scale * Math.Cos(StrokeAngle.DegreeToRadian()));
                var secondStrokePoint =
                    helpPoint + (perpendicular * StrokeLength * scale * Math.Sin(StrokeAngle.DegreeToRadian()));
                var stroke = new Line(firstStrokePoint, secondStrokePoint);
                SetImmutablePropertiesToNestedEntity(stroke);

                // индекс сегмента равен "левой" вершине
                segmentStrokeDependencies.Add(stroke);

                if (overflowIndex >= 1000)
                {
                    break;
                }
            }

            return(segmentStrokeDependencies);
        }
Ejemplo n.º 3
0
 public StrokeDto GetStroke(int userId, StrokeType strokeType = StrokeType.Forehand, StrokeAngle strokeAngle = StrokeAngle.Front)
 {
     //todo:get from azure
     return new StrokeDto();
 }