コード例 #1
0
        public void LoadVisualization()
        {
            AppConfig.SharingEnabled   = GameObject.Find("SharingEnabledToggle").GetComponent <Toggle>().isOn;
            AppConfig.IsServerInstance = GameObject.Find("ServerInstanceToggle").GetComponent <Toggle>().isOn;

            var    modelDropdown = GameObject.Find("ProjectModelDropdown").GetComponent <Dropdown>();
            string modelfile     = modelDropdown.options[modelDropdown.value].text;

            UIManager.Instance.Deactivate(UIElement.SettingsPanel);
            UIManager.Instance.Activate(UIElement.ContentPane);
            UIManager.Instance.Deactivate(UIElement.InfoPanel);
            UIManager.Instance.Deactivate(UIElement.Toolbar);

            GameObject.Find("ContentPane").transform.position  = GazeManager.Instance.GazeOrigin;
            GameObject.Find("ContentPane").transform.position += GazeManager.Instance.GazeTransform.forward * 2f;
            GameObject.Find("ContentPane").transform.position -= GazeManager.Instance.GazeTransform.up * 0.5f;

            string assetpath   = Application.streamingAssetsPath;
            string filepath    = Path.Combine(assetpath, modelfile);
            string filecontent = FileReader.Read(new Uri(filepath).AbsolutePath);

            Task.Factory.StartNew(() =>
            {
                JSONObject modeldata = JSONObject.Create(filecontent);
                OSGiProject project  = OSGiProjectParser.Instance.Parse(modeldata);

                VisualizationLoader.Instance.VisualizationLoaded += OnVisualizationLoaded;
                VisualizationLoader.Instance.Load(project);
            });
        }
コード例 #2
0
        // TODO: Refactor.
        public void BuildRandomGraphLayout(OSGiProject project, Vector3 min, Vector3 max, float minDist, int maxIter)
        {
            _project = project;
            int overlappingBundles = 0;

            foreach (GraphVertex vertex in project.DependencyGraph.Vertices)
            {
                Vector3 diagonalVector = min - max;

                float   randomX      = diagonalVector.x * SyncDataStorage.Instance.GetRandomNumber(_random);
                float   randomY      = diagonalVector.y * SyncDataStorage.Instance.GetRandomNumber(_random);
                float   randomZ      = diagonalVector.z * SyncDataStorage.Instance.GetRandomNumber(_random);
                Vector3 randomVector = min + new Vector3(randomX, randomY, randomZ);

                int iteration = 0;
                while (!CheckOverlap(randomVector, vertex.Island, minDist) && iteration <= maxIter)
                {
                    randomX = diagonalVector.x * SyncDataStorage.Instance.GetRandomNumber(_random);
                    randomY = diagonalVector.y * SyncDataStorage.Instance.GetRandomNumber(_random);
                    randomZ = diagonalVector.z * SyncDataStorage.Instance.GetRandomNumber(_random);

                    randomVector = min + new Vector3(randomX, randomY, randomZ);
                    iteration++;
                }

                vertex.Position = randomVector;
                if (iteration >= maxIter)
                {
                    overlappingBundles++;
                }
            }

            Debug.Log("Graph layout is computed! Number of overlapping bundles: " + overlappingBundles);
        }
コード例 #3
0
        public List <CartographicIsland> BuildFromProject(OSGiProject project)
        {
            _cartographicIslands.Clear();
            foreach (Bundle bundle in project.Bundles)
            {
                _cartographicIslands.Add(BuildFromBundle(bundle));
            }

            return(_cartographicIslands);
        }
コード例 #4
0
        public void BuildForceDirectedLayout(OSGiProject project)
        {
            _simulationData = new Dictionary <GraphVertex, VertexPositionData>();
            _project        = project;

            // TODO: Refactor
            float attraction      = 10.0f;
            float spring          = 1.0f;
            float repulsion       = 5.0f;
            float attractToCenter = 0.005f;
            float friction        = 0.105f;
            float timestep        = StepSize;

            foreach (GraphVertex vertex in project.DependencyGraph.Vertices)
            {
                float rr = 20f;

                float x = (SyncDataStorage.Instance.GetRandomNumber(_random) - 0.5f) * rr;
                float y = (SyncDataStorage.Instance.GetRandomNumber(_random) - 0.5f) * rr;

                Vector2            startPos   = new Vector2(x, y);
                VertexPositionData vertexData = new VertexPositionData(startPos, startPos);
                _simulationData.Add(vertex, vertexData);
            }

            int stepCounter = 0;

            while (stepCounter < SimulationSteps)
            {
                foreach (GraphVertex vertex in project.DependencyGraph.Vertices)
                {
                    Vector2 netForce = Vector2.zero;

                    netForce += ForceDirectedAttraction(vertex, attraction, spring);
                    netForce += ForceDirectedRepulsion(vertex, repulsion);
                    netForce -= ForceDirectedAttractToCenter(vertex, attractToCenter);
                    VerletIntegration(vertex, netForce, friction, timestep);

                    netForce = new Vector2((float)Math.Truncate(netForce.x * 10) / 10, (float)Math.Truncate(netForce.y * 10) / 10);
                    stepCounter++;
                }
            }

            foreach (GraphVertex vertex in project.DependencyGraph.Vertices)
            {
                VertexPositionData vertexData = _simulationData[vertex];
                Vector3            pos        = new Vector3(vertexData.position.x, 0, vertexData.position.y);
                vertex.Position = pos;
            }
        }
コード例 #5
0
        public void Load(OSGiProject project)
        {
            _osgiProject = project;
            List <CartographicIsland> islandStructures = IslandStructureBuilder.Instance.BuildFromProject(project);

            Debug.Log("Island Structures built...");

            Vector3 min = new Vector3(150.0f, 150.0f, 150.0f);
            Vector3 max = new Vector3(500.0f, 500.0f, 500.0f);

            GraphLayoutBuilder.Instance.BuildRandomGraphLayout(project, min, max, 50.0f, 100);
            Debug.Log("Force directed graph layout computed...");

            IslandGameObjectBuilder.Instance.IslandGameObjectsBuilt += OnIslandGameObjectsBuilt;

            UnityMainThreadDispatcher.Instance.Enqueue(() => {
                StartCoroutine(IslandGameObjectBuilder.Instance.BuildFromIslandStructures(islandStructures));
            });
        }