コード例 #1
0
        public WaveformID GetWaveID()
        {
            Vector3    boundHalfSize = Bounds.LargerSize;
            WaveformID wave          = new WaveformID(256);
            Vector3    normVec;

            foreach (Vertex v in Vertices)
            {
                normVec = new Vector3(
                    ((v.Position.X / boundHalfSize.X) / 2 + 0.5f) * (wave.WaveWidth - 1),
                    ((v.Position.Y / boundHalfSize.Y) / 2 + 0.5f) * (wave.WaveWidth - 1),
                    ((v.Position.Z / boundHalfSize.Z) / 2 + 0.5f) * (wave.WaveWidth - 1));

                int   xStartIndex = (int)Math.Floor(normVec.X);
                int   yStartIndex = (int)Math.Floor(normVec.Y);
                int   zStartIndex = (int)Math.Floor(normVec.Z);
                float xStartBias  = normVec.X - (float)Math.Floor(normVec.X);
                float yStartBias  = normVec.Y - (float)Math.Floor(normVec.Y);
                float zStartBias  = normVec.Z - (float)Math.Floor(normVec.Z);

                wave.XWave[xStartIndex] += xStartBias;
                wave.YWave[yStartIndex] += yStartBias;
                wave.ZWave[zStartIndex] += xStartBias;

                wave.XWave[xStartIndex + 1] += (1 - xStartBias);
                wave.YWave[yStartIndex + 1] += (1 - yStartBias);
                wave.ZWave[zStartIndex + 1] += (1 - zStartBias);
            }

            return(wave);
        }
コード例 #2
0
        private void checkIfSimilarToBtn_Click(object sender, EventArgs e)
        {
            if (currentlyLoadedModel == null)
            {
                MessageBox.Show("Please load a model first", "Embedded Data", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            StringBuilder filterStr = new StringBuilder();
            string        allFilter = "All Supported Formats|";

            foreach (KeyValuePair <string, ModelInstantationHelper> kvp in modelImporters)
            {
                filterStr.Append("|" + kvp.Value.ModelInfo.TypeName + "|*." + kvp.Key);
                allFilter += "*." + kvp.Key + ";";
            }
            allFilter = allFilter.Substring(0, allFilter.Length - 1);

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Filter = allFilter + filterStr.ToString();
            if (ofd.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            ModelInstantationHelper mih = modelImporters[Path.GetExtension(ofd.FileName).Substring(1)];
            Model imported = mih.ModelImporter.DoImportModel(ofd.FileName);

            if (imported == null)
            {
                return;
            }

            WaveformID wave     = currentlyLoadedModel.GetWaveID();
            WaveformID testWave = imported.GetWaveID();

            double similarity = wave.CompareTo(testWave);

            string similarityString = "NOT Similar";

            if (similarity == 0.0)
            {
                similarityString = "Identical";
            }
            else if (similarity < 10.0)
            {
                similarityString = "Almost identical";
            }
            else if (similarity < 500.0)
            {
                similarityString = "Very similar";
            }
            else if (similarity < 1500.0)
            {
                similarityString = "Similar";
            }

            MessageBox.Show("Models are " + similarityString + "\n\nDifference index = " + similarity);
        }
コード例 #3
0
        public double CompareTo(WaveformID other)
        {
            double differenceX = 0.0f;
            double differenceY = 0.0f;
            double differenceZ = 0.0f;

            for (int i = 0; i < XWave.Length; ++i)
            {
                differenceX += Math.Pow(Math.Abs(other.XWave[i] - XWave[i]), 2);
                differenceY += Math.Pow(Math.Abs(other.YWave[i] - YWave[i]), 2);
                differenceZ += Math.Pow(Math.Abs(other.ZWave[i] - ZWave[i]), 2);
            }

            double result = (differenceX + differenceY + differenceZ);

            return(double.IsNaN(result) ? 0 : result);
        }
コード例 #4
0
        private void loadModelBtn_Click(object sender, EventArgs e)
        {
            StringBuilder filterStr = new StringBuilder();
            string        allFilter = "All Supported Formats|";

            foreach (KeyValuePair <string, ModelInstantationHelper> kvp in modelImporters)
            {
                filterStr.Append("|" + kvp.Value.ModelInfo.TypeName + "|*." + kvp.Key);
                allFilter += "*." + kvp.Key + ";";
            }
            allFilter = allFilter.Substring(0, allFilter.Length - 1);

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Filter = allFilter + filterStr.ToString();
            if (ofd.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            ModelInstantationHelper mih = modelImporters[Path.GetExtension(ofd.FileName).Substring(1)];
            Model imported = mih.ModelImporter.DoImportModel(ofd.FileName);

            if (imported == null)
            {
                return;
            }

            if (currentlyLoadedModel != null)
            {
                currentlyLoadedModel.Dispose();
            }

            WaveformID lastWave = currentlyLoadedModel != null?currentlyLoadedModel.GetWaveID() : null;

            currentlyLoadedModel        = imported;
            propertyGrid.SelectedObject = new DictionaryPropertyGridAdapter(currentlyLoadedModel.Metadata);
            dmwglControl.UpdateMatrices();

            WaveformID wave = currentlyLoadedModel.GetWaveID();

            waveformChart.Series[0].Points.Clear();
            waveformChart.Series[1].Points.Clear();
            waveformChart.Series[2].Points.Clear();
            for (int i = 0; i < wave.XWave.Length; ++i)
            {
                waveformChart.Series[0].Points.Add(wave.XWave[i]);
                waveformChart.Series[1].Points.Add(wave.YWave[i]);
                waveformChart.Series[2].Points.Add(wave.ZWave[i]);
            }

            if (lastWave != null)
            {
                double similarity = wave.CompareTo(lastWave);

                string similarityString = "NOT Similar";
                if (similarity < 1.0)
                {
                    similarityString = "Identical";
                }
                else if (similarity < 10.0)
                {
                    similarityString = "Almost identical";
                }
                else if (similarity < 500.0)
                {
                    similarityString = "Very similar";
                }
                else if (similarity < 1500.0)
                {
                    similarityString = "Similar";
                }

                MessageBox.Show("Models are " + similarityString + "\n\nDifference index = " + similarity);
            }
        }