예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public void ExtractSharedEdgeGraph(SharedAnalysisEdgeGraph analysisGraph)
        {
            if (_model == null)
            {
                Initialize();
            }
            var g0 = _tileGraph.Graph;

            analysisGraph.Initialize(g0.VertexCount);
            analysisGraph.VertexObjects = _tileGraph.VertexObjects;

            for (int i = 0; i < g0.VertexCount; i++)
            {
                analysisGraph.Vertices[i] = _tileGraph.VertexObjects[i].transform.position;
            }

            var n = _map.TileDegree;

            for (int v0 = 0; v0 < g0.VertexCount; v0++)
            {
                var tile    = _model.GetAssigned(v0);
                int tilenum = (int)tile;
                if (_applyTileFilter == true && _ignoreTiles.Contains(tilenum))
                {
                    continue;
                }

                Vector3 v0position = _tileGraph.VertexObjects[v0].transform.position;

                for (int i = 0; i < n; i++)
                {
                    var label = _map.GetLabel(i, tile);

                    if (_labelSet.Contains(label))
                    {
                        int v1 = g0.GetVertexNeighborOut(v0, i);
                        if (v0 != v1)
                        {
                            if (!analysisGraph.Graph.HasEdge(v1, v0) && !analysisGraph.Graph.HasEdge(v0, v1))
                            {
                                analysisGraph.Graph.AddEdge(v0, v1);
                                analysisGraph.LineIndices.Add(v0);
                                analysisGraph.LineIndices.Add(v1);
                            }
                        }
                    }
                }
            }
        }