public static void LoadSubstations(List <PowerEntity> elements, double newX, double newY, List <double> xPoints, List <double> yPoints) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("Geographic.xml"); XmlNodeList nodeList; nodeList = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Substations/SubstationEntity"); foreach (XmlNode node in nodeList) { SubstationEntity sub = new SubstationEntity(); sub.Id = long.Parse(node.SelectSingleNode("Id").InnerText); sub.Name = node.SelectSingleNode("Name").InnerText; sub.X = double.Parse(node.SelectSingleNode("X").InnerText); sub.Y = double.Parse(node.SelectSingleNode("Y").InnerText); sub.ToolTip = "Substation\nID: " + sub.Id + " \n Name: " + sub.Name; elements.Add(sub); Converter.ToLatLon(sub.X, sub.Y, 34, out newX, out newY); xPoints.Add(newX); yPoints.Add(newY); } }
private static void LoadSubstationEntities(XmlNodeList nodeList) { foreach (XmlNode node in nodeList) { SubstationEntity sub = new SubstationEntity(); sub.Id = long.Parse(node.SelectSingleNode("Id").InnerText); sub.Name = node.SelectSingleNode("Name").InnerText; sub.X = double.Parse(node.SelectSingleNode("X").InnerText); sub.Y = double.Parse(node.SelectSingleNode("Y").InnerText); substationEntities.Add(sub); } }
public static int AdditionalTask8SU(SubstationEntity item) { int counter = 0; foreach (var line in DataContainers.Containers.GetLines) { if (line.FirstEnd == item.Id || line.SecondEnd == item.Id) { ++counter; } } return(counter); }
private void LoadSubstations(XmlDocument xmlDoc) { double noviX, noviY; SubstationEntity sub; XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Substations/SubstationEntity"); foreach (XmlNode node in nodeList) { sub = new SubstationEntity(); sub.Id = long.Parse(node.SelectSingleNode("Id").InnerText); sub.Name = node.SelectSingleNode("Name").InnerText; sub.X = double.Parse(node.SelectSingleNode("X").InnerText); sub.Y = double.Parse(node.SelectSingleNode("Y").InnerText); ToLatLon(sub.X, sub.Y, 34, out noviX, out noviY); sub.TranslatedX = noviX; sub.TranslatedY = noviY; PowerGrid.PowerEntities.Add(sub.Id, sub); } }
public static void GetSubstations(XmlDocument xmlDocument, double boundaryMaxX, double boundaryMinX, double boundaryMaxY, double boundaryMinY, List <Point> points, List <SubstationEntity> substationEntities) { var nodeList = xmlDocument.DocumentElement.SelectNodes("/NetworkModel/Substations/SubstationEntity"); foreach (XmlNode node in nodeList) { SubstationEntity sub = new SubstationEntity(); sub.Id = long.Parse(node.SelectSingleNode("Id").InnerText); sub.Name = node.SelectSingleNode("Name").InnerText; sub.X = double.Parse(node.SelectSingleNode("X").InnerText); sub.Y = double.Parse(node.SelectSingleNode("Y").InnerText); Converter.ToLatLon(sub.X, sub.Y, 34, out double newX, out double newY); if (newX < boundaryMaxX && newX > boundaryMinX && newY < boundaryMaxY && newY > boundaryMinY) { points.Add(new Models.Point(newX, newY, sub.Id, sub.Name, "")); substationEntities.Add(sub); } } }
private void ParseSubstations() { double newX, newY; foreach (XmlNode node in substationNodeList) { SubstationEntity sub = new SubstationEntity(); sub.Id = long.Parse(node.SelectSingleNode("Id").InnerText); sub.Name = node.SelectSingleNode("Name").InnerText; sub.X = double.Parse(node.SelectSingleNode("X").InnerText); sub.Y = double.Parse(node.SelectSingleNode("Y").InnerText); ToLatLon(sub.X, sub.Y, 34, out newX, out newY); sub.X = newX; sub.Y = newY; if (sub.X > maxCoordX) { maxCoordX = sub.X; } if (sub.X < minCoordX) { minCoordX = sub.X; } if (sub.Y > maxCoordY) { maxCoordY = sub.Y; } if (sub.Y < minCoordY) { minCoordY = sub.Y; } allSubstations.Add(sub); } }
public static Ellipse DrawSubstationImage(int indexI, int indexJ, Canvas myCanvas, SubstationEntity station) { Ellipse element = new Ellipse() { Width = 3, Height = 3, Fill = Brushes.LightGreen }; element.ToolTip = $"ID: {station.Id}\nSubstation Entity\nName: {station.Name}"; Canvas.SetLeft(element, ((double)indexJ - MinJ) / (MaxJ - MinJ) * myCanvas.Width); Canvas.SetTop(element, ((double)indexI - MinI) / (MaxI - MinI) * myCanvas.Height); return(element); }
public void ParseAll(string filePath) { XElement xelement = XElement.Load(filePath); IEnumerable <XElement> netModElements = xelement.Elements(); double lat, lon; XmlSerializer serializer = null; // Read the entire XML foreach (var netModElement in netModElements) { foreach (var entity in netModElement.Elements()) { var temp = entity.ToString(); using (TextReader reader = new StringReader(temp)) { SubstationEntity resultSubstations = null; Breakers resultBreakers = null; EnergySources resultEnergySources = null; EnergyConsumers resultEnergyConsumers = null; Generator resultGenerators = null; switch (entity.Name.ToString()) { case "SubstationEntity": serializer = new XmlSerializer(typeof(SubstationEntity)); resultSubstations = (SubstationEntity)serializer.Deserialize(reader); ToLatLon(((SubstationEntity)resultSubstations).X, ((SubstationEntity)resultSubstations).Y, 34, out lat, out lon); ((SubstationEntity)resultSubstations).X = lat; ((SubstationEntity)resultSubstations).Y = lon; break; case "Breaker": serializer = new XmlSerializer(typeof(Breakers)); resultBreakers = (Breakers)serializer.Deserialize(reader); ToLatLon(((Breakers)resultBreakers).X, ((Breakers)resultBreakers).Y, 34, out lat, out lon); ((Breakers)resultBreakers).X = lat; ((Breakers)resultBreakers).Y = lon; break; case "EnergySource": serializer = new XmlSerializer(typeof(EnergySources)); resultEnergySources = (EnergySources)serializer.Deserialize(reader); ToLatLon(((EnergySources)resultEnergySources).X, ((EnergySources)resultEnergySources).Y, 34, out lat, out lon); ((EnergySources)resultEnergySources).X = lat; ((EnergySources)resultEnergySources).Y = lon; break; case "EnergyConsumer": serializer = new XmlSerializer(typeof(EnergyConsumers)); resultEnergyConsumers = (EnergyConsumers)serializer.Deserialize(reader); ToLatLon(((EnergyConsumers)resultEnergyConsumers).X, ((EnergyConsumers)resultEnergyConsumers).Y, 34, out lat, out lon); ((EnergyConsumers)resultEnergyConsumers).X = lat; ((EnergyConsumers)resultEnergyConsumers).Y = lon; break; case "Generator": serializer = new XmlSerializer(typeof(Generator)); resultGenerators = (Generator)serializer.Deserialize(reader); ToLatLon(((Generator)resultGenerators).X, ((Generator)resultGenerators).Y, 34, out lat, out lon); ((Generator)resultGenerators).X = lat; ((Generator)resultGenerators).Y = lon; break; } if (resultSubstations != null) { entitiesSustation.Add(resultSubstations); } else if (resultBreakers != null) { entitiesBreaker.Add(resultBreakers); } else if (resultEnergySources != null) { entitiesEnergySource.Add(resultEnergySources); } else if (resultEnergyConsumers != null) { entitiesEnergyConsumer.Add(resultEnergyConsumers); } else if (resultGenerators != null) { entitiesGenerator.Add(resultGenerators); } } } } }
void LoadData() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("Geographic.xml"); if (xmlDoc.DocumentElement == null) { return; } var nodeListSubstation = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Substations/SubstationEntity"); var nodeListSwitch = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Switches/SwitchEntity"); var nodeListLines = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Lines/LineEntity"); var nodeListNode = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Nodes/NodeEntity"); foreach (XmlNode node in nodeListSubstation) { var entity = new SubstationEntity(); ParsePowerEntity(node, entity); var spot = Create3DObject(entity, System.Windows.Media.Color.FromRgb(255, 0, 0), .1); } foreach (XmlNode node in nodeListNode) { var entity = new NodeEntity(); ParsePowerEntity(node, entity); var spot = Create3DObject(entity, System.Windows.Media.Color.FromRgb(255, 0, 0), .1); } foreach (XmlNode node in nodeListSwitch) { var entity = new SwitchEntity(); ParsePowerEntity(node, entity); var spot = Create3DObject(entity, System.Windows.Media.Color.FromRgb(255, 0, 0), .1); } foreach (XmlNode item in nodeListLines) { var line = new LineEntity { Id = long.Parse(item.SelectSingleNode("Id")?.InnerText ?? string.Empty), Name = item.SelectSingleNode("Name")?.InnerText, IsUnderground = bool.Parse(item.SelectSingleNode("IsUnderground")?.InnerText ?? string.Empty), LineType = item.SelectSingleNode("LineType")?.InnerText, R = float.Parse(item.SelectSingleNode("R")?.InnerText ?? string.Empty), FirstEnd = long.Parse(item.SelectSingleNode("FirstEnd")?.InnerText ?? string.Empty), SecondEnd = long.Parse(item.SelectSingleNode("SecondEnd")?.InnerText ?? string.Empty), ConductorMaterial = item.SelectSingleNode("ConductorMaterial")?.InnerText, ThermalConstantHeat = long.Parse(item.SelectSingleNode("ThermalConstantHeat")?.InnerText ?? string.Empty), Vertices = new List <Point>() }; foreach (XmlNode pointNode in item.ChildNodes[9].ChildNodes) { var xRaw = double.Parse(pointNode.SelectSingleNode("X")?.InnerText ?? string.Empty); var yRaw = double.Parse(pointNode.SelectSingleNode("Y")?.InnerText ?? string.Empty); Utility.ToLatLon(xRaw, yRaw, 34, out var lat, out var lon); line.Vertices.Add(new Point() { X = lat, Y = lon }); } var firstEnd = instantiatedObject.FirstOrDefault(x => x.Entity.Id == line.FirstEnd); var secondEnd = instantiatedObject.FirstOrDefault(x => x.Entity.Id == line.SecondEnd); if (firstEnd == null || secondEnd == null) { continue; } firstEnd.ConnectionCount++; secondEnd.ConnectionCount++; Utility.ToLatLon(firstEnd.Entity.X, firstEnd.Entity.Y, 34, out var xFirst, out var yFirst); Utility.ToLatLon(secondEnd.Entity.X, secondEnd.Entity.Y, 34, out var xSecond, out var ySecond); if (mapper.IsInRange(xFirst, yFirst) == false || mapper.IsInRange(xSecond, ySecond) == false) { continue; } var v1 = mapper.Convert(line.Vertices[0].X, line.Vertices[0].Y); var vn = mapper.Convert(line.Vertices[line.Vertices.Count - 1].X, line.Vertices[line.Vertices.Count - 1].Y); #region hideTHis vertexId = 0; var mesh = new MeshGeometry3D(); CreateLineSegment(firstEnd.X, firstEnd.Y, v1.X, v1.Y, mesh); for (int i = 0; i < line.Vertices.Count - 1; i++) { var p1 = mapper.Convert(line.Vertices[i].X, line.Vertices[i].Y); var p2 = mapper.Convert(line.Vertices[i + 1].X, line.Vertices[i + 1].Y); CreateLineSegment(p1.X, p1.Y, p2.X, p2.Y, mesh); } CreateLineSegment(vn.X, vn.Y, secondEnd.X, secondEnd.Y, mesh); var mat = new DiffuseMaterial { Brush = new SolidColorBrush(Colors.DarkRed) }; var surfaceModel = new GeometryModel3D(mesh, mat) { BackMaterial = mat, Transform = new Transform3DGroup() { Children = new Transform3DCollection() { new TranslateTransform3D(0, 0, 0.01) } } }; mainModel3DGroup.Children.Add(surfaceModel); var lineComponent = new LineContainer(firstEnd, secondEnd, line, surfaceModel); lines.Add(line.Id, lineComponent); #endregion } // foreach (var path in iterator.FindPaths(entities, spots, lines.Values.ToList())) { //#region Sa prekalapanjem //// Ovde je sa preklapanjem ////Polyline s = new Polyline(); ////s.Stroke = new SolidColorBrush(Color.FromRgb(0, 0, 0)); ////s.StrokeThickness = 0.5; ////foreach (var pat in paths.spots) ////{ //// s.Points.Add(new System.Windows.Point(pat.X, pat.Y)); ////} ////canvas.Children.Add(s); //#endregion //entityLineLines[path.lineEntityId] = new List<LineSegmentContainer>(); //for (int i = 0; i < path.spots.Count - 1; i++) //{ // if (path.spots[i].IsOccupied == false || path.spots[i + 1].IsOccupied == false) // overlap check // { // Polyline s = new Polyline(); // var p1 = new System.Windows.Point(path.spots[i].X, path.spots[i].Y); // var p2 = new System.Windows.Point(path.spots[i + 1].X, path.spots[i + 1].Y); // s.Points.Add(p1); // s.Points.Add(p2); // path.spots[i].AssignLinePart(path.lineEntityId); // entityLineLines[path.lineEntityId].Add(new LineSegmentContainer() { line = s, p1 = path.spots[i], p2 = path.spots[i + 1] }); // if (path.spots[i].IsOccupied && path.spots[i].Entities.Count == 0) // { // path.spots[i].AssignCross(); // } // path.spots[i].IsOccupied = true; // s.Stroke = new SolidColorBrush(Color.FromRgb(0, 0, 0)); // s.StrokeThickness = 0.5; // canvas.Children.Add(s); // s.MouseRightButtonDown += path.spots[i].RightClickOnThis; // s.MouseEnter += OnHoverOverLine; // } // else // { // bool found = false; // foreach (var item in entityLineLines.Values) // { // if (found) // break; // foreach (var l in item) // { // if (path.spots[i] == l.p1 && path.spots[i + 1] == l.p2) // { // found = true; // entityLineLines[path.lineEntityId].Add(l); // break; // } // } // } // } //} } foreach (var obj in instantiatedObject) { if (obj.ConnectionCount < 3) { obj.Model.Material = new DiffuseMaterial { Brush = new SolidColorBrush(Color.FromRgb(255, 127, 127)) }; } else if (obj.ConnectionCount >= 3 && obj.ConnectionCount < 5) { obj.Model.Material = new DiffuseMaterial { Brush = new SolidColorBrush(Color.FromRgb(255, 70, 70)) }; } else { obj.Model.Material = new DiffuseMaterial { Brush = new SolidColorBrush(Color.FromRgb(255, 0, 0)) }; } } }
public static void LoadModel(string path) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(path); XmlNodeList nodeList; nodeList = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Substations/SubstationEntity"); foreach (XmlNode node in nodeList) { SubstationEntity substationEntity = new SubstationEntity(); substationEntity.Id = UInt64.Parse(node.SelectSingleNode("Id").InnerText); substationEntity.Name = node.SelectSingleNode("Name").InnerText; substationEntity.X = double.Parse(node.SelectSingleNode("X").InnerText); substationEntity.Y = double.Parse(node.SelectSingleNode("Y").InnerText); double newX, newY; ToLatLonConverter.ToLatLon(substationEntity.X, substationEntity.Y, 34, out newX, out newY); substationEntity.X = newX; substationEntity.Y = newY; MinMaxCoordCheck.Check(newX, newY); NetworkModel.substationEntities.Add(substationEntity); } nodeList = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Nodes/NodeEntity"); foreach (XmlNode node in nodeList) { NodeEntity nodeEntity = new NodeEntity(); nodeEntity.Id = UInt64.Parse(node.SelectSingleNode("Id").InnerText); nodeEntity.Name = node.SelectSingleNode("Name").InnerText; nodeEntity.X = double.Parse(node.SelectSingleNode("X").InnerText); nodeEntity.Y = double.Parse(node.SelectSingleNode("Y").InnerText); double newX, newY; ToLatLonConverter.ToLatLon(nodeEntity.X, nodeEntity.Y, 34, out newX, out newY); nodeEntity.X = newX; nodeEntity.Y = newY; MinMaxCoordCheck.Check(newX, newY); NetworkModel.nodeEntities.Add(nodeEntity); } nodeList = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Switches/SwitchEntity"); foreach (XmlNode node in nodeList) { SwitchEntity switchEntity = new SwitchEntity(); switchEntity.Id = UInt64.Parse(node.SelectSingleNode("Id").InnerText); switchEntity.Name = node.SelectSingleNode("Name").InnerText; switchEntity.X = double.Parse(node.SelectSingleNode("X").InnerText); switchEntity.Y = double.Parse(node.SelectSingleNode("Y").InnerText); switchEntity.Status = node.SelectSingleNode("Status").InnerText; double newX, newY; ToLatLonConverter.ToLatLon(switchEntity.X, switchEntity.Y, 34, out newX, out newY); switchEntity.X = newX; switchEntity.Y = newY; MinMaxCoordCheck.Check(newX, newY); NetworkModel.switchEntities.Add(switchEntity); } nodeList = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Lines/LineEntity"); foreach (XmlNode node in nodeList) { LineEntity lineEntity = new LineEntity(); lineEntity.Id = ulong.Parse(node.SelectSingleNode("Id").InnerText); lineEntity.Name = node.SelectSingleNode("Name").InnerText; if (node.SelectSingleNode("IsUnderground").InnerText.Equals("true")) { lineEntity.IsUnderground = true; } else { lineEntity.IsUnderground = false; } lineEntity.R = float.Parse(node.SelectSingleNode("R").InnerText); lineEntity.ConductorMaterial = node.SelectSingleNode("ConductorMaterial").InnerText; lineEntity.LineType = node.SelectSingleNode("LineType").InnerText; lineEntity.ThermalConstantHeat = long.Parse(node.SelectSingleNode("ThermalConstantHeat").InnerText); lineEntity.FirstEnd = ulong.Parse(node.SelectSingleNode("FirstEnd").InnerText); lineEntity.SecondEnd = ulong.Parse(node.SelectSingleNode("SecondEnd").InnerText); foreach (XmlNode pointNode in node.ChildNodes[9].ChildNodes) // 9 posto je Vertices 9. node u jednom line objektu { Point point = new Point(); point.X = double.Parse(pointNode.SelectSingleNode("X").InnerText); point.Y = double.Parse(pointNode.SelectSingleNode("Y").InnerText); double newX, newY; ToLatLonConverter.ToLatLon(point.X, point.Y, 34, out newX, out newY); point.X = newX; point.Y = newY; //NetworkModel.vertices.Add(lineEntity); } NetworkModel.vertices.Add(lineEntity); } }
public static NetworkModel LoadModelToMap(NetworkModel networkModel, ModelVisual3D myModel) { networkModel = XmlHandler.Load <NetworkModel>(@"..\..\Geographic.xml"); // SUBSTATIONS for (int i = 0; i < networkModel.Substations.Count; i++) { SubstationEntity s = networkModel.Substations[i]; double latitude, longitude, mapX, mapY; CoordinatesHandler.ToLatLon(networkModel.Substations[i].X, networkModel.Substations[i].Y, 34, out latitude, out longitude); networkModel.Substations[i].X = latitude; networkModel.Substations[i].Y = longitude; CoordinatesHandler.FromCoordinatesToMapPosition(latitude, longitude, out mapX, out mapY); networkModel.Substations[i].MapX = mapX; networkModel.Substations[i].MapY = mapY; if (mapX != -1 && mapY != -1) { double z = 0; if (Points.Count != 0 || i != 0) { int index = 0; double x; double y; if (HasEntityInRadius(mapX, mapY, out index, out x, out y)) { s.MapX = x; s.MapY = y; mapX = x; mapY = y; Points[index].Count++; z = 0.05 * Points[index].Count; } else { z = 0; Points.Add(new PointStack(mapX, mapY, 0)); } } else { z = 0; Points.Add(new PointStack(mapX, mapY, 0)); } GeometryModel3D model3D = ScreenHandler.Make3DCube(mapX, mapY, z, 0.05, EntityType.Substation); TransformationHandler.models.Add(model3D); Entities.Add(TransformationHandler.models.Count - 1, s); ScreenHandler.Draw3DCube(model3D, myModel); } } // NODES for (int i = 0; i < networkModel.Nodes.Count; i++) { NodeEntity n = networkModel.Nodes[i]; double latitude, longitude, mapX, mapY; CoordinatesHandler.ToLatLon(networkModel.Nodes[i].X, networkModel.Nodes[i].Y, 34, out latitude, out longitude); networkModel.Nodes[i].X = latitude; networkModel.Nodes[i].Y = longitude; CoordinatesHandler.FromCoordinatesToMapPosition(latitude, longitude, out mapX, out mapY); networkModel.Nodes[i].MapX = mapX; networkModel.Nodes[i].MapY = mapY; if (mapX != -1 && mapY != -1) { double z = 0; if (i != 0) { int index = 0; double x; double y; if (HasEntityInRadius(mapX, mapY, out index, out x, out y)) { n.MapX = x; n.MapY = y; mapX = x; mapY = y; Points[index].Count++; z = 0.05 * Points[index].Count; } else { z = 0; Points.Add(new PointStack(mapX, mapY, 0)); } } else { z = 0; Points.Add(new PointStack(mapX, mapY, 0)); } GeometryModel3D model3D = ScreenHandler.Make3DCube(mapX, mapY, z, 0.05, EntityType.Node); TransformationHandler.models.Add(model3D); Entities.Add(TransformationHandler.models.Count - 1, n); ScreenHandler.Draw3DCube(model3D, myModel); } } // SWITCHES for (int i = 0; i < networkModel.Switches.Count; i++) { SwitchEntity s = networkModel.Switches[i]; double latitude, longitude, mapX, mapY; CoordinatesHandler.ToLatLon(networkModel.Switches[i].X, networkModel.Switches[i].Y, 34, out latitude, out longitude); networkModel.Switches[i].X = latitude; networkModel.Switches[i].Y = longitude; CoordinatesHandler.FromCoordinatesToMapPosition(latitude, longitude, out mapX, out mapY); networkModel.Switches[i].MapX = mapX; networkModel.Switches[i].MapY = mapY; if (mapX != -1 && mapY != -1) { double z = 0; if (i != 0) { int index = 0; double x; double y; if (HasEntityInRadius(mapX, mapY, out index, out x, out y)) { s.MapX = x; s.MapY = y; mapX = x; mapY = y; Points[index].Count++; z = 0.05 * Points[index].Count; } else { z = 0; Points.Add(new PointStack(mapX, mapY, 0)); } } else { z = 0; Points.Add(new PointStack(mapX, mapY, 0)); } GeometryModel3D model3D = ScreenHandler.Make3DCube(mapX, mapY, z, 0.05, EntityType.Switch); TransformationHandler.models.Add(model3D); Entities.Add(TransformationHandler.models.Count - 1, s); ScreenHandler.Draw3DCube(model3D, myModel); } } // LINES int cnt = 0; for (int i = 0; i < networkModel.Lines.Count; i++) { Entity entityStart = null; Entity entityEnd = null; entityStart = Entities.Values.ToList().Where(x => x.Id == networkModel.Lines[i].FirstEnd).FirstOrDefault(); entityEnd = Entities.Values.Where(x => x.Id == networkModel.Lines[i].SecondEnd).FirstOrDefault(); if (entityStart == null || entityEnd == null) { continue; } entityStart.NumConnctions++; entityEnd.NumConnctions++; cnt++; GeometryModel3D model3D = ScreenHandler.Make3DTube(entityStart.MapX + 0.025, entityStart.MapY + 0.025, entityEnd.MapX + 0.025, entityEnd.MapY + 0.025, 0, 0.05, EntityType.Switch); TransformationHandler.models.Add(model3D); ScreenHandler.Draw3DCube(model3D, myModel); Entities.Add(TransformationHandler.models.Count - 1, networkModel.Lines[i]); } return(networkModel); }
public void ParseXML(string xmlPath, out List <SubstationEntity> subList, out List <NodeEntity> nodeList, out List <SwitchEntity> switchList, out List <LineEntity> lineList) //cita sve korisnika iz xml-a { XmlDocument doc = new XmlDocument(); doc.Load(xmlPath); SubstationEntity sub = new SubstationEntity(); NodeEntity ne = new NodeEntity(); SwitchEntity se = new SwitchEntity(); LineEntity le = new LineEntity(); MyPoint p = new MyPoint(); double tempX, tempY; subList = new List <SubstationEntity>(); nodeList = new List <NodeEntity>(); switchList = new List <SwitchEntity>(); lineList = new List <LineEntity>(); foreach (XmlNode node in doc.DocumentElement.ChildNodes) //uzima sve cvorove { foreach (XmlNode item in node.ChildNodes) //uzima sve child cvorove prvih cvorova (tu su konkretni elementi) { if (item.Name.Equals("SubstationEntity")) //za svaki element konkretnog taga, pravi istancu tog elementa i dodaje je u odgovarajucu grupu { sub = new SubstationEntity(); sub.ID = long.Parse(item.ChildNodes[0].InnerText); sub.Name = item.ChildNodes[1].InnerText; UTMtoDecimal.ToLatLon(double.Parse(item.ChildNodes[2].InnerText), double.Parse(item.ChildNodes[3].InnerText), 34, out tempX, out tempY); //odmah pretvara u decimalne vrednosti i takve cuva u x i y sub.X = tempX; sub.Y = tempY; subList.Add(sub); } if (item.Name.Equals("NodeEntity")) { ne = new NodeEntity(); ne.ID = long.Parse(item.ChildNodes[0].InnerText); ne.Name = item.ChildNodes[1].InnerText; UTMtoDecimal.ToLatLon(double.Parse(item.ChildNodes[2].InnerText), double.Parse(item.ChildNodes[3].InnerText), 34, out tempX, out tempY); ne.X = tempX; ne.Y = tempY; nodeList.Add(ne); } if (item.Name.Equals("SwitchEntity")) { se = new SwitchEntity(); se.ID = long.Parse(item.ChildNodes[0].InnerText); se.Name = item.ChildNodes[1].InnerText; se.Status = item.ChildNodes[2].InnerText; UTMtoDecimal.ToLatLon(double.Parse(item.ChildNodes[3].InnerText), double.Parse(item.ChildNodes[4].InnerText), 34, out tempX, out tempY); se.X = tempX; se.Y = tempY; switchList.Add(se); } if (item.Name.Equals("LineEntity")) { le = new LineEntity(); le.ID = long.Parse(item.ChildNodes[0].InnerText); le.Name = item.ChildNodes[1].InnerText; le.IsUnderground = bool.Parse(item.ChildNodes[2].InnerText); le.R = double.Parse(item.ChildNodes[3].InnerText); le.ConductorMaterial = item.ChildNodes[4].InnerText; le.LineType = item.ChildNodes[5].InnerText; le.TerminalConstantHeat = int.Parse(item.ChildNodes[6].InnerText); le.FirstEnd = double.Parse(item.ChildNodes[7].InnerText); le.SecondEnd = double.Parse(item.ChildNodes[8].InnerText); foreach (XmlNode pointItem in item.ChildNodes[9].ChildNodes) { p = new MyPoint(); UTMtoDecimal.ToLatLon(double.Parse(pointItem.ChildNodes[0].InnerText), double.Parse(pointItem.ChildNodes[1].InnerText), 34, out tempX, out tempY); p.X = tempX; p.Y = tempY; le.Vertices.Add(p); } lineList.Add(le); } } } }
public static NetworkModel LoadModelToMap(NetworkModel networkModel, ModelVisual3D myModel) { networkModel = XmlHandler.Load <NetworkModel>(@"..\..\Geographic.xml"); // SUBSTATIONS for (int i = 0; i < networkModel.Substations.Count; i++) { SubstationEntity s = networkModel.Substations[i]; double latitude, longitude, mapX, mapY; // preracunavanje u koordinate CoordinatesHandler.ToLatLon(networkModel.Substations[i].X, networkModel.Substations[i].Y, 34, out latitude, out longitude); networkModel.Substations[i].X = latitude; networkModel.Substations[i].Y = longitude; // preracunavanje u poziciju na mapi CoordinatesHandler.FromCoordinatesToMapPosition(latitude, longitude, out mapX, out mapY); networkModel.Substations[i].MapX = mapX; networkModel.Substations[i].MapY = mapY; // crtanje cvora koji je u opsegu mape if (mapX != -1 && mapY != -1) { // provera da li postoji cvorova na toj lokaciji, redjanje na spratove // u prvom prolazu se sigurno crta double z = 0; if (Points.Count != 0 || i != 0) { int index = 0; double x; double y; // ako postoji objekat unutar definisanog precnika, uvecava se brojac i definise se visina na kojoj je potrebno nacrtati sledeci objekat if (HasEntityInRadius(mapX, mapY, out index, out x, out y)) { s.MapX = x; s.MapY = y; mapX = x; mapY = y; //Points[new Tuple<double, double>(mapX, mapY)].Count++; //z = 0.05 * Points[new Tuple<double, double>(mapX, mapY)].Count; Points[index].Count++; z = 0.05 * Points[index].Count; } else { z = 0; //Points.Add(new Tuple<double, double>(mapX, mapY), new PointStack(mapX, mapY, 0)); Points.Add(new PointStack(mapX, mapY, 0)); } } else { z = 0; //EntitiesDict.Add(new Tuple<double, double>(roundLat, roundLog), 0); //Points.Add(new Tuple<double, double>(mapX, mapY), new PointStack(mapX, mapY, 0)); Points.Add(new PointStack(mapX, mapY, 0)); } // kreiranje 3D modela kocke i dodavanje u ArrayList models, zbog Hit Testing-a GeometryModel3D model3D = ScreenHandler.Make3DCube(mapX, mapY, z, 0.05, EntityType.Substation); Transformation.models.Add(model3D); // dodavanje entiteta u recnik, kljuc je njegov redni broj u okviru ArrayList-e models Entities.Add(Transformation.models.Count - 1, s); ScreenHandler.Draw3DCube(model3D, myModel); } } // NODES for (int i = 0; i < networkModel.Nodes.Count; i++) { NodeEntity n = networkModel.Nodes[i]; double latitude, longitude, mapX, mapY; // preracunavanje u koordinate CoordinatesHandler.ToLatLon(networkModel.Nodes[i].X, networkModel.Nodes[i].Y, 34, out latitude, out longitude); networkModel.Nodes[i].X = latitude; networkModel.Nodes[i].Y = longitude; // preracunavanje u poziciju na mapi CoordinatesHandler.FromCoordinatesToMapPosition(latitude, longitude, out mapX, out mapY); networkModel.Nodes[i].MapX = mapX; networkModel.Nodes[i].MapY = mapY; // crtanje c vora koji je u opsegu mape if (mapX != -1 && mapY != -1) { /// provera da li postoji cvorova na toj lokaciji, redjanje na spratove // u prvom prolazu se sigurno crta double z = 0; if (i != 0) { int index = 0; double x; double y; // ako postoji objekat unutar definisanog precnika, uvecava se brojac i definise se visina na kojoj je potrebno nacrtati sledeci objekat if (HasEntityInRadius(mapX, mapY, out index, out x, out y)) { n.MapX = x; n.MapY = y; mapX = x; mapY = y; //z = 0.05 * EntitiesDict[new Tuple<double, double>(roundLat, roundLog)]; //Points[new Tuple<double, double>(mapX, mapY)].Count++; Points[index].Count++; z = 0.05 * Points[index].Count; } else { z = 0; //Points.Add(new Tuple<double, double>(mapX, mapY), new PointStack(mapX, mapY, 0)); Points.Add(new PointStack(mapX, mapY, 0)); } } else { z = 0; //EntitiesDict.Add(new Tuple<double, double>(roundLat, roundLog), 0); //Points.Add(new Tuple<double, double>(mapX, mapY), new PointStack(mapX, mapY, 0)); Points.Add(new PointStack(mapX, mapY, 0)); } // kreiranje 3D modela kocke i dodavanje u ArrayList models, zbog Hit Testing-a GeometryModel3D model3D = ScreenHandler.Make3DCube(mapX, mapY, z, 0.05, EntityType.Node); Transformation.models.Add(model3D); // dodavanje entiteta u recnik, kljuc je njegov redni broj u okviru ArrayList-e models Entities.Add(Transformation.models.Count - 1, n); ScreenHandler.Draw3DCube(model3D, myModel); } } // SWITCHES for (int i = 0; i < networkModel.Switches.Count; i++) { SwitchEntity s = networkModel.Switches[i]; double latitude, longitude, mapX, mapY; // preracunavanje u koordinate CoordinatesHandler.ToLatLon(networkModel.Switches[i].X, networkModel.Switches[i].Y, 34, out latitude, out longitude); networkModel.Switches[i].X = latitude; networkModel.Switches[i].Y = longitude; // preracunavanje u poziciju na mapi CoordinatesHandler.FromCoordinatesToMapPosition(latitude, longitude, out mapX, out mapY); networkModel.Switches[i].MapX = mapX; networkModel.Switches[i].MapY = mapY; // crtanje cvora koji je u opsegu mape if (mapX != -1 && mapY != -1) { // provera da li postoji cvorova na toj lokaciji, redjanje na spratove // u prvom prolazu se sigurno crta double z = 0; if (i != 0) { int index = 0; double x; double y; // ako postoji objekat unutar definisanog precnika, uvecava se brojac i definise se visina na kojoj je potrebno nacrtati sledeci objekat if (HasEntityInRadius(mapX, mapY, out index, out x, out y)) { s.MapX = x; s.MapY = y; mapX = x; mapY = y; //Points[new Tuple<double, double>(mapX, mapY)].Count++; //z = 0.05 * Points[new Tuple<double, double>(mapX, mapY)].Count; Points[index].Count++; z = 0.05 * Points[index].Count; } else { z = 0; //EntitiesDict.Add(new Tuple<double, double>(roundLat, roundLog), 0); //Points.Add(new Tuple<double, double>(mapX, mapY), new PointStack(mapX, mapY, 0)); Points.Add(new PointStack(mapX, mapY, 0)); } } else { z = 0; //EntitiesDict.Add(new Tuple<double, double>(roundLat, roundLog), 0); //Points.Add(new Tuple<double, double>(mapX, mapY), new PointStack(mapX, mapY, 0)); Points.Add(new PointStack(mapX, mapY, 0)); } // kreiranje 3D modela kocke i dodavanje u ArrayList models, zbog Hit Testing-a GeometryModel3D model3D = ScreenHandler.Make3DCube(mapX, mapY, z, 0.05, EntityType.Switch); Transformation.models.Add(model3D); // dodavanje entiteta u recnik, kljuc je njegov redni broj u okviru ArrayList-e models Entities.Add(Transformation.models.Count - 1, s); ScreenHandler.Draw3DCube(model3D, myModel); } } // LINES int cnt = 0; for (int i = 0; i < networkModel.Lines.Count; i++) { Entity entityStart = null; Entity entityEnd = null; entityStart = Entities.Values.ToList().Where(x => x.Id == networkModel.Lines[i].FirstEnd).FirstOrDefault(); entityEnd = Entities.Values.Where(x => x.Id == networkModel.Lines[i].SecondEnd).FirstOrDefault(); if (entityStart == null || entityEnd == null) { continue; } entityStart.NumConnctions++; entityEnd.NumConnctions++; cnt++; GeometryModel3D model3D = ScreenHandler.Make3DTube(entityStart.MapX + 0.025, entityStart.MapY + 0.025, entityEnd.MapX + 0.025, entityEnd.MapY + 0.025, 0, 0.05, EntityType.Switch); Transformation.models.Add(model3D); ScreenHandler.Draw3DCube(model3D, myModel); Entities.Add(Transformation.models.Count - 1, networkModel.Lines[i]); } return(networkModel); }