//ya rab ostor
        //update vertex button
        private void updateButtonAnimation_Click(object sender, EventArgs e)
        {
            string selectedVertex   = currentVerticesAnimationListBox.SelectedItem.ToString();
            string selectedKeyFrame = keyFarmesAnimationListBox.SelectedItem.ToString();

            // Dictionary<string, List<float>> keyFrameData = new Dictionary<string, List<float>>();

            #region updating
            if (xPosAnimationTextBox.Text != "")
            {
                xPos = (float)Convert.ToDouble(xPosAnimationTextBox.Text);
            }

            if (yPosAnimationTextBox.Text != "")
            {
                yPos = (float)Convert.ToDouble(yPosAnimationTextBox.Text);
            }

            if (zPosAnimationTextBox.Text != "")
            {
                zPos = (float)Convert.ToDouble(zPosAnimationTextBox.Text);
            }

            if (rColorAnimationTextBox.Text != "")
            {
                rColor = (float)Convert.ToDouble(rColorAnimationTextBox.Text);
            }

            if (gColorAnimationTextBox.Text != "")
            {
                gColor = (float)Convert.ToDouble(gColorAnimationTextBox.Text);
            }

            if (bColorAnimationTextBox.Text != "")
            {
                bColor = (float)Convert.ToDouble(bColorAnimationTextBox.Text);
            }

            if (normalXAnimationTextBox.Text != "")
            {
                normalX = (float)Convert.ToDouble(normalXAnimationTextBox.Text);
            }

            if (normalYAnimationTextBox.Text != "")
            {
                normalY = (float)Convert.ToDouble(normalYAnimationTextBox.Text);
            }

            if (normalZAnimationTextBox.Text != "")
            {
                normalZ = (float)Convert.ToDouble(normalZAnimationTextBox.Text);
            }

            if (UdataAnimationTextBox.Text != "")
            {
                udata = (float)Convert.ToDouble(UdataAnimationTextBox.Text);
            }

            if (VdataAnimationTextBox.Text != "")
            {
                vdata = (float)Convert.ToDouble(VdataAnimationTextBox.Text);
            }

            List <float> vertexList = new List <float>();
            vertexList.Add(xPos);
            vertexList.Add(yPos);
            vertexList.Add(zPos);
            vertexList.Add(rColor);
            vertexList.Add(gColor);
            vertexList.Add(bColor);
            vertexList.Add(udata);
            vertexList.Add(vdata);
            vertexList.Add(normalX);
            vertexList.Add(normalY);
            vertexList.Add(normalZ);
            #endregion

            //3shan a7otha ll keyframe ely ba3do
            upTodateVertexDict[selectedVertex] = vertexList;
            //hashof law h3ml keda 3shan mayb2ash bt referece w kolohom byboso 3la nfs el dic
            Dictionary <string, List <float> > newDict = new Dictionary <string, List <float> >(upTodateVertexDict);

            KeyFrame updatedKeyFrame = new KeyFrame(newDict, Convert.ToInt32(InterpolateFrametextBox.Text));

            vertexKeyFramesDict[selectedKeyFrame] = updatedKeyFrame;

            //// vertexDict[selectedVertex] = vertexList;
            MessageBox.Show("Keyframe updated");
        }
        public void importData(string[] data)
        {
            int verticesCount = Convert.ToInt32(data[0]);

            for (int i = 0; i < verticesCount; i++)
            {
                string[]     vertexData = data[i + 1].Split(' ');
                List <float> vertexList = new List <float>();

                vertexList.Add(float.Parse(vertexData[1]));
                vertexList.Add(float.Parse(vertexData[2]));
                vertexList.Add(float.Parse(vertexData[3]));
                vertexList.Add(float.Parse(vertexData[4]));
                vertexList.Add(float.Parse(vertexData[5]));
                vertexList.Add(float.Parse(vertexData[6]));
                vertexList.Add(float.Parse(vertexData[7]));
                vertexList.Add(float.Parse(vertexData[8]));
                vertexList.Add(float.Parse(vertexData[9]));
                vertexList.Add(float.Parse(vertexData[10]));
                vertexList.Add(float.Parse(vertexData[11]));

                vertexDict[vertexData[0]] = vertexList;
            }

            // import indices
            int indicesCount = Convert.ToInt32(data[verticesCount + 1]);

            string[] indices = data[verticesCount + 2].Split(' ');
            for (int i = 0; i < indicesCount; i++)
            {
                vertexIndices.Add(Convert.ToUInt16(indices[i]));
            }

            // import mode
            int modesCount = Convert.ToInt32(data[verticesCount + 3]);

            for (int i = 0; i < modesCount; i++)
            {
                string[]         modess       = data[modesCount + verticesCount + 3 + i].Split(' ');
                string           modeName     = modess[0] + " " + modess[1];
                int              startIndex   = Convert.ToInt32(modess[2]);
                int              countIndices = Convert.ToInt32(modess[3]);
                Tuple <int, int> t            = new Tuple <int, int>(startIndex, countIndices);
                modesDict[modeName] = t;
            }
            // import light
            string[] lightData = data[verticesCount + 3 + modesCount + 1].Split(' ');
            lightDataList = new List <float>();
            lightDataList.Add(float.Parse(lightData[0]));
            lightDataList.Add(float.Parse(lightData[1]));
            lightDataList.Add(float.Parse(lightData[2]));
            lightDataList.Add(float.Parse(lightData[3]));
            lightDataList.Add(float.Parse(lightData[4]));
            lightDataList.Add(float.Parse(lightData[5]));
            lightDataList.Add(float.Parse(lightData[6]));
            lightDataList.Add(float.Parse(lightData[7]));
            lightDataList.Add(float.Parse(lightData[8]));
            lightDataList.Add(float.Parse(lightData[9]));
            lightDataList.Add(float.Parse(lightData[10]));
            lightDataList.Add(float.Parse(lightData[11]));
            lightDataList.Add(float.Parse(lightData[12]));

            // import texture path
            texturePath = data[verticesCount + 3 + modesCount + 1 + 1];

            // import key frames
            int          keyFrameCount = Convert.ToInt32(data[verticesCount + 3 + modesCount + 1 + 1 + 1]);
            List <float> vertexListt;

            for (int i = 0; i < keyFrameCount; i++)
            {
                string[] keyFrameData = data[verticesCount + 3 + modesCount + 1 + 1 + 1 + i + 1].Split(' ');
                string   keyFrameName = keyFrameData[0] + " " + keyFrameData[1];
                Dictionary <string, List <float> > newDict = new Dictionary <string, List <float> >();

                for (int j = 0; j < verticesCount; j++)
                {
                    vertexListt = new List <float>();
                    vertexListt.Add(float.Parse(keyFrameData[3 + (12 * j)]));
                    vertexListt.Add(float.Parse(keyFrameData[4 + (12 * j)]));
                    vertexListt.Add(float.Parse(keyFrameData[5 + (12 * j)]));
                    vertexListt.Add(float.Parse(keyFrameData[6 + (12 * j)]));
                    vertexListt.Add(float.Parse(keyFrameData[7 + (12 * j)]));
                    vertexListt.Add(float.Parse(keyFrameData[8 + (12 * j)]));
                    vertexListt.Add(float.Parse(keyFrameData[9 + (12 * j)]));
                    vertexListt.Add(float.Parse(keyFrameData[10 + (12 * j)]));
                    vertexListt.Add(float.Parse(keyFrameData[11 + (12 * j)]));
                    vertexListt.Add(float.Parse(keyFrameData[12 + (12 * j)]));
                    vertexListt.Add(float.Parse(keyFrameData[13 + (12 * j)]));
                    newDict[keyFrameData[2 + (12 * j)]] = vertexListt;
                }
                KeyFrame updatedKeyFrame = new KeyFrame(newDict, Convert.ToInt32(keyFrameData[keyFrameData.Length - 2]));
                vertexKeyFramesDict[keyFrameName] = updatedKeyFrame;
            }
        }