示例#1
0
 private void ClearEventHandler()
 {
     UserInputs[0].PointsList.Clear();
     CurvesElements.Clear();
     Model = new ArticulatedModel();
     Render();
 }
示例#2
0
        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();
        }
示例#3
0
        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();
        }