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; } } }