csUSDomainPlugin.Effects.Util.DirectionTool.UpdateModelShape C# (CSharp) Method

UpdateModelShape() private method

private UpdateModelShape ( ) : void
return void
        private void UpdateModelShape()
        {
            var rdCenter = new MapPoint(5.387206, 52.155174);
//            var rdCenter = new MapPoint(155000,  463000);
            var start = new WebMercator().ToGeographic(Start.Mp) as MapPoint;
//            rdCenter = new WebMercator().FromGeographic(rdCenter) as MapPoint;

            var srcSr = new SpatialReference(28992);
            var targetSr = new SpatialReference(4326);
            var src = ProjectionInfo.FromEpsgCode(srcSr.WKID);
            var dest = ProjectionInfo.FromEpsgCode(targetSr.WKID);
            var radAngle = (float)(GetAngle(Start.Mp, Finish.Mp) * (Math.PI / 180f));
            
            foreach (var graphic in EffectsModelShapes)
            {
                graphic.SetZIndex(0);
                var baseGraphic = graphic.Attributes["base"] as Graphic;
                var basePoly = baseGraphic.Geometry as Polygon;
                var clone = basePoly.Clone();
                clone.SpatialReference = targetSr;

                List<PointCollection> newRings = new List<PointCollection>();
                foreach (var linestring in clone.Rings)
                {

                    foreach (var point in linestring)
                    {
//                        RotatePoint(point, rdCenter, radAngle);
                        RotatePoint(point, new MapPoint(0,0), radAngle);
                    }

                    var projectedPoints = linestring.SelectMany(c => new double[2] { c.X + 155000, c.Y + 463000 }).ToArray();
                    Reproject.ReprojectPoints(projectedPoints, null, src, dest, 0, projectedPoints.Length / 2);
                    var projectedLineString = new PointCollection(Enumerable.Range(0, projectedPoints.Length / 2).Select(i => new MapPoint(projectedPoints[i * 2], projectedPoints[(i * 2) + 1] , targetSr)));
                    newRings.Add(projectedLineString);
                }
                clone.Rings = new ObservableCollection<PointCollection>(newRings);

                clone.Offset(start.X - rdCenter.X, start.Y - rdCenter.Y);

                graphic.Geometry = clone;
            }
        }