Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 8
0
        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);
                        }
                    }
                }
            }
        }
Exemplo n.º 9
0
        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);
            }
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        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);
                    }
                }
            }
        }
Exemplo n.º 13
0
        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);
        }