void OnSceneGUI()
    {
        if (editing)
        {
            var        contorlId = GUIUtility.GetControlID(FocusType.Passive);
            Ray        worldRay;
            RaycastHit hit;
            if (Event.current.button == 0)
            {
                switch (Event.current.GetTypeForControl(contorlId))
                {
                case EventType.MouseDown:

                    if (!creator.HasEditingStation)
                    {
                        worldRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
                        if (Physics.Raycast(worldRay, out hit))
                        {
                            // Must use SetEditStation or moving the position will be erroneous
                            creator.SetEditStation(creator.GetClosestStationTo(hit));
                            if (!creator.HasEditingStation)
                            {
                                // Must use SetEditStation or moving the position will be erroneous
                                creator.SetEditStation(creator.AddNewStation(hit.point));
                                adding = true;
                            }
                            else
                            {
                                newStationName = creator.GetEditStationName();
                            }
                        }
                        Event.current.Use();
                    }
                    GUIUtility.hotControl = contorlId;
                    break;

                case EventType.MouseUp:
                    GUIUtility.hotControl = 0;
                    Event.current.Use();
                    break;

                case EventType.MouseDrag:
                    if (creator.HasEditingStation)
                    {
                        worldRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
                        if (Physics.Raycast(worldRay, out hit))
                        {
                            //Debug.Log(hit.collider.gameObject);
                            creator.MoveEditingStation(hit.point);
                        }
                        Event.current.Use();
                    }
                    GUIUtility.hotControl = contorlId;
                    break;
                }
            }
        }
    }
Example #2
0
    public void CreateBusStops()
    {
        if (busInfo == null)
        {
            Debug.Log("no busInfo loaded.");
            return;
        }
        if (netInfo == null)
        {
            Debug.Log("no netInfo loaded.");
            return;
        }
        var mb = FindObjectOfType <MapBoundaries>();

        if (mb == null)
        {
            Debug.Log("no MapBoundaries found.");
            return;
        }

        //ArrowUtils.CheckTransportationModuleExist();
        StationCreator creator = StationCreator.AttachToGameObject();

        creator.SetStations(FindObjectsOfType <StationController>());

        // SumoLocation used in UTM to WGS-84 conversion.
        var location = netInfo.location;

        // Go through the busStops in busInfo.
        foreach (var busStop in busInfo.busStops)
        {
            // Get the polyline of the lane of the busStop
            var lane = netInfo.GetLane(busStop.lane);
            // Get the midpoint of the first 2 positions of shape in lane.
            var midPoint = lane.GetMidPoint();
            //Debug.Log(midPoint);

            // Get the UTM corrdinates by subtracting the netOffset in location-element.
            var utm = location.GetUTM(midPoint.x, midPoint.y);
            // Convert the UTM corrdinates to Latitude Longitude.
            var latlon = UTMtoLatLon(utm[0], utm[1], location.GetZone());
            //Debug.Log(latlon[0] + ", " + latlon[1]);

            // Convert the Latitude Longitude to coordinates in Unity.
            var convVec = CoordinateConvertor.LatLonToVector3(latlon[0], latlon[1], 0, mb);
            //Debug.Log(convVec);

            // Create a busStop based on the converted coordinate.
            //var go = new GameObject(busStop.id);
            //go.transform.position = convVec;
            //go.transform.SetParent(this.transform);
            creator.AddNewStation(convVec, busStop.id);
        }

        DestroyImmediate(creator);
    }
    static void LoadStationsAndLines()
    {
        AddModuleIfNotExist(transModuleName);

        var path = EditorUtility.OpenFilePanel("Load XML Data", "Assets/Transportations", "xml");

        if (path.Length == 0)
        {
            EditorUtility.DisplayDialog("Loading Cancelled", "No file was provided", "OK");
            return;
        }

        ClearAll();

        // Load stations and lines from xml.
        var container = TrafficContainer.Load(path);
        // Add stations from container to the scene.
        StationCreator stationCreator = StationCreator.AttachToGameObject();

        stationCreator.SetStations(FindObjectsOfType <StationController>());
        // the station might get a new id, therefor using a dictionary to
        // find the right stationController when creating line.
        Dictionary <int, StationController> idLookUp = new Dictionary <int, StationController>();

        foreach (var s in container.stations)
        {
            var station = stationCreator.AddNewStation(s.GetPoint(), s.name);
            idLookUp.Add(s.id, station);
        }
        DestroyImmediate(stationCreator);

        // Add lines from container to the scene.
        TransLineCreator lineCreator = TransLineCreator.AttachToGameObject();

        lineCreator.SetLines(GameObject.FindGameObjectsWithTag("TransLine"));
        foreach (var line in container.lines)
        {
            lineCreator.ResetEditingInfo();
            lineCreator.editLineName = line.name;
            lineCreator.lineCategory = line.GetCategory();

            foreach (var id in line.GetStationIds())
            {
                var station = idLookUp[id];
                lineCreator.AddStationToNewLine(station, line);
            }
            lineCreator.CreateNewLine();
        }
        DestroyImmediate(lineCreator);

        string stationStats = string.Format("{0} stations loaded to the scene.", container.stations.Count);
        string lineStats    = string.Format("{0} lines loaded to the scene.", container.lines.Count);

        EditorUtility.DisplayDialog("Loading Finished", stationStats + "\n" + lineStats, "OK");
    }