Beispiel #1
0
        private void Btn_DrawSelect_Click(object sender, RoutedEventArgs e)
        {
            int selectIndex = LV_trajectoryInfo.SelectedIndex;

            if (LV_trajectoryInfo.SelectedIndex < 0)
            {
                MessageBox.Show("please select items");
                return;
            }

            int    Igen = TrajectoryInfoDataCollection[selectIndex].Gen;
            int    Iseg = TrajectoryInfoDataCollection[selectIndex].Segment;
            int    Iobj = TrajectoryInfoDataCollection[selectIndex].Object;
            string Itra = TrajectoryInfoDataCollection[selectIndex].Trajectory;

            if (Itra == "Abs")
            {
                demoTask.generations[Igen].segments[Iseg].AbsoluteTrajectory.DrawOn(mat, new Point(0, 0), demoTask.environment.DemoObject[Iobj].Color);
            }
            else if (Itra == "Rel")
            {
                demoTask.generations[Igen].segments[Iseg].RelativeTrajectory[Iobj].DrawOn(mat, demoTask.environment.DemoObject[Iobj].Position, demoTask.environment.DemoObject[Iobj].Color, 4, 1);
            }

            image1.Source = MyInvoke.MatToBitmap(mat); //BitmapSourceConvert.ToBitmapSource(mat);
        }
Beispiel #2
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Mat mat = new Mat(500, 500, DepthType.Cv8U, 3);

            myChart chart = new myChart();

            myChart.Table table = new myChart.Table();
            table.rect_outerBox = new System.Drawing.Rectangle(10, 10, 480, 480);
            table.rect_innerBox = new System.Drawing.Rectangle(30, 30, 440, 440);
            table.row_count     = 3;
            table.column_count  = 4;
            chart.drawTable(mat, table);

            myChart.Value value = new myChart.Value();
            value.col = 2;
            value.row = 3;
            chart.drawValue(mat, table, value);

            //Random rnd = new Random();
            //Task.Run(() =>
            //{
            //    while (true)
            //    {
            //        MyInvoke.setToZero(ref mat);
            //        CvInvoke.Circle(mat, new Point((int)(rnd.NextDouble() * 500.0), (int)(rnd.NextDouble() * 500.0)), 5, new MCvScalar(200, 200, 200), -1);
            //        this.Dispatcher.Invoke((Action)(() => { image_main.Source = MyInvoke.MatToBitmap(mat); }));
            //    }

            //});
            image_main.Source = MyInvoke.MatToBitmap(mat);
        }
Beispiel #3
0
 private void ImageUpdate()
 {
     MyInvoke.setToZero(ref mat);
     //mat.SetTo(new byte[600 * 600 * 3]);
     MyInvoke.AddLayer(mat, mat_layer_drag);
     demoTask?.drawObjectOn(mat, objectLayerKey);
     image1.Source = MyInvoke.MatToBitmap(mat); //BitmapSourceConvert.ToBitmapSource(mat);
 }
Beispiel #4
0
        private void Btn_countKeyPoint_Click(object sender, RoutedEventArgs e)
        {
            int selectIndex = LV_trajectoryInfo.SelectedIndex;

            if (LV_trajectoryInfo.SelectedIndex < 0)
            {
                MessageBox.Show("please select items");
                return;
            }
            int    Igen = TrajectoryInfoDataCollection[selectIndex].Gen;
            int    Iseg = TrajectoryInfoDataCollection[selectIndex].Segment;
            int    Iobj = TrajectoryInfoDataCollection[selectIndex].Object;
            string Itra = TrajectoryInfoDataCollection[selectIndex].Trajectory;

            demoTask.ZeroAllKeys();
            for (int G = 0; G < demoTask.generations.Count() - 1; G++)//generations 會多一 ,因為示範結束就++,但還沒示範就進到這裡了
            {
                if (G == Igen)
                {
                    continue;
                }
                for (int S = 0; S < demoTask.generations[0].segments.Count(); S++)//all generations have same count of segments
                {
                    if (Itra == "Abs")
                    {
                        CompareTwoTrajectory(
                            demoTask.generations[Igen].segments[S].AbsoluteTrajectory,
                            demoTask.generations[G].segments[S].AbsoluteTrajectory,
                            20);
                    }
                    else if (Itra == "Rel")
                    {
                        CompareTwoTrajectory(
                            demoTask.generations[Igen].segments[S].RelativeTrajectory[Iobj],
                            demoTask.generations[G].segments[S].RelativeTrajectory[Iobj],
                            20);
                    }
                }
            }

            //draw
            int threshold = demoTask.generations.Count() - 2;// 示範完會++ 所以少一,互相比較,所以若N代又要全部都是key 會需要N-1個(比喻:雙循環賽 全贏)

            if (Itra == "Abs")
            {
                demoTask.generations[Igen].segments[0].AbsoluteTrajectory.DrawKeyOn(mat, new Point(0, 0), threshold, new MCvScalar(55, 5, 200));
            }
            else if (Itra == "Rel")
            {
                demoTask.generations[Igen].segments[0].RelativeTrajectory[Iobj].DrawKeyOn(mat, demoTask.environment.DemoObject[Iobj].Position, threshold, new MCvScalar(55, 5, 200), 4, 1);
            }

            image1.Source = MyInvoke.MatToBitmap(mat); //BitmapSourceConvert.ToBitmapSource(mat);
        }
Beispiel #5
0
 private void Btn_DrawChecked_Click(object sender, RoutedEventArgs e)
 {
     for (int i = 0; i < TrajectoryInfoDataCollection.Count(); i++)
     {
         if (TrajectoryInfoDataCollection[i].isChecked == true)
         {
             int    Igen = TrajectoryInfoDataCollection[i].Gen;
             int    Iseg = TrajectoryInfoDataCollection[i].Segment;
             int    Iobj = TrajectoryInfoDataCollection[i].Object;
             string Itra = TrajectoryInfoDataCollection[i].Trajectory;
             if (Itra == "Abs")
             {
                 demoTask.generations[Igen].segments[Iseg].AbsoluteTrajectory.DrawOn(mat, new Point(0, 0), demoTask.environment.DemoObject[Iobj].Color);
             }
             else if (Itra == "Rel")//relative才會有 誰為原點的問題
             {
                 int interactObject = demoTask.generations[Igen].segments[Iseg].InteractObjectIndex;
                 //這裡的color要注意,因為可能是別人在動,只是以自己為原點,所以不能畫 自己顏色的路徑,會誤會。
                 demoTask.generations[Igen].segments[Iseg].RelativeTrajectory[Iobj].DrawOn(mat, demoTask.environment.DemoObject[Iobj].Position, demoTask.environment.DemoObject[interactObject].Color, 4, 1);
             }
         }
     }
     image1.Source = MyInvoke.MatToBitmap(mat); //BitmapSourceConvert.ToBitmapSource(mat);
 }
Beispiel #6
0
        private void Btn_InductiveSegment_Click(object sender, RoutedEventArgs e)
        {
            //按下 開始計算 ,就不要這次路徑了
            demoTask.environment.AbortThisSeg();
            ClearBoard();


            demoTask.ZeroAllKeys();
            int segmentIndex = 0;

            for (; segmentIndex < demoTask.generations[0].segments.Count(); segmentIndex++)
            {
                for (int G = 1; G < demoTask.generations.Count() - 1; G++)//generations 會多一 ,因為示範結束就++,但還沒示範就進到這裡了
                {
                    //ABS 比較
                    CompareTwoTrajectory(
                        demoTask.generations[0].segments[segmentIndex].AbsoluteTrajectory,
                        demoTask.generations[G].segments[segmentIndex].AbsoluteTrajectory,
                        absToleranceRange,
                        ignoreStartValue);
                    //Rel 比較
                    for (int O = 0; O < demoTask.environment.DemoObject.Count(); O++)
                    {
                        CompareTwoTrajectory(
                            demoTask.generations[0].segments[segmentIndex].RelativeTrajectory[O],
                            demoTask.generations[G].segments[segmentIndex].RelativeTrajectory[O],
                            relToleranceRange,
                            ignoreStartValue);
                    }
                    //注意!! key path 只存到 generations[0]
                }



                //draw keyPath on UI
                int threshold = demoTask.generations.Count() - 2;// 示範完會++ 所以少一,互相比較,所以若N代又要全部都是key 會需要N-1個(比喻:雙循環賽 全贏)
                demoTask.generations[0].segments[segmentIndex].AbsoluteTrajectory.DrawKeyOn(mat, new Point(0, 0), threshold, new MCvScalar(55, 5, 200));
                for (int O = 0; O < demoTask.environment.DemoObject.Count(); O++)
                {
                    demoTask.generations[0].segments[segmentIndex].RelativeTrajectory[O].DrawKeyOn(mat, demoTask.environment.DemoObject[O].Position, threshold, new MCvScalar(55, 5, 200), 4, 1);
                }

                int interactObject = demoTask.generations[0].segments[segmentIndex].InteractObjectIndex;

                List <Point> path = new List <Point>();
                for (int k = 0; k < demoTask.generations[0].segments[segmentIndex].AbsoluteTrajectory.PathKeyMatch.Count(); k++)//PathKeyCount.Count() 都會一樣
                {
                    if (demoTask.generations[0].segments[segmentIndex].AbsoluteTrajectory.PathKeyMatch[k] >= threshold)
                    {
                        path.Add(demoTask.generations[0].segments[segmentIndex].AbsoluteTrajectory.PathList[k]);
                    }
                    else
                    {    //RelativeTrajectory 有多個物件
                        for (int O = 0; O < demoTask.environment.DemoObject.Count(); O++)
                        {
                            if (demoTask.generations[0].segments[segmentIndex].RelativeTrajectory[O].PathKeyMatch[k] >= threshold)
                            {
                                Point Pr = new Point(demoTask.generations[0].segments[segmentIndex].RelativeTrajectory[O].PathList[k].X + demoTask.environment.DemoObject[O].Position.X,
                                                     demoTask.generations[0].segments[segmentIndex].RelativeTrajectory[O].PathList[k].Y + demoTask.environment.DemoObject[O].Position.Y);
                                path.Add(Pr);
                                break;
                            }
                        }
                    }
                }

                if (path.Count() == 0)
                {
                    MessageBox.Show("No key path found!");
                    return;
                }
                //draw
                CvInvoke.Line(mat, demoTask.environment.DemoObject[interactObject].Position, path[0], demoTask.environment.DemoObject[interactObject].Color, 2);
                for (int i = 1; i < path.Count(); i++)
                {
                    CvInvoke.Line(mat, path[i - 1], path[i], demoTask.environment.DemoObject[interactObject].Color, 2);
                }
            }
            // ImageUpdate();
            image1.Source = MyInvoke.MatToBitmap(mat); //BitmapSourceConvert.ToBitmapSource(mat);
        }