예제 #1
0
        public void addRally(Rally rally)
        {
            string xpathExpr = "descendant::Spiel";

            XmlNode rootNode, newRally, rallyTree;

            // Get rallies tree for given set number
            rootNode  = xmlDoc.DocumentElement;
            rallyTree = rootNode.SelectSingleNode(xpathExpr);

            // Construct new rally node
            newRally = newRallyNode(rally);

            //xmlDoc.InsertAfter(newRally, lastRally);
            rallyTree.AppendChild(newRally);

            // Write rally to xml output file
            xmlDoc.Save(xmlDocLocation);
        }
예제 #2
0
        // this method updates a live rally which got changed in review mode
        public void updateReviewRally(Rally toChangeRally)
        {
            XmlNode rootNode, locCurrentNode;
            string  liveRallyStartTime = toChangeRally.Start_time.ToString();

            rootNode = xmlDoc.DocumentElement;

            string xpathExpr = "descendant::Spiel/Spielzug[@ID=" + liveRallyStartTime + "]";

            locCurrentNode = rootNode.SelectSingleNode(xpathExpr);



            if (locCurrentNode != null)
            {
                locCurrentNode.ParentNode.RemoveChild(locCurrentNode);
                addRally(toChangeRally);
            }
        }
예제 #3
0
        private XmlNode newRallyNode(Rally rally)
        {
            XmlNode newRally;
            XmlNode punktchance_aus_Defence;


            newRally = xmlDoc.CreateElement("Spielzug");

            // ID Attribute
            XmlAttribute spielzug_attribute = xmlDoc.CreateAttribute("ID");

            spielzug_attribute.InnerText = rally.Start_time.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Anfang Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Anfang");
            spielzug_attribute.InnerText = rally.Absolute_start_time.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Ende Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Ende");
            spielzug_attribute.InnerText = rally.Absolute_end_time.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Erfolg Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Erfolg");
            spielzug_attribute.InnerText = rally.Kill.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Smash Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Smash");
            spielzug_attribute.InnerText = rally.Smash.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Drop Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Drop");
            spielzug_attribute.InnerText = rally.Drop.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Spieler_An Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Spieler_An");
            spielzug_attribute.InnerText = rally.Reception_pos.Player.Name;
            newRally.Attributes.Append(spielzug_attribute);

            // Satz Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Satz");
            spielzug_attribute.InnerText = rally.CorrespondingSetNr.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Bigpoint Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Bigpoint");
            spielzug_attribute.InnerText = rally.BigPoint.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Spielstand Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Spielstand");
            spielzug_attribute.InnerText = configuration.Teama_score + ":" + configuration.Teamb_score;
            newRally.Attributes.Append(spielzug_attribute);

            // Timeout Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Timeout");
            spielzug_attribute.InnerText = rally.Timeout.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Standardseite Attribute
            spielzug_attribute           = xmlDoc.CreateAttribute("Standardseite");
            spielzug_attribute.InnerText = rally.Standardposition.ToString();
            newRally.Attributes.Append(spielzug_attribute);



            newRally.AppendChild(newPositionNode(rally.Service_pos, "Aufschlag"));
            newRally.AppendChild(newPositionNode(rally.Reception_pos, "Annahme"));
            newRally.AppendChild(newPositionNode(rally.Set_pos, "Zuspiel"));
            newRally.AppendChild(newPositionNode(rally.Takeoff_pos, "Anlauf"));
            newRally.AppendChild(newPositionNode(rally.Approach_pos, "Angriff"));
            newRally.AppendChild(newPositionNode(rally.Defence_pos, "Abwehr"));


            punktchance_aus_Defence = xmlDoc.CreateElement("Punktchance_aus_Defence");
            List <Person> defenceplayers = rally.Reception_pos.Defenceplayers;

            for (int i = 0; i < defenceplayers.Count; i++)
            {
                XmlNode      player           = xmlDoc.CreateElement("Player");
                XmlAttribute player_attribute = xmlDoc.CreateAttribute("Name");
                player_attribute.InnerText = defenceplayers[i].Name;
                player.Attributes.Append(player_attribute);
                punktchance_aus_Defence.AppendChild(player);
            }
            newRally.AppendChild(punktchance_aus_Defence);

            return(newRally);
        }
예제 #4
0
        private int[][] getActuallPositions(Rally rally)
        {
            int[][] positions = new int[6][];
            
            positions[0] = new int[2];
            positions[0][0] = rally.Service_pos.WorldX;
            positions[0][1] = rally.Service_pos.WorldY;

            positions[1] = new int[2];
            positions[1][0] = rally.Reception_pos.WorldX;
            positions[1][1] = rally.Reception_pos.WorldY;

            positions[2] = new int[2];
            positions[2][0] = rally.Set_pos.WorldX;
            positions[2][1] = rally.Set_pos.WorldY;

            positions[3] = new int[2];
            positions[3][0] = rally.Approach_pos.WorldX;
            positions[3][1] = rally.Approach_pos.WorldY;

            positions[4] = new int[2];
            positions[4][0] = rally.Takeoff_pos.WorldX;
            positions[4][1] = rally.Takeoff_pos.WorldY;

            positions[5] = new int[2];
            positions[5][0] = rally.Defence_pos.WorldX;
            positions[5][1] = rally.Defence_pos.WorldY;

            return positions;

        }
예제 #5
0
        /*
         * This function loads the Rally that is to be reviewed.
         * That is, it sets its frame position to 00:00, Enables the control buttons in the reviewer, etc
         */
        private void loadReviewingRally(Rally rally)
        {

            Game.Reviewing_rally = rally;

            if (Game.Reviewing_rally != null)
            {
                

                pictureBox_birdview.Refresh();

                updatePositionList();

                // Enable control buttons
                panel_reviewervideocontrols.Enabled = true;
                panel_reviewerpositions.Enabled = true;

                if (Game.Reviewing_rally.Finalized)
                    button_reviewerfinalized.Text = "Unfinalize";
                else
                    button_reviewerfinalized.Text = "Finalize";



                // Reception Player Radiobuttons
                if (Game.Reviewing_rally.Reception_pos.Player == configuration.Teama.Player1)
                    radioButton_reviewerplayer1.Checked = true;

                if (Game.Reviewing_rally.Reception_pos.Player == configuration.Teama.Player2)
                    radioButton_reviewerplayer2.Checked = true;

                if (Game.Reviewing_rally.Reception_pos.Player == configuration.Teamb.Player1)
                    radioButton_reviewerplayer3.Checked = true;

                if (Game.Reviewing_rally.Reception_pos.Player == configuration.Teamb.Player2)
                    radioButton_reviewerplayer4.Checked = true;

                radioButton_reviewerplayer1.Text = configuration.Teama.Player1.Name;
                radioButton_reviewerplayer2.Text = configuration.Teama.Player2.Name;
                radioButton_reviewerplayer3.Text = configuration.Teamb.Player1.Name;
                radioButton_reviewerplayer4.Text = configuration.Teamb.Player2.Name;


                // Defence player checkboxes:
                List<Person> defenceplayers = Game.Reviewing_rally.Reception_pos.Defenceplayers;
                checkBox_defenceplayer1.Checked = defenceplayers.Contains(configuration.Teama.Player1);
                checkBox_defenceplayer2.Checked = defenceplayers.Contains(configuration.Teama.Player2);
                checkBox_defenceplayer3.Checked = defenceplayers.Contains(configuration.Teamb.Player1);
                checkBox_defenceplayer4.Checked = defenceplayers.Contains(configuration.Teamb.Player2);

                


                // here we load the video for the first time in the reviewer at frame=0
                String video_name = Game.Reviewing_rally.Start_time.ToString(); 
                try
                {
                    capture_review = null; // delete the old one
                    String videopath = Program.getConfiguration().Mediafolderpath + @"\" + video_name + ".mpg";
                    this.capture_review = new Capture(videopath);
                    double fps = capture_review.GetCaptureProperty(CAP_PROP.CV_CAP_PROP_FPS); 
                    if (fps > 0)
                    {
                        review_timer_interval = (int)Math.Ceiling((1000 / fps)) - 3;
                        //timer_review_capture.Interval = interval;

                    }
                    else
                    {
                        fps = 25;
                        timer_review_capture.Interval = 40;
                    }
                }
                catch (NullReferenceException) { Console.WriteLine("unreadable video file"); }
                

                // Count the frames in the video
                double frame_number = 0;
                if (capture_review != null)
                {
                    //this.capture_review.SetCaptureProperty(CAP_PROP.CV_CAP_PROP_POS_FRAMES, 0);
                    while (capture_review.QueryFrame() != null)
                        frame_number++;

                    String videopath = Program.getConfiguration().Mediafolderpath + @"\" + video_name + ".mpg";
                    this.capture_review.Dispose();
                    this.capture_review = new Capture(videopath);

                    /*
                    if (capture_device_index != -1)
                    {
                        for (int i = 0; i < 10; i++)
                            capture_review.QueryFrame();
                        this.capture_review.SetCaptureProperty(CAP_PROP.CV_CAP_PROP_POS_FRAMES, 0);
                    }

                    */
                }
                trackBar_reviewervideo.Maximum = (int)frame_number;
                trackBar_reviewervideo.Value = 0;

                

                // If all the loading is done we display the right tab
                tabControl_main.SelectedIndex = 1;  // switch to review-tab


                // After we loaded all the stuff we can finally play the video:
               button_reviewerplaypause.Text = "Pause";

               timer_review_capture.Start();

               

                if (calibration != null)
                {
                    if (game.Reviewing_rally.Service_pos.ImageX != 0 && game.Reviewing_rally.Service_pos.ImageY != 0)
                    {
                        editing_position = 0;
                        savePosition(game.Reviewing_rally.Service_pos.ImageX, game.Reviewing_rally.Service_pos.ImageY);
                    }

                    if (game.Reviewing_rally.Defence_pos.ImageX != 0 && game.Reviewing_rally.Defence_pos.ImageY != 0)
                    {
                        editing_position = 5;
                        savePosition(game.Reviewing_rally.Defence_pos.ImageX, game.Reviewing_rally.Defence_pos.ImageY);
                    }
                }



                //selectnextEmptyPosition();
                // Select first index
                listView_reviewertrackedpoints.Items[0].Selected = true;
                listView_reviewertrackedpoints.Focus();
            }
        }
예제 #6
0
        public void addRally(Rally rally)
        {
            string xpathExpr = "descendant::Spiel";

            XmlNode rootNode, newRally, rallyTree;

            // Get rallies tree for given set number
            rootNode = xmlDoc.DocumentElement;
            rallyTree = rootNode.SelectSingleNode(xpathExpr);

            // Construct new rally node
            newRally = newRallyNode(rally);

            //xmlDoc.InsertAfter(newRally, lastRally);
            rallyTree.AppendChild(newRally);

            // Write rally to xml output file
            xmlDoc.Save(xmlDocLocation);
        }
예제 #7
0
        private XmlNode newRallyNode(Rally rally)
        {
            XmlNode newRally;
            XmlNode punktchance_aus_Defence;


            newRally = xmlDoc.CreateElement("Spielzug");

            // ID Attribute
            XmlAttribute spielzug_attribute = xmlDoc.CreateAttribute("ID");
            spielzug_attribute.InnerText = rally.Start_time.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Anfang Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Anfang");
            spielzug_attribute.InnerText = rally.Absolute_start_time.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Ende Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Ende");
            spielzug_attribute.InnerText = rally.Absolute_end_time.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Erfolg Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Erfolg");
            spielzug_attribute.InnerText = rally.Kill.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Smash Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Smash");
            spielzug_attribute.InnerText = rally.Smash.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Drop Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Drop");
            spielzug_attribute.InnerText = rally.Drop.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Spieler_An Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Spieler_An");
            spielzug_attribute.InnerText = rally.Reception_pos.Player.Name;
            newRally.Attributes.Append(spielzug_attribute);

            // Satz Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Satz");
            spielzug_attribute.InnerText = rally.CorrespondingSetNr.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Bigpoint Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Bigpoint");
            spielzug_attribute.InnerText = rally.BigPoint.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Spielstand Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Spielstand");
            spielzug_attribute.InnerText = configuration.Teama_score + ":" + configuration.Teamb_score;
            newRally.Attributes.Append(spielzug_attribute);

            // Timeout Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Timeout");
            spielzug_attribute.InnerText = rally.Timeout.ToString();
            newRally.Attributes.Append(spielzug_attribute);

            // Standardseite Attribute
            spielzug_attribute = xmlDoc.CreateAttribute("Standardseite");
            spielzug_attribute.InnerText = rally.Standardposition.ToString();
            newRally.Attributes.Append(spielzug_attribute);



            newRally.AppendChild(newPositionNode(rally.Service_pos, "Aufschlag"));
            newRally.AppendChild(newPositionNode(rally.Reception_pos, "Annahme"));
            newRally.AppendChild(newPositionNode(rally.Set_pos, "Zuspiel"));
            newRally.AppendChild(newPositionNode(rally.Takeoff_pos, "Anlauf"));
            newRally.AppendChild(newPositionNode(rally.Approach_pos, "Angriff"));
            newRally.AppendChild(newPositionNode(rally.Defence_pos, "Abwehr"));


            punktchance_aus_Defence = xmlDoc.CreateElement("Punktchance_aus_Defence");
            List<Person> defenceplayers = rally.Reception_pos.Defenceplayers;
            for (int i = 0; i < defenceplayers.Count; i++)
            {
                XmlNode player = xmlDoc.CreateElement("Player");
                XmlAttribute player_attribute = xmlDoc.CreateAttribute("Name");
                player_attribute.InnerText = defenceplayers[i].Name;
                player.Attributes.Append(player_attribute);
                punktchance_aus_Defence.AppendChild(player);
            }
            newRally.AppendChild(punktchance_aus_Defence);

            return newRally;
        }
예제 #8
0
        public void loadRallies(Form_Main mainForm)
        {
            XmlNode rootNode;
            rootNode = xmlDoc.DocumentElement;

            List<long> list_timestamps = new List<long>();
            ImageList imageList_screenshots = new ImageList();
            imageList_screenshots.ImageSize = new Size(84, 68);

            mainForm.listView_screenshots.Items.Clear();


            List<Set> sets = new List<Set>();
            sets.Add(new Set(1));
            sets.Add(new Set(2));
            sets.Add(new Set(3));

            XmlNodeList rallies = xmlDoc.GetElementsByTagName("Spielzug");

            for (int i = 0; i < rallies.Count; i++)
            {
                int setnr = Convert.ToInt32(rallies[i].SelectSingleNode("@Satz").InnerText);
                long starttime = Convert.ToInt64(rallies[i].SelectSingleNode("@ID").InnerText);
                list_timestamps.Add(starttime);
                

                Rally rally = new Rally(starttime,setnr);


                rally.Kill = (rallies[i].SelectSingleNode("@Erfolg").InnerText == "True");
                rally.Smash = (rallies[i].SelectSingleNode("@Smash").InnerText == "True");
                rally.Drop = (rallies[i].SelectSingleNode("@Drop").InnerText == "True");
                rally.BigPoint = (rallies[i].SelectSingleNode("@Bigpoint").InnerText == "True");
                rally.Timeout = (rallies[i].SelectSingleNode("@Timeout").InnerText == "True");
                rally.Standardposition = (rallies[i].SelectSingleNode("@Standardseite").InnerText == "True");
 

                // Get All Positions
                XmlNode xmlposition = rallies[i].SelectSingleNode("Aufschlag");
                rally.Service_pos = getPosition(xmlposition);

                xmlposition = rallies[i].SelectSingleNode("Annahme");
                rally.Reception_pos = getPosition(xmlposition);

                rally.Reception_pos.Player = new Person();
                String playername = rallies[i].SelectSingleNode("ReceptionPlayer/Player/@Name").InnerText;
                rally.Reception_pos.Player = readPlayer(playername);


                XmlNodeList defenceplayers = rallies[i].SelectNodes("Punktchance_aus_Defence/Player");
                List<Person> defenceplayerslist = new List<Person>();
                for (int c = 0; c < defenceplayers.Count; c++)
                {
                    string name = defenceplayers[c].SelectSingleNode("@Name").InnerText;
                    defenceplayerslist.Add(readPlayer(name));
                }
                rally.Reception_pos.Defenceplayers = defenceplayerslist;



                xmlposition = rallies[i].SelectSingleNode("Zuspiel");
                rally.Set_pos = getPosition(xmlposition);

                xmlposition = rallies[i].SelectSingleNode("Anlauf");
                rally.Takeoff_pos = getPosition(xmlposition);

                xmlposition = rallies[i].SelectSingleNode("Angriff");
                rally.Approach_pos = getPosition(xmlposition);

                xmlposition = rallies[i].SelectSingleNode("Abwehr");
                rally.Defence_pos = getPosition(xmlposition);



                // Set Screenshot
                CaptureStream capture_stream = new CaptureStream();
                Bitmap screenshot = capture_stream.createScreenshot(starttime, false);
                if (screenshot != null)
                {

                    imageList_screenshots.Images.Add(screenshot);
                    mainForm.setImageListScreenshots(imageList_screenshots);

                    int screenshot_index = i;
                    ListViewItem screenshot_item = new ListViewItem("", screenshot_index);

                    mainForm.listView_screenshots.Items.Add(screenshot_item);
                    mainForm.listView_screenshots.LargeImageList = mainForm.getImageListScreenshots();
                    mainForm.listView_screenshots.Refresh();
                }


                

                sets[setnr - 1].Rallies.Add(rally);
                
            }

            mainForm.Game.Sets = sets;
            mainForm.List_timestamps = list_timestamps;
        }
예제 #9
0
        // this method updates a live rally which got changed in review mode
        public void updateReviewRally(Rally toChangeRally)
        {
            XmlNode rootNode, locCurrentNode;
            string liveRallyStartTime = toChangeRally.Start_time.ToString();

            rootNode = xmlDoc.DocumentElement;

            string xpathExpr = "descendant::Spiel/Spielzug[@ID=" + liveRallyStartTime + "]";
            locCurrentNode = rootNode.SelectSingleNode(xpathExpr);

     

            if (locCurrentNode != null)
            {
                locCurrentNode.ParentNode.RemoveChild(locCurrentNode);
                addRally(toChangeRally);
            }

        }
예제 #10
0
        public void loadRallies(Form_Main mainForm)
        {
            XmlNode rootNode;

            rootNode = xmlDoc.DocumentElement;

            List <long> list_timestamps       = new List <long>();
            ImageList   imageList_screenshots = new ImageList();

            imageList_screenshots.ImageSize = new Size(84, 68);

            mainForm.listView_screenshots.Items.Clear();


            List <Set> sets = new List <Set>();

            sets.Add(new Set(1));
            sets.Add(new Set(2));
            sets.Add(new Set(3));

            XmlNodeList rallies = xmlDoc.GetElementsByTagName("Spielzug");

            for (int i = 0; i < rallies.Count; i++)
            {
                int  setnr     = Convert.ToInt32(rallies[i].SelectSingleNode("@Satz").InnerText);
                long starttime = Convert.ToInt64(rallies[i].SelectSingleNode("@ID").InnerText);
                list_timestamps.Add(starttime);


                Rally rally = new Rally(starttime, setnr);


                rally.Kill             = (rallies[i].SelectSingleNode("@Erfolg").InnerText == "True");
                rally.Smash            = (rallies[i].SelectSingleNode("@Smash").InnerText == "True");
                rally.Drop             = (rallies[i].SelectSingleNode("@Drop").InnerText == "True");
                rally.BigPoint         = (rallies[i].SelectSingleNode("@Bigpoint").InnerText == "True");
                rally.Timeout          = (rallies[i].SelectSingleNode("@Timeout").InnerText == "True");
                rally.Standardposition = (rallies[i].SelectSingleNode("@Standardseite").InnerText == "True");


                // Get All Positions
                XmlNode xmlposition = rallies[i].SelectSingleNode("Aufschlag");
                rally.Service_pos = getPosition(xmlposition);

                xmlposition         = rallies[i].SelectSingleNode("Annahme");
                rally.Reception_pos = getPosition(xmlposition);

                rally.Reception_pos.Player = new Person();
                String playername = rallies[i].SelectSingleNode("ReceptionPlayer/Player/@Name").InnerText;
                rally.Reception_pos.Player = readPlayer(playername);


                XmlNodeList   defenceplayers     = rallies[i].SelectNodes("Punktchance_aus_Defence/Player");
                List <Person> defenceplayerslist = new List <Person>();
                for (int c = 0; c < defenceplayers.Count; c++)
                {
                    string name = defenceplayers[c].SelectSingleNode("@Name").InnerText;
                    defenceplayerslist.Add(readPlayer(name));
                }
                rally.Reception_pos.Defenceplayers = defenceplayerslist;



                xmlposition   = rallies[i].SelectSingleNode("Zuspiel");
                rally.Set_pos = getPosition(xmlposition);

                xmlposition       = rallies[i].SelectSingleNode("Anlauf");
                rally.Takeoff_pos = getPosition(xmlposition);

                xmlposition        = rallies[i].SelectSingleNode("Angriff");
                rally.Approach_pos = getPosition(xmlposition);

                xmlposition       = rallies[i].SelectSingleNode("Abwehr");
                rally.Defence_pos = getPosition(xmlposition);



                // Set Screenshot
                CaptureStream capture_stream = new CaptureStream();
                Bitmap        screenshot     = capture_stream.createScreenshot(starttime, false);
                if (screenshot != null)
                {
                    imageList_screenshots.Images.Add(screenshot);
                    mainForm.setImageListScreenshots(imageList_screenshots);

                    int          screenshot_index = i;
                    ListViewItem screenshot_item  = new ListViewItem("", screenshot_index);

                    mainForm.listView_screenshots.Items.Add(screenshot_item);
                    mainForm.listView_screenshots.LargeImageList = mainForm.getImageListScreenshots();
                    mainForm.listView_screenshots.Refresh();
                }



                sets[setnr - 1].Rallies.Add(rally);
            }

            mainForm.Game.Sets       = sets;
            mainForm.List_timestamps = list_timestamps;
        }