Example #1
0
 private void QueryThread(float p0, float p1, float p2, float p3, float p4, float p5)
 {
     m_watch            = System.Diagnostics.Stopwatch.StartNew();
     m_latestCortexData = FLATData.Query(p0, p1, p2, p3, p4, p5);
     m_watch.Stop();
     m_QueryTime = m_watch.ElapsedMilliseconds;
     m_renderDue = true;
 }
Example #2
0
    // Update is called once per frame
    void Update()
    {
        // Run tests on first frame only
        if (!runTests)
        {
            return;
        }

        print("Running tests....");
        runTests = false;

        string results = "";

        // DATA LOADING TESTS

        // Correct number of vertices loaded for line mdoel
        results += " \n Correct number of vertices loaded for line model: ";
        int vertsLoaded = m_fullLineModelReader.GetNumVerts();

        if (vertsLoaded == 500000)
        {
            passed++;
            results += "PASS \n";
        }
        else
        {
            failed++;
            results += "FAIL. Expected 500000, got " + vertsLoaded + " \n";
        }

        // Correct size of adj file loaded
        results += "\n Correct number of adj data loaded: ";
        int adjLoaded = m_fullLineModelReader.GetAdjListLength();

        if (adjLoaded == 500000)
        {
            passed++;
            results += "PASS \n";
        }
        else
        {
            failed++;
            results += "FAIL. Expected 500000, got " + adjLoaded + "\n";
        }


        // QUERY TESTS
        results += "\n FLAT query returns results: ";
        FLATData.FlatRes res = FLATData.Query(0, 0, 0, 200, 200, 200);
        if (res.numcoords > 0)
        {
            passed++;
            results += "PASS \n";
        }
        else
        {
            failed++;
            results += "FAIL \n";
        }

        results += "\n IsInside cube function behaves correctly: ";
        Vector3 lowerCorner = new Vector3(-1, -1, -1);
        Vector3 UpperCorner = new Vector3(1, 1, 1);
        bool    corrRes     = m_fullLineModelReader.IsWithinCube(new Vector3(0, 0, 0), lowerCorner, UpperCorner) &&
                              m_fullLineModelReader.IsWithinCube(new Vector3(1, 1, 1), lowerCorner, UpperCorner) &&
                              !m_fullLineModelReader.IsWithinCube(new Vector3(0, 0, 2), lowerCorner, UpperCorner);

        if (corrRes)
        {
            passed++;
            results += "PASS \n";
        }
        else
        {
            failed++;
            results += "FAIL \n";
        }


        // Messaging tests

        results += "\n Intial Message Search behaves correctly: ";
        Vector3 offset       = m_cortexDrawer.GetMessageBoxOffset();
        Vector3 lowerCorner2 = new Vector3(0, 0, 0) + offset;
        Vector3 upperCorner2 = new Vector3(100, 100, 100) + offset;

        m_fullLineModelReader.BeginMessage(lowerCorner2, upperCorner2);
        if (m_fullLineModelReader.GetNumActiveVerts() == 2633)
        {
            passed++;
            results += "PASS \n";
        }
        else
        {
            failed++;
            results += "FAIL \n";
        }

        m_fullLineModelReader.IterateMessage();
        results += "\n First Iteration of Message behaves correctly: ";
        if (m_fullLineModelReader.GetNumActiveVerts() == 2762)
        {
            passed++;
            results += "PASS \n";
        }
        else
        {
            failed++;
            results += "FAIL \n";
        }

        m_fullLineModelReader.IterateMessage();
        results += "\n Second Iteration of Message behaves correctly: ";
        if (m_fullLineModelReader.GetNumActiveVerts() == 3022)
        {
            passed++;
            results += "PASS \n";
        }
        else
        {
            failed++;
            results += "FAIL \n";
        }

        m_fullLineModelReader.ResetMessage();

        // Connectivity Tests

        results += "\n Connectivity mode behaves correctly: ";
        m_fullLineModelReader.m_connectionRange = 1000;
        m_fullLineModelReader.ShowConnectivity(lowerCorner2, upperCorner2);
        if (m_fullLineModelReader.GetNumActiveVerts() == 3022)
        {
            passed++;
            results += "PASS \n";
        }
        else
        {
            failed++;
            results += "FAIL \n";
        }

        m_fullLineModelReader.ResetMessage();

        results += "\n Tests Ran: " + (passed + failed);
        results += "\n Tests passed: " + passed;
        results += "\n Tests failed: " + failed;

        if (writeToFile)
        {
            System.IO.StreamWriter file = new System.IO.StreamWriter(Application.dataPath + "\\testresults.txt");
            file.WriteLine(results);

            file.Close();
        }
        else
        {
            print(results);
        }
    }
    // Use this for initialization
    void Start()
    {
        print("Building Prefab Model...");

        System.Diagnostics.Stopwatch watch      = System.Diagnostics.Stopwatch.StartNew();
        FLATData.FlatRes             cortexData = FLATData.Query(100f, 100f, 250f, 1000f, 1000f, 1000f);
        watch.Stop();
        var elapsedMs = watch.ElapsedMilliseconds;

        print("Time taken for query in Ms: " + elapsedMs);
        //FLATData.FlatRes cortexData = FLATData.Query(250f, 1000f, -1669.26f, 1000f, 1895.73f, 3507.66f);

        print("Number verts returned: " + cortexData.numcoords);

        //FLATData.FlatRes cortexData = FLATData.Query(0f, 0f, 0f, 300f, 100f, 200f);
        GameObject fullModel = new GameObject();

        Vector3 min = new Vector3(Mathf.Infinity, Mathf.Infinity, Mathf.Infinity);
        Vector3 max = new Vector3(-Mathf.Infinity, -Mathf.Infinity, -Mathf.Infinity);

        // Put data into vector3 form
        List <Vector3> cortexVertices = new List <Vector3>();

        for (int i = 0; i < cortexData.numcoords; i += 3)
        {
            //Vector3 v = transform.TransformPoint(new Vector3(cortexData.coords[i], cortexData.coords[i + 1], cortexData.coords[i + 2]));
            Vector3 v = new Vector3(cortexData.coords[i], cortexData.coords[i + 1], cortexData.coords[i + 2]);

            min.x = Mathf.Min(min.x, v.x);
            min.y = Mathf.Min(min.y, v.y);
            min.z = Mathf.Min(min.z, v.z);

            max.x = Mathf.Max(max.x, v.x);
            max.y = Mathf.Max(max.y, v.y);
            max.z = Mathf.Max(max.z, v.z);

            Vector3 p = CoordinateConvertion.FlatToModel(v);

            cortexVertices.Add(p);
        }

        print("Min: " + min.ToString());
        print("Max: " + max.ToString());

        int vertexCount = cortexVertices.Count;

        watch.Reset();
        watch = System.Diagnostics.Stopwatch.StartNew();

        int counter = 0;

        if (vertexCount > 0)
        {
            int numMeshesRequired = (vertexCount / MAX_VERTECIS_PER_MESH) + 1;

            for (int i = 0; i < numMeshesRequired; i++)
            {
                Mesh mesh = new Mesh();
                mesh.subMeshCount = m_subMeshCount;
                List <Vector2> UVs       = new List <Vector2>();
                List <int>     triangles = new List <int>();
                int            startInd  = i * MAX_VERTECIS_PER_MESH;
                int            endInd    = Math.Min(startInd + MAX_VERTECIS_PER_MESH, vertexCount);
                counter += endInd - startInd;
                Vector3[] vertices = cortexVertices.GetRange(startInd, endInd - startInd).ToArray();
                mesh.vertices = vertices;

                for (int j = 0; j < endInd - startInd; j++)
                {
                    UVs.Add(new Vector2(vertices[j].x, vertices[j].z));

                    if (j < endInd - startInd - 2 && (j % 3 == 0))
                    {
                        triangles.Add(j);
                        triangles.Add(j + 1);
                        triangles.Add(j + 2);
                    }
                }

                /*
                 * int trianglesPerSubmesh = (triangles.Count / 3) / m_subMeshCount;
                 * int remTri = (triangles.Count / 3) % m_subMeshCount;
                 * int triCounter = 0;
                 *
                 * // Split triangle list for each submesh
                 * for (int k=0; k < m_subMeshCount - 1; k++)
                 * {
                 *  mesh.SetTriangles(triangles.GetRange(triCounter, trianglesPerSubmesh*3), k);
                 *  triCounter += trianglesPerSubmesh * 3;
                 * }
                 * // Final set of triangles + remainders
                 * mesh.SetTriangles(triangles.GetRange(triCounter, ((trianglesPerSubmesh + remTri) * 3)), m_subMeshCount-1);
                 */
                mesh.triangles = triangles.ToArray();
                mesh.uv        = UVs.ToArray();
                mesh.RecalculateNormals();

                GameObject meshPart = Instantiate(m_MeshPartPrefab);
                meshPart.transform.SetParent(transform);


                /*
                 * // Create materials for each submesh
                 * Material[] m = new Material[m_subMeshCount];
                 * for (int k = 0; k < m_subMeshCount; k++)
                 * {
                 *  m[k] = m_BaseCortexMat;
                 * }
                 * meshPart.GetComponent<Renderer>().materials = m;
                 */

                MeshFilter mf = meshPart.GetComponent <MeshFilter>();
                if (mf)
                {
                    mf.mesh = mesh;
                }

                meshPart.transform.SetParent(fullModel.transform);

                //UnityEditor.AssetDatabase.CreateAsset(mesh, "Assets/FullCortexModel/Small/MeshPart_small_" + i.ToString() + ".asset");
                //UnityEditor.AssetDatabase.CreateAsset(mesh, "Assets/FullCortexModel/Test3/MeshPart_test3_" + i.ToString() + ".asset");
            }
            //UnityEditor.AssetDatabase.SaveAssets();
            //PrefabUtility.ReplacePrefab(fullModel, m_FullModelPrefab, ReplacePrefabOptions.ConnectToPrefab);
            print("Done");

            print("vertex count: " + vertexCount.ToString());
            //print("counter: " + counter.ToString());

            //print("Min x: " + minX.ToString());
            //print("Min z: " + minZ.ToString());
            //print("Max x: " + maxX.ToString());
            //print("Max z: " + maxZ.ToString());
        }

        watch.Stop();
        long elapsedMs2 = watch.ElapsedMilliseconds;

        print("Model Build time in Ms: " + elapsedMs2);
    }