public StrokeDto GetStroke(int userId, StrokeType strokeType = StrokeType.Forehand, StrokeAngle strokeAngle = StrokeAngle.Front) { //todo:get from azure return(new StrokeDto()); }
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); }
public StrokeDto GetStroke(int userId, StrokeType strokeType = StrokeType.Forehand, StrokeAngle strokeAngle = StrokeAngle.Front) { //todo:get from azure return new StrokeDto(); }