public void DeletePerimeterPoints(List <int> perimeterPointIDsToDelete) { //Validate Input foreach (int perimeterPointID in perimeterPointIDsToDelete) { if (perimeterPointID.IsInvalidKey()) { BusinessLayerHelper.ThrowErrorForInvalidDataKey("PerimeterPointID"); } } List <PerimeterPoint> perimeterPointsToBeDeleted = new List <PerimeterPoint>(); foreach (int perimeterPointID in perimeterPointIDsToDelete) { PerimeterPoint perimeterPoint = new PerimeterPoint { PerimeterPointID = perimeterPointID }; _DatabaseContext.PerimeterPoints.Attach(perimeterPoint); _DatabaseContext.PerimeterPoints.DeleteObject(perimeterPoint); perimeterPointsToBeDeleted.Add(perimeterPoint); OnPerimeterPointDeleting(perimeterPoint); } int numberOfAffectedRows = _DatabaseContext.SaveChanges(); if (numberOfAffectedRows != perimeterPointIDsToDelete.Count) { throw new DataNotUpdatedException("One or more perimeterPoint records have not been deleted."); } foreach (PerimeterPoint perimeterPointToBeDeleted in perimeterPointsToBeDeleted) { OnPerimeterPointDeleted(perimeterPointToBeDeleted); } }
public void DeletePerimeterPoint(PerimeterPoint perimeterPointToBeDeleted) { //Validate Input if (perimeterPointToBeDeleted == null) { throw (new ArgumentNullException("perimeterPointToBeDeleted")); } // Validate Primary key value if (perimeterPointToBeDeleted.PerimeterPointID.IsInvalidKey()) { BusinessLayerHelper.ThrowErrorForInvalidDataKey("PerimeterPointID"); } OnPerimeterPointSaving(perimeterPointToBeDeleted); OnPerimeterPointDeleting(perimeterPointToBeDeleted); if (perimeterPointToBeDeleted.EntityState == EntityState.Detached) { _DatabaseContext.PerimeterPoints.Attach(perimeterPointToBeDeleted); } _DatabaseContext.PerimeterPoints.DeleteObject(perimeterPointToBeDeleted); int numberOfAffectedRows = _DatabaseContext.SaveChanges(); if (numberOfAffectedRows == 0) { throw new DataNotUpdatedException("No PerimeterPoint deleted!"); } OnPerimeterPointDeleted(perimeterPointToBeDeleted); OnPerimeterPointSaved(perimeterPointToBeDeleted); }
public void UpdatePerimeterPoint(PerimeterPoint updatedPerimeterPoint) { // Validate Parameters if (updatedPerimeterPoint == null) { throw (new ArgumentNullException("updatedPerimeterPoint")); } // Validate Primary key value if (updatedPerimeterPoint.PerimeterPointID.IsInvalidKey()) { BusinessLayerHelper.ThrowErrorForInvalidDataKey("PerimeterPointID"); } // Apply business rules OnPerimeterPointSaving(updatedPerimeterPoint); OnPerimeterPointUpdating(updatedPerimeterPoint); //attaching and making ready for parsistance if (updatedPerimeterPoint.EntityState == EntityState.Detached) { _DatabaseContext.PerimeterPoints.Attach(updatedPerimeterPoint); } _DatabaseContext.ObjectStateManager.ChangeObjectState(updatedPerimeterPoint, System.Data.EntityState.Modified); //this line makes the code un-testable! int numberOfAffectedRows = _DatabaseContext.SaveChanges(); if (numberOfAffectedRows == 0) { throw new DataNotUpdatedException("No perimeterPoint updated!"); } //Apply business workflow OnPerimeterPointUpdated(updatedPerimeterPoint); OnPerimeterPointSaved(updatedPerimeterPoint); }
public virtual int CreateNewPerimeterPoint(PerimeterPoint newPerimeterPoint) { // Validate Parameters if (newPerimeterPoint == null) { throw (new ArgumentNullException("newPerimeterPoint")); } // Apply business rules OnPerimeterPointSaving(newPerimeterPoint); OnPerimeterPointCreating(newPerimeterPoint); _DatabaseContext.PerimeterPoints.AddObject(newPerimeterPoint); int numberOfAffectedRows = _DatabaseContext.SaveChanges(); if (numberOfAffectedRows == 0) { throw new DataNotUpdatedException("No perimeterPoint created!"); } // Apply business workflow OnPerimeterPointCreated(newPerimeterPoint); OnPerimeterPointSaved(newPerimeterPoint); return(newPerimeterPoint.PerimeterPointID); }
/// <summary> /// Deprecated Method for adding a new object to the PerimeterPoints EntitySet. Consider using the .Add method of the associated ObjectSet<T> property instead. /// </summary> public void AddToPerimeterPoints(PerimeterPoint perimeterPoint) { base.AddObject("PerimeterPoints", perimeterPoint); }
// Creates Rndf from an input FileStream public IRndf createRndf(FileStream fileStream) { numWps = 0; // File in Read Only mode, convert to stream StreamReader r = new StreamReader(fileStream, Encoding.UTF8); // Create new queue for input buffer Queue q = new Queue(); string word = ""; // Create the Rndf (with only segments for now, no zones) IRndf rndf = new IRndf(); rndf.Segments = new List<SimpleSegment>(); rndf.Zones = new List<SimpleZone>(); // Loop until reach end of file marker while ((word.Length < 8) || (word.Substring(0, 8) != "end_file")) { // get the next word word = parseWord(r, q); if (word == "RNDF_name") { word = parseWord(r, q); rndf.Name = word; } else if (word == "num_segments") { word = parseWord(r, q); rndf.NumSegs = int.Parse(word); } else if (word == "num_zones") { word = parseWord(r, q); rndf.NumZones = int.Parse(word); } else if (word == "format_version") { word = parseWord(r, q); rndf.FormatVersion = word; } else if (word == "creation_date") { word = parseWord(r, q); rndf.CreationDate = word; } else if (word == "segment") { // create new segment SimpleSegment seg = new SimpleSegment(); seg.Lanes = new List<SimpleLane>(); word = parseWord(r, q); seg.Id = word; // run until reach end of segment marker while (word != "end_segment") { // get next word word = parseWord(r, q); if (word == "segment_name") { word = parseWord(r, q); seg.Name = word; } else if (word == "num_lanes") { word = parseWord(r, q); seg.NumLanes = int.Parse(word); } else if (word == "end_segment") { // do nothing if at the end } else if (word == "lane") { // Create new lane SimpleLane ln = new SimpleLane(); ln.Checkpoints = new List<SimpleCheckpoint>(); ln.Waypoints = new List<SimpleWaypoint>(); ln.Stops = new List<string>(); ln.ExitEntries = new List<SimpleExitEntry>(); word = parseWord(r, q); ln.Id = word; // run until reach end of lane while (word != "end_lane") { // get next word word = parseWord(r, q); if (word == "num_waypoints") { word = parseWord(r, q); ln.NumWaypoints = int.Parse(word); } else if (word == "checkpoint") { // create checkpoint SimpleCheckpoint cp = new SimpleCheckpoint(); // get waypoint id string wp = parseWord(r, q); cp.WaypointId = wp; // get checkpoint id string id = parseWord(r, q); cp.CheckpointId = id; // add to collection of checkpoints within lane ln.Checkpoints.Add(cp); } else if (word == "lane_width") { word = parseWord(r, q); ln.LaneWidth = double.Parse(word); } else if (word == "stop") { word = parseWord(r, q); ln.Stops.Add(word); } else if (word == "left_boundary") { word = parseWord(r, q); ln.LeftBound = word; } else if (word == "right_boundary") { word = parseWord(r, q); ln.RightBound = word; } else if (word == "exit") { // create exit-entry pair SimpleExitEntry exitEntry = new SimpleExitEntry(); // get the exit id string exit = parseWord(r, q); exitEntry.ExitId = exit; // get the entry id string entry = parseWord(r, q); exitEntry.EntryId = entry; // add to collection of exit-entry pairs within lane ln.ExitEntries.Add(exitEntry); } else if (word == "end_lane") { // do nothing } // Otherwise we probably have a waypoint else { // check to make sure a wp by matching lane id to lane identifier of waypoint int laneIdLength = ln.Id.Length; // if waypoint matches then create the waypoint if (word.Length >= laneIdLength + 2 && (word.Substring(0, laneIdLength)).CompareTo(ln.Id) == 0) { // create a new waypoint SimpleWaypoint wp = new SimpleWaypoint(); wp.Position = new UrbanChallenge.Common.Coordinates(); // set its id wp.ID = word; // get latitude or X string lat = parseWord(r, q); wp.Position.X = double.Parse(lat); // get longitude or y string lon = parseWord(r, q); wp.Position.Y = double.Parse(lon); // add to lane's collection of waypoints ln.Waypoints.Add(wp); numWps += 1; } else { Console.WriteLine("Unknown identifier: " + word); } } } seg.Lanes.Add(ln); } else { Console.WriteLine("Unknown identifier: " + word); } } rndf.Segments.Add(seg); } else if (word == "zone") { // create new zone SimpleZone zone = new SimpleZone(); zone.ParkingSpots = new List<ParkingSpot>(); // get ID word = parseWord(r, q); zone.ZoneID = word; // run until reach end of segment marker while (word != "end_zone") { // get next word word = parseWord(r, q); if (word == "num_spots") { // get next word word = parseWord(r, q); // set num of parking spots zone.NumParkingSpots = int.Parse(word); } else if (word == "zone_name") { // get next word word = parseWord(r, q); // set zone name zone.Name = word; } else if (word == "perimeter") { // create perimeter zone.Perimeter = new ZonePerimeter(); zone.Perimeter.ExitEntries = new List<SimpleExitEntry>(); zone.Perimeter.PerimeterPoints = new List<PerimeterPoint>(); // set perimeter id zone.Perimeter.PerimeterID = parseWord(r, q); while (word != "end_perimeter") { // get next word word = parseWord(r, q); if (word == "num_perimeterpoints") { // set num of perimeter points zone.Perimeter.NumPerimeterPoints = int.Parse(parseWord(r, q)); } else if (word == "exit") { // create new exit,entry SimpleExitEntry ee = new SimpleExitEntry(); // set exit ee.ExitId = parseWord(r, q); // set entry ee.EntryId = parseWord(r, q); // add to perimeter exit entries zone.Perimeter.ExitEntries.Add(ee); } else if (word == "end_perimeter") { // Do Nothing } else { // create new perimeter point PerimeterPoint p = new PerimeterPoint(); // set id p.ID = word; // create new coordinate p.position = new UrbanChallenge.Common.Coordinates(); // setX p.position.X = Double.Parse(parseWord(r, q)); // setY p.position.Y = Double.Parse(parseWord(r, q)); // add to perimeter points zone.Perimeter.PerimeterPoints.Add(p); } } } else if (word == "spot") { // create a new spot ParkingSpot ps = new ParkingSpot(); // set spot id ps.SpotID = parseWord(r, q); while (word != "end_spot") { // get next word word = parseWord(r, q); if (word == "spot_width") { // set spot width ps.SpotWidth = parseWord(r, q); } else if (word == "checkpoint") { // get waypoint id that corresponds with checkpoint ps.CheckpointWaypointID = parseWord(r, q); // get checkpoint id ps.CheckpointID = parseWord(r, q); } else if (word == "end_spot") { // add spot to zone zone.ParkingSpots.Add(ps); } else { // SimpleWaypoint 1 #region // create new waypoint for waypoint1 ps.Waypoint1 = new SimpleWaypoint(); ps.Waypoint1.Position = new UrbanChallenge.Common.Coordinates(); // set id ps.Waypoint1.ID = word; // check if id is checkpointWaypointID if (ps.Waypoint1.ID == ps.CheckpointWaypointID) { ps.Waypoint1.IsCheckpoint = true; ps.Waypoint1.CheckpointID = ps.CheckpointID; } // setX ps.Waypoint1.Position.X = Double.Parse(parseWord(r, q)); // setY ps.Waypoint1.Position.Y = Double.Parse(parseWord(r, q)); #endregion // SimpleWaypoint 2 #region // create new waypoint for waypoint2 ps.Waypoint2 = new SimpleWaypoint(); ps.Waypoint2.Position = new UrbanChallenge.Common.Coordinates(); // set id ps.Waypoint2.ID = parseWord(r, q); // check if id is checkpointWaypointID if (ps.Waypoint2.ID == ps.CheckpointWaypointID) { ps.Waypoint2.IsCheckpoint = true; ps.Waypoint2.CheckpointID = ps.CheckpointID; } // setX ps.Waypoint2.Position.X = Double.Parse(parseWord(r, q)); // setY ps.Waypoint2.Position.Y = Double.Parse(parseWord(r, q)); #endregion } } } else if (word == "end_zone") { // Do Nothing } else { Console.WriteLine("Unrecognized: " + word); } } // Add zones to zone rndf.Zones.Add(zone); } else { if (word == "end_file") Console.WriteLine("Rndf Parse :: Successful"); else Console.WriteLine("Unknown identifier: " + word); } } return rndf; }
public static Int32 AddEditPerimeter(string projectID, string perimeterID, string perimeterName, string isMainPerimeter, string colorID, string perimeterPoints, string userID) { int perimeterIDINT; int projectIDINT; int colorIDINT; Perimeter perimeter; using (DatabaseContext _DatabaseContext = new DatabaseContext()) { if (int.TryParse(perimeterID, out perimeterIDINT) && perimeterIDINT == 0) { perimeter = new Perimeter(); // Foreign Key Project projectIDINT = Convert.ToInt32(projectID); Project project = _DatabaseContext.Projects.First(instance => instance.ProjectID == projectIDINT); perimeter.ProjectID = project.ProjectID; perimeter.ProjectReference.EntityKey = project.EntityKey; // // Foreign Key Color colorIDINT = Convert.ToInt32(colorID); Color color = _DatabaseContext.Colors.First(instance => instance.ColorID == colorIDINT); perimeter.ColorID = color.ColorID; perimeter.ColorReference.EntityKey = color.EntityKey; // perimeter.PerimeterName = perimeterName; perimeter.IsMainPerimeter = Convert.ToBoolean(isMainPerimeter); Dictionary <string, object> perimeterPointsList = (Dictionary <string, object>)(new JavaScriptSerializer().Deserialize <Object>(perimeterPoints)); if (perimeterPointsList.Count > 0) { object[] perimeterPointsObject = (object[])perimeterPointsList["perimeterPoints"]; foreach (Dictionary <string, object> perimeterPointObject in perimeterPointsObject) { PerimeterPoint perimeterPoint = new PerimeterPoint(); if (perimeterPointObject.Count == 2) { decimal obj0; decimal obj1; if (decimal.TryParse(perimeterPointObject.ToList()[0].Value.ToString(), out obj0)) { if (obj0 > 0) // is Y { perimeterPoint.Y = Convert.ToDecimal(obj0); } else if (obj0 < 0) { perimeterPoint.X = Convert.ToDecimal(obj0); } } if (decimal.TryParse(perimeterPointObject.ToList()[1].Value.ToString(), out obj1)) { if (obj1 > 0) // is X { perimeterPoint.Y = Convert.ToDecimal(obj1); } else if (obj1 < 0) { perimeterPoint.X = Convert.ToDecimal(obj1); } } perimeterPoint.PerimeterID = perimeter.PerimeterID; perimeterPoint.PerimeterReference.EntityKey = perimeter.EntityKey; perimeter.PerimeterPoints.Add(perimeterPoint); // _DatabaseContext.PerimeterPoints.AddObject(perimeterPoint); } } } perimeter.CreatedDate = DateTime.Now; perimeter.CreatorUserID = new Guid(userID); perimeter.EditedDate = DateTime.Now; perimeter.EditorUserID = new Guid(userID); _DatabaseContext.Perimeters.AddObject(perimeter); } else { perimeter = _DatabaseContext.Perimeters.First(instance => instance.PerimeterID == perimeterIDINT); // Foreign Key Color colorIDINT = Convert.ToInt32(colorID); Color color = _DatabaseContext.Colors.First(instance => instance.ColorID == colorIDINT); perimeter.ColorID = color.ColorID; perimeter.ColorReference.EntityKey = color.EntityKey; // perimeter.PerimeterName = perimeterName; perimeter.IsMainPerimeter = Convert.ToBoolean(isMainPerimeter); Dictionary <string, object> perimeterPointsList = (Dictionary <string, object>)(new JavaScriptSerializer().Deserialize <Object>(perimeterPoints)); if (perimeterPointsList.Count > 0) { List <PerimeterPoint> oldPerimeterPoints = _DatabaseContext.PerimeterPoints.Where(instance => instance.PerimeterID == perimeterIDINT).ToList(); foreach (PerimeterPoint perimeterPoint in oldPerimeterPoints) { _DatabaseContext.PerimeterPoints.DeleteObject(perimeterPoint); } object[] perimeterPointsObject = (object[])perimeterPointsList["perimeterPoints"]; foreach (Dictionary <string, object> perimeterPointObject in perimeterPointsObject) { PerimeterPoint perimeterPoint = new PerimeterPoint(); if (perimeterPointObject.Count == 2) { decimal obj0; decimal obj1; if (decimal.TryParse(perimeterPointObject.ToList()[0].Value.ToString(), out obj0)) { if (obj0 > 0) // is Y { perimeterPoint.Y = Convert.ToDecimal(obj0); } else if (obj0 < 0) { perimeterPoint.X = Convert.ToDecimal(obj0); } } if (decimal.TryParse(perimeterPointObject.ToList()[1].Value.ToString(), out obj1)) { if (obj1 > 0) // is X { perimeterPoint.Y = Convert.ToDecimal(obj1); } else if (obj1 < 0) { perimeterPoint.X = Convert.ToDecimal(obj1); } } perimeterPoint.PerimeterID = perimeter.PerimeterID; perimeterPoint.PerimeterReference.EntityKey = perimeter.EntityKey; perimeter.PerimeterPoints.Add(perimeterPoint); // _DatabaseContext.PerimeterPoints.AddObject(perimeterPoint); } //PerimeterPoint perimeterPoint = new PerimeterPoint(); //perimeterPoint.Y = Convert.ToDecimal(perimeterPointObject["Ya"]); //perimeterPoint.X = Convert.ToDecimal(perimeterPointObject["Za"]); //perimeterPoint.PerimeterID = perimeter.PerimeterID; //perimeterPoint.PerimeterReference.EntityKey = perimeter.EntityKey; //perimeter.PerimeterPoints.Add(perimeterPoint); //// _DatabaseContext.PerimeterPoints.AddObject(perimeterPoint); } } perimeter.EditedDate = DateTime.Now; perimeter.EditorUserID = new Guid(userID); } _DatabaseContext.SaveChanges(); return(_DatabaseContext.Perimeters.ToArray()[_DatabaseContext.Perimeters.Count() - 1].PerimeterID); } }
public static object SetPerimeterFromSIP(string projectID, string JStr, string userID) { Project project = new ProjectBLL().GetProjectByProjectId2(Convert.ToInt32(projectID)); using (DatabaseContext _DatabaseContext = new DatabaseContext()) { var nList = new JavaScriptSerializer().Deserialize <Object>(JStr); ProjectInfoTreeLocation projectInfoTreeLocation = project.ProjectInfoTreeLocations.Count == 0 ? new ProjectInfoTreeLocation() : _DatabaseContext.ProjectInfoTreeLocations.First(instance => instance.ProjectID == project.ProjectID); projectInfoTreeLocation.X = ((Dictionary <string, object>)nList).ContainsKey("X") ? Convert.ToDecimal(((Dictionary <string, object>)nList)["X"]) : projectInfoTreeLocation.X; projectInfoTreeLocation.Y = ((Dictionary <string, object>)nList).ContainsKey("Y") ? Convert.ToDecimal(((Dictionary <string, object>)nList)["Y"]) : projectInfoTreeLocation.Y; string url = "http://www.gis.sip.pr.gov/ArcGIS/rest/services/Tools/Localizdor_JS8/MapServer/identify?f=json&geometry=%7B%22" + "x%22%3A" + miX + "%2C%22" + "y%22%3A" + miY + "%2C%22" + "spatialReference%22%3A%7B%22wkid%22%3A32161%7D%7D&tolerance=1&returnGeometry=true&mapExtent=%7B%22" + "xmin%22%3A" + miX + "%2C%22" + "ymin%22%3A" + miY + "%2C%22" + "xmax%22%3A" + miX + "%2C%22" + "ymax%22%3A" + miY + "%2C%22" + "spatialReference%22%3A%7B%22wkid%22%3A32161%7D%7D&imageDisplay=1920%2C304%2C96&geometryType=esriGeometryPoint&sr=32161&layers=all%3A0&callback=dojo.io.script.jsonp_dojoIoScript6._jsonpCallback"; var json = new WebClient().DownloadString(url); var points = new JavaScriptSerializer().Deserialize <Object>(json.Replace("dojo.io.script.jsonp_dojoIoScript6._jsonpCallback(", "").Replace(");", "")); JObject j = JObject.FromObject(points); JArray jArray = GetRings(j); Perimeter mainPerimeter = _DatabaseContext.Perimeters.FirstOrDefault(instance => instance.IsMainPerimeter); if (mainPerimeter != null) { mainPerimeter.IsMainPerimeter = false; mainPerimeter.PerimeterName = "Perímetro"; // Foreign Key Color Color blue = _DatabaseContext.Colors.First(instance => instance.ColorID == 1); mainPerimeter.ColorID = blue.ColorID; mainPerimeter.ColorReference.EntityKey = blue.EntityKey; // } Perimeter newPerimeter = new Perimeter(); List <PerimeterPoint> perimeterPoints = new List <PerimeterPoint>(); List <object> perimeterPointsObjects = new List <object>(); // Initialize a context using (JavascriptContext context = new JavascriptContext()) { System.Collections.Generic.Dictionary <string, object> anewpointObj = new Dictionary <string, object>(); using (var streamReader = new StreamReader(new Page().Server.MapPath(@"~/App_Resources\client-scripts\tl\proj4js-compressed.js"))) { context.Run(streamReader.ReadToEnd() + ScriptFileSeparator); } foreach (JToken JToken1 in jArray) { foreach (JToken JToken2 in JToken1) { // Script string script = @" function ConvertToLatLng(x, y) { Proj4js.defs[""EPSG:32161""] = ""+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs""; Proj4js.defs[""EPSG:4326""] = ""+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs""; var source = new Proj4js.Proj('EPSG:32161'); var dest = new Proj4js.Proj('EPSG:4326'); var anewpoint = new Proj4js.Point(x, y); Proj4js.transform(source, dest, anewpoint); return anewpoint; } var anewpoint = ConvertToLatLng(parseFloat('" + ((JValue)(JToken2[0])).Value.ToString() + "'),parseFloat('" + ((JValue)(JToken2[1])).Value.ToString() + "')); "; // Running the script context.Run(script); // Getting a parameter anewpointObj = (System.Collections.Generic.Dictionary <string, object>)context.GetParameter("anewpoint"); PerimeterPoint perimeterPoint = new PerimeterPoint(); perimeterPoint.Y = Convert.ToDecimal(anewpointObj["y"]); perimeterPoint.X = Convert.ToDecimal(anewpointObj["x"]); perimeterPoint.PerimeterID = newPerimeter.PerimeterID; perimeterPoint.PerimeterReference.EntityKey = newPerimeter.EntityKey; newPerimeter.PerimeterPoints.Add(perimeterPoint); var perimeterPointObject = new { perimeterPoint.PerimeterID, perimeterPoint.PerimeterPointID, perimeterPoint.X, perimeterPoint.Y }; perimeterPointsObjects.Add(perimeterPointObject); } } } newPerimeter.IsMainPerimeter = true; newPerimeter.PerimeterName = "Perímetro Principal"; newPerimeter.CreatedDate = DateTime.Now; newPerimeter.CreatorUserID = new Guid(userID); newPerimeter.EditedDate = DateTime.Now; newPerimeter.EditorUserID = new Guid(userID); // Foreign Key Project newPerimeter.ProjectID = project.ProjectID; newPerimeter.ProjectReference.EntityKey = project.EntityKey; // // Foreign Key Color Color red = _DatabaseContext.Colors.First(instance => instance.ColorID == 2); newPerimeter.ColorID = red.ColorID; newPerimeter.ColorReference.EntityKey = red.EntityKey; // _DatabaseContext.Perimeters.AddObject(newPerimeter); _DatabaseContext.SaveChanges(); var perimeterObject = new { newPerimeter.ColorID, newPerimeter.Color.Code, newPerimeter.Color.ColorDesc, newPerimeter.IsMainPerimeter, newPerimeter.PerimeterID, newPerimeter.PerimeterName, PerimeterPoints = perimeterPointsObjects, newPerimeter.ProjectID }; return(perimeterObject); } }
// Creates Rndf from an input FileStream public IRndf createRndf(FileStream fileStream) { numWps = 0; // File in Read Only mode, convert to stream StreamReader r = new StreamReader(fileStream, Encoding.UTF8); // Create new queue for input buffer Queue q = new Queue(); string word = ""; // Create the Rndf (with only segments for now, no zones) IRndf rndf = new IRndf(); rndf.Segments = new List <SimpleSegment>(); rndf.Zones = new List <SimpleZone>(); // Loop until reach end of file marker while ((word.Length < 8) || (word.Substring(0, 8) != "end_file")) { // get the next word word = parseWord(r, q); if (word == "RNDF_name") { word = parseWord(r, q); rndf.Name = word; } else if (word == "num_segments") { word = parseWord(r, q); rndf.NumSegs = int.Parse(word); } else if (word == "num_zones") { word = parseWord(r, q); rndf.NumZones = int.Parse(word); } else if (word == "format_version") { word = parseWord(r, q); rndf.FormatVersion = word; } else if (word == "creation_date") { word = parseWord(r, q); rndf.CreationDate = word; } else if (word == "segment") { // create new segment SimpleSegment seg = new SimpleSegment(); seg.Lanes = new List <SimpleLane>(); word = parseWord(r, q); seg.Id = word; // run until reach end of segment marker while (word != "end_segment") { // get next word word = parseWord(r, q); if (word == "segment_name") { word = parseWord(r, q); seg.Name = word; } else if (word == "num_lanes") { word = parseWord(r, q); seg.NumLanes = int.Parse(word); } else if (word == "end_segment") { // do nothing if at the end } else if (word == "lane") { // Create new lane SimpleLane ln = new SimpleLane(); ln.Checkpoints = new List <SimpleCheckpoint>(); ln.Waypoints = new List <SimpleWaypoint>(); ln.Stops = new List <string>(); ln.ExitEntries = new List <SimpleExitEntry>(); word = parseWord(r, q); ln.Id = word; // run until reach end of lane while (word != "end_lane") { // get next word word = parseWord(r, q); if (word == "num_waypoints") { word = parseWord(r, q); ln.NumWaypoints = int.Parse(word); } else if (word == "checkpoint") { // create checkpoint SimpleCheckpoint cp = new SimpleCheckpoint(); // get waypoint id string wp = parseWord(r, q); cp.WaypointId = wp; // get checkpoint id string id = parseWord(r, q); cp.CheckpointId = id; // add to collection of checkpoints within lane ln.Checkpoints.Add(cp); } else if (word == "lane_width") { word = parseWord(r, q); ln.LaneWidth = double.Parse(word); } else if (word == "stop") { word = parseWord(r, q); ln.Stops.Add(word); } else if (word == "left_boundary") { word = parseWord(r, q); ln.LeftBound = word; } else if (word == "right_boundary") { word = parseWord(r, q); ln.RightBound = word; } else if (word == "exit") { // create exit-entry pair SimpleExitEntry exitEntry = new SimpleExitEntry(); // get the exit id string exit = parseWord(r, q); exitEntry.ExitId = exit; // get the entry id string entry = parseWord(r, q); exitEntry.EntryId = entry; // add to collection of exit-entry pairs within lane ln.ExitEntries.Add(exitEntry); } else if (word == "end_lane") { // do nothing } // Otherwise we probably have a waypoint else { // check to make sure a wp by matching lane id to lane identifier of waypoint int laneIdLength = ln.Id.Length; // if waypoint matches then create the waypoint if (word.Length >= laneIdLength + 2 && (word.Substring(0, laneIdLength)).CompareTo(ln.Id) == 0) { // create a new waypoint SimpleWaypoint wp = new SimpleWaypoint(); wp.Position = new UrbanChallenge.Common.Coordinates(); // set its id wp.ID = word; // get latitude or X string lat = parseWord(r, q); wp.Position.X = double.Parse(lat); // get longitude or y string lon = parseWord(r, q); wp.Position.Y = double.Parse(lon); // add to lane's collection of waypoints ln.Waypoints.Add(wp); numWps += 1; } else { Console.WriteLine("Unknown identifier: " + word); } } } seg.Lanes.Add(ln); } else { Console.WriteLine("Unknown identifier: " + word); } } rndf.Segments.Add(seg); } else if (word == "zone") { // create new zone SimpleZone zone = new SimpleZone(); zone.ParkingSpots = new List <ParkingSpot>(); // get ID word = parseWord(r, q); zone.ZoneID = word; // run until reach end of segment marker while (word != "end_zone") { // get next word word = parseWord(r, q); if (word == "num_spots") { // get next word word = parseWord(r, q); // set num of parking spots zone.NumParkingSpots = int.Parse(word); } else if (word == "zone_name") { // get next word word = parseWord(r, q); // set zone name zone.Name = word; } else if (word == "perimeter") { // create perimeter zone.Perimeter = new ZonePerimeter(); zone.Perimeter.ExitEntries = new List <SimpleExitEntry>(); zone.Perimeter.PerimeterPoints = new List <PerimeterPoint>(); // set perimeter id zone.Perimeter.PerimeterID = parseWord(r, q); while (word != "end_perimeter") { // get next word word = parseWord(r, q); if (word == "num_perimeterpoints") { // set num of perimeter points zone.Perimeter.NumPerimeterPoints = int.Parse(parseWord(r, q)); } else if (word == "exit") { // create new exit,entry SimpleExitEntry ee = new SimpleExitEntry(); // set exit ee.ExitId = parseWord(r, q); // set entry ee.EntryId = parseWord(r, q); // add to perimeter exit entries zone.Perimeter.ExitEntries.Add(ee); } else if (word == "end_perimeter") { // Do Nothing } else { // create new perimeter point PerimeterPoint p = new PerimeterPoint(); // set id p.ID = word; // create new coordinate p.position = new UrbanChallenge.Common.Coordinates(); // setX p.position.X = Double.Parse(parseWord(r, q)); // setY p.position.Y = Double.Parse(parseWord(r, q)); // add to perimeter points zone.Perimeter.PerimeterPoints.Add(p); } } } else if (word == "spot") { // create a new spot ParkingSpot ps = new ParkingSpot(); // set spot id ps.SpotID = parseWord(r, q); while (word != "end_spot") { // get next word word = parseWord(r, q); if (word == "spot_width") { // set spot width ps.SpotWidth = parseWord(r, q); } else if (word == "checkpoint") { // get waypoint id that corresponds with checkpoint ps.CheckpointWaypointID = parseWord(r, q); // get checkpoint id ps.CheckpointID = parseWord(r, q); } else if (word == "end_spot") { // add spot to zone zone.ParkingSpots.Add(ps); } else { // SimpleWaypoint 1 #region // create new waypoint for waypoint1 ps.Waypoint1 = new SimpleWaypoint(); ps.Waypoint1.Position = new UrbanChallenge.Common.Coordinates(); // set id ps.Waypoint1.ID = word; // check if id is checkpointWaypointID if (ps.Waypoint1.ID == ps.CheckpointWaypointID) { ps.Waypoint1.IsCheckpoint = true; ps.Waypoint1.CheckpointID = ps.CheckpointID; } // setX ps.Waypoint1.Position.X = Double.Parse(parseWord(r, q)); // setY ps.Waypoint1.Position.Y = Double.Parse(parseWord(r, q)); #endregion // SimpleWaypoint 2 #region // create new waypoint for waypoint2 ps.Waypoint2 = new SimpleWaypoint(); ps.Waypoint2.Position = new UrbanChallenge.Common.Coordinates(); // set id ps.Waypoint2.ID = parseWord(r, q); // check if id is checkpointWaypointID if (ps.Waypoint2.ID == ps.CheckpointWaypointID) { ps.Waypoint2.IsCheckpoint = true; ps.Waypoint2.CheckpointID = ps.CheckpointID; } // setX ps.Waypoint2.Position.X = Double.Parse(parseWord(r, q)); // setY ps.Waypoint2.Position.Y = Double.Parse(parseWord(r, q)); #endregion } } } else if (word == "end_zone") { // Do Nothing } else { Console.WriteLine("Unrecognized: " + word); } } // Add zones to zone rndf.Zones.Add(zone); } else { if (word == "end_file") { Console.WriteLine("Rndf Parse :: Successful"); } else { Console.WriteLine("Unknown identifier: " + word); } } } return(rndf); }
partial void OnPerimeterPointDeleted(PerimeterPoint perimeterPoint);
partial void OnPerimeterPointSaved(PerimeterPoint perimeterPoint);
partial void OnPerimeterPointUpdated(PerimeterPoint perimeterPoint);
partial void OnPerimeterPointCreated(PerimeterPoint perimeterPoint);
partial void OnPerimeterPointSaving(PerimeterPoint perimeterPoint);