private void ClearEventHandler() { UserInputs[0].PointsList.Clear(); CurvesElements.Clear(); Model = new ArticulatedModel(); Render(); }
public ViewportViewModel(IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; UserInputs = new List <Curve>() { new Curve() }; CanvasElements = new ObservableCollection <UIElement>(); eventAggregator.GetEvent <ClearEvent>().Subscribe(ClearEventHandler); eventAggregator.GetEvent <ToggleEditCurveEvent>().Subscribe(ToggleEditCurveEventHandler); eventAggregator.GetEvent <GenerateAssemblyEvent>().Subscribe(GenerateAssemblyEventHandler); //debug //GeneratedAssembly = new Assembly() //{ // Components = new List<IComponent>() // { // new Gear(300, 100), // new Stick(new StickConfiguration() // { // Anchor = new Point(250, 50), // Length = 50, // Length2 = 10, // Rotation = 50 // }) // } //}; Model = new ArticulatedModel(); //PinConnection.Connect(GeneratedAssembly.Components[0], GeneratedAssembly.Components[1], new Point(245, 45), new Point(315, 115)); //GeneratedAssembly.LoadConfiguration(); List <JsonConfigurationForArticulatedCharacter> configurations = LoadAll(); t.Tick += (sender, args) => { //Model.ApplyConfiguration(configurations[(counter++) % configurations.Count].Degrees.ToArray()); //Model.Apply(modelConfig); //GeneratedAssembly.Apply(assemblyConfig); Render(); }; eventAggregator.GetEvent <SolvedAssemblyEvent>().Subscribe(SolvedAssemblyEventHandler); Render(); }
private void SolvedAssemblyEventHandler(AssemblySolver.CurveAssemblyAndAlignments obj) { //transform curve with 0 mean var mean = obj.c_a.Curve.Points.Aggregate(new Point(), (m, p) => { m.X += p.X; m.Y += p.Y; return(m); }); mean.X /= 72; mean.Y /= 72; double toflip = 1;//obj.ToFlip ? -1 : 1; var pts = obj.c_a.Curve.Points.Select(point => { var x = (point.X - mean.X); var y = (point.Y - mean.Y) * toflip; var rotatedX = (Math.Cos(-obj.RadRotation) * x - Math.Sin(-obj.RadRotation) * y) * obj.Scale; var rotatedY = (Math.Cos(-obj.RadRotation) * y + Math.Sin(-obj.RadRotation) * x) * obj.Scale; return(new Point(rotatedX + obj.MeanPoint.X, rotatedY + obj.MeanPoint.Y)); } ).ToList(); //plot CurvesElements.Clear(); CurvesElements.AddRange(pts.Select(point => { var tran2 = new TranslateTransform(point.X - 2, point.Y - 2); return(new Ellipse() { Width = 4, Height = 4, Fill = Brushes.Green, RenderTransform = tran2 }); })); Model = new ArticulatedModel(); Model.Load(obj); //load from JsonForAssemblies //add to canvas Render(); }