public void Load(string json)
        {
            var forArticulatedCharacter = JsonConvert.DeserializeObject <List <ParseObject> >(json);
            //ArticulatedFigure = new StickConnection(forArticulatedCharacter.AnchorPoint.X, forArticulatedCharacter.AnchorPoint.Y, forArticulatedCharacter.DegreesAndLengths[0].X, forArticulatedCharacter.DegreesAndLengths[0].Y);
            //for (int i = 1; i < forArticulatedCharacter.DegreesAndLengths.Count; i++)
            //{
            //    ArticulatedFigure.AddLastChild(forArticulatedCharacter.DegreesAndLengths[i].X, forArticulatedCharacter.DegreesAndLengths[i].Y);
            //}
            double meanX = forArticulatedCharacter.Sum(o => o.position[0]) / forArticulatedCharacter.Count;
            double meanY = forArticulatedCharacter.Sum(o => o.position[1]) / forArticulatedCharacter.Count;

            meanX = 0;
            meanY = 0;
            double scale = 10;
            var    forArticulatedCharacterAlined = forArticulatedCharacter.Select(o =>
            {
                o.position[0] -= meanX;
                o.position[1] -= meanY;

                o.position[0] *= scale;
                o.position[1] *= scale;
                o.length      *= scale;

                o.position[0] += meanX;
                o.position[1] += meanY;

                return(o);
            });

            foreach (var parseObject in forArticulatedCharacterAlined)
            {
                double centerScreenWidth  = 1920 / 4;
                double centerScreenHeight = 1080 / 4;
                switch (parseObject.type)
                {
                case "Gear":
                    Components.Add(new Gear(centerScreenWidth + parseObject.position[0], centerScreenHeight + parseObject.position[1], parseObject.length, parseObject.orientation[2]));
                    break;

                case "Stick":
                    StickConfiguration config = new StickConfiguration()
                    {
                        Length   = parseObject.length,
                        Length2  = 5,
                        Rotation = 360 - parseObject.orientation[2]
                    };

                    config.Anchor = new Point(
                        centerScreenWidth + ((parseObject.position[0])),
                        centerScreenHeight + ((parseObject.position[1])));

                    Components.Add(new Stick(config));
                    break;

                default:
                    break;
                }
            }
        }
        public void Load(AssemblySolver.CurveAssemblyAndAlignments ass)
        {
            double xOffset = 800 / 2;
            double yOffset = 450 / 2;

            xOffset = Math.Abs(ass.c_a.Assembly.Components.Min(o =>
            {
                if (o.type.Contains("Gear"))
                {
                    return((o.position[0] - o.length) * 10);
                }
                else if (o.type.Contains("Stick"))
                {
                    return((o.position[0] + o.length * Math.Cos(o.orientation[2] * Math.PI / 180)) * 10);
                }
                return(9999);
            })) + 5;

            yOffset = Math.Abs(ass.c_a.Assembly.Components.Min(o =>
            {
                if (o.type.Contains("Gear"))
                {
                    return((o.position[1] - o.length) * 10);
                }
                else if (o.type.Contains("Stick"))
                {
                    return((o.position[1] + o.length * Math.Sin(o.orientation[2] * Math.PI / 180)) * 10);
                }
                return(9999);
            })) + 5;
            double toflip = ass.ToFlip ? -1 : 1;
            var    forArticulatedCharacterAlined = ass.c_a.Assembly.Components.Select(o =>
            {
                //var x = (o.position[0]);
                //var y = (o.position[1])*toflip;

                //o.position[0] = (Math.Cos(-ass.RadRotation) * x -
                //                Math.Sin(-ass.RadRotation) * y) * ass.Scale + centerScreenWidth;
                //o.position[1] = (Math.Cos(-ass.RadRotation) * y +
                //               Math.Sin(-ass.RadRotation) * x) * ass.Scale + centerScreenHeight;
                o.position[0] = o.position[0] * 10 + xOffset;
                o.position[1] = o.position[1] * 10 + yOffset;

                o.length *= 10;
                //o.length *= ass.Scale;
                //o.orientation[2] = (360 + o.orientation[2] - ass.RadRotation * 180 / Math.PI) % 360;
                return(o);
            });

            //centerScreenWidth = 0;
            //centerScreenHeight = 0;
            foreach (var parseObject in forArticulatedCharacterAlined)
            {
                switch (parseObject.type)
                {
                case "Gear":
                    Components.Add(new Gear(parseObject.position[0], parseObject.position[1], parseObject.length, parseObject.orientation[2]));
                    break;

                case "Stick":
                    StickConfiguration config = new StickConfiguration()
                    {
                        Length   = parseObject.length,
                        Length2  = 1,
                        Rotation = parseObject.orientation[2]
                    };

                    config.Anchor = new Point(((parseObject.position[0])), ((parseObject.position[1])));

                    Components.Add(new Stick(config));
                    break;

                default:
                    break;
                }
            }
        }