コード例 #1
0
        public static void LoadSwitches(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/Switches/SwitchEntity");
            foreach (XmlNode node in nodeList)
            {
                SwitchEntity sw = new SwitchEntity();
                sw.Id      = long.Parse(node.SelectSingleNode("Id").InnerText);
                sw.Name    = node.SelectSingleNode("Name").InnerText;
                sw.X       = double.Parse(node.SelectSingleNode("X").InnerText);
                sw.Y       = double.Parse(node.SelectSingleNode("Y").InnerText);
                sw.Status  = node.SelectSingleNode("Status").InnerText;
                sw.ToolTip = "Switch\nID: " + sw.Id + " \n Name: " + sw.Name + "\n Status: " + sw.Status;

                elements.Add(sw);

                Converter.ToLatLon(sw.X, sw.Y, 34, out newX, out newY);
                xPoints.Add(newX);
                yPoints.Add(newY);
            }
        }
コード例 #2
0
        public Button MapButton(ButtonEntity src, SwitchEntity liveSwitch, Button dest)
        {
            var mapped = mapper.Map(src, dest);

            mapped.ButtonStates?.Sort((i, j) => i.Order - j.Order);
            SetCurrentIcon(mapped, liveSwitch?.Value ?? GetSwitchValue(mapped));
            return(mapped);
        }
コード例 #3
0
ファイル: CheckPointData.cs プロジェクト: tws2xa/RunningGame
 public void setSwitchCheckpoints()
 {
     foreach (Entity e in GlobalVars.nonGroundEntities.Values)
     {
         if (e is SwitchEntity)
         {
             SwitchEntity    mySwitch   = ( SwitchEntity )e;
             SwitchComponent switchComp = (SwitchComponent)e.getComponent(GlobalVars.SWITCH_COMPONENT_NAME);
             mySwitch.lastCheckpointState = switchComp.active;
         }
     }
 }
コード例 #4
0
        public static int AdditionalTask8SW(SwitchEntity item)
        {
            int counter = 0;

            foreach (var line in DataContainers.Containers.GetLines)
            {
                if (line.FirstEnd == item.Id || line.SecondEnd == item.Id)
                {
                    ++counter;
                }
            }
            return(counter);
        }
コード例 #5
0
        private static void LoadSwitcheEntities(XmlNodeList nodeList)
        {
            foreach (XmlNode node in nodeList)
            {
                SwitchEntity s = new SwitchEntity();
                s.Id     = long.Parse(node.SelectSingleNode("Id").InnerText);
                s.Name   = node.SelectSingleNode("Name").InnerText;
                s.Status = node.SelectSingleNode("Status").InnerText;
                s.X      = double.Parse(node.SelectSingleNode("X").InnerText);
                s.Y      = double.Parse(node.SelectSingleNode("Y").InnerText);

                switchEntities.Add(s);
            }
        }
コード例 #6
0
        public async Task <Button> Get(Guid buttonId, bool getLive = false)
        {
            SwitchEntity liveSwitch = null;
            var          entity     = await this.Entity(buttonId);

            if (getLive)
            {
                var switchEntity = entity.ButtonStates.FirstOrDefault()?.SwitchSettings.FirstOrDefault()?.Switch;
                if (switchEntity != null)
                {
                    liveSwitch = await switchRepo.Get(switchEntity.Subsystem, switchEntity.Bridge, switchEntity.Id);
                }
            }

            return(mapper.MapButton(entity, liveSwitch, new Button()));
        }
コード例 #7
0
ファイル: Importer.cs プロジェクト: dekis108/GrafikaPZ3
        private void LoadSwitches(XmlDocument xmlDoc)
        {
            double       noviX, noviY;
            SwitchEntity switchobj;
            XmlNodeList  nodeList = xmlDoc.DocumentElement.SelectNodes("/NetworkModel/Switches/SwitchEntity");

            foreach (XmlNode node in nodeList)
            {
                switchobj        = new SwitchEntity();
                switchobj.Id     = long.Parse(node.SelectSingleNode("Id").InnerText);
                switchobj.Name   = node.SelectSingleNode("Name").InnerText;
                switchobj.X      = double.Parse(node.SelectSingleNode("X").InnerText);
                switchobj.Y      = double.Parse(node.SelectSingleNode("Y").InnerText);
                switchobj.Status = node.SelectSingleNode("Status").InnerText;

                ToLatLon(switchobj.X, switchobj.Y, 34, out noviX, out noviY);
                switchobj.TranslatedX = noviX;
                switchobj.TranslatedY = noviY;
                PowerGrid.PowerEntities.Add(switchobj.Id, switchobj);
            }
        }
コード例 #8
0
        private void ParseSwitches()
        {
            double newX, newY;

            foreach (XmlNode node in switchNodeList)
            {
                SwitchEntity sw = new SwitchEntity();

                sw.Id     = long.Parse(node.SelectSingleNode("Id").InnerText);
                sw.Name   = node.SelectSingleNode("Name").InnerText;
                sw.X      = double.Parse(node.SelectSingleNode("X").InnerText);
                sw.Y      = double.Parse(node.SelectSingleNode("Y").InnerText);
                sw.Status = node.SelectSingleNode("Status").InnerText;

                ToLatLon(sw.X, sw.Y, 34, out newX, out newY);
                sw.X = newX;
                sw.Y = newY;

                if (sw.X > maxCoordX)
                {
                    maxCoordX = sw.X;
                }
                if (sw.X < minCoordX)
                {
                    minCoordX = sw.X;
                }

                if (sw.Y > maxCoordY)
                {
                    maxCoordY = sw.Y;
                }
                if (sw.Y < minCoordY)
                {
                    minCoordY = sw.Y;
                }

                allSwitches.Add(sw);
            }
        }
コード例 #9
0
        public static void GetSwitches(XmlDocument xmlDocument, double boundaryMaxX, double boundaryMinX, double boundaryMaxY, double boundaryMinY,
                                       List <Point> points, List <SwitchEntity> switchEntities)
        {
            var nodeList = xmlDocument.DocumentElement.SelectNodes("/NetworkModel/Switches/SwitchEntity");

            foreach (XmlNode node in nodeList)
            {
                SwitchEntity switchEntity = new SwitchEntity();

                switchEntity.Id    = long.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.State = node.SelectSingleNode("Status").InnerText;

                Converter.ToLatLon(switchEntity.X, switchEntity.Y, 34, out double newX, out double newY);
                if (newX < boundaryMaxX && newX > boundaryMinX && newY < boundaryMaxY && newY > boundaryMinY)
                {
                    points.Add(new Models.Point(newX, newY, switchEntity.Id, switchEntity.Name, ""));
                    switchEntities.Add(switchEntity);
                }
            }
        }
コード例 #10
0
        public static Ellipse DrawSwitchImage(int indexI, int indexJ, Canvas myCanvas, SwitchEntity switchEntity)
        {
            Ellipse element = new Ellipse()
            {
                Width = 3, Height = 3, Fill = Brushes.LightSkyBlue
            };

            element.ToolTip = $"ID: {switchEntity.Id}\nSwitch Entity\nName: {switchEntity.Name}\nStatus: {switchEntity.Status}";
            Canvas.SetLeft(element, ((double)indexJ - MinJ) / (MaxJ - MinJ) * myCanvas.Width);
            Canvas.SetTop(element, ((double)indexI - MinI) / (MaxI - MinI) * myCanvas.Height);

            return(element);
        }
コード例 #11
0
ファイル: Level.cs プロジェクト: tws2xa/RunningGame
        public void gotoCheckpoint()
        {
            if (!hasHadCheckpoint)
            {
                resetLevel();
            }

            paused = true;

            if (levelNum == 1)
            {
                if (!checkpointData.colorOrbObtained())
                {
                    setToPreColors();
                }
                else
                {
                    setToPostColors();
                }
            }

            //Deactivate the vision orb if it's active
            if (sysManager.visSystem.orbActive)
            {
                sysManager.visSystem.destroyVisionOrb();
            }

            //Remove border
            if (sysManager.drawSystem.getMainView().hasBorder)
            {
                sysManager.drawSystem.getMainView().hasBorder = false;
            }

            Dictionary <int, Entity> toRestore = GlobalVars.removedStartingEntities.Where(x => !checkpointData.getRemovedEnts().ContainsKey(x.Key)).ToDictionary(x => x.Key, x => x.Value);

            //Remove non-starting entities, and restore starting entities to their initial state
            //Set switches to their last checkpnt state
            Entity[] ents = GlobalVars.nonGroundEntities.Values.ToArray();
            for (int i = 0; i < ents.Length; i++)
            {
                if (ents[i] is SwitchEntity)
                {
                    SwitchEntity    switchEnt  = (SwitchEntity)ents[i];
                    SwitchComponent switchComp = ( SwitchComponent )switchEnt.getComponent(GlobalVars.SWITCH_COMPONENT_NAME);
                    switchComp.setActive(switchEnt.lastCheckpointState, switchEnt);
                }

                if (!ents[i].isStartingEntity)
                {
                    removeEntity(ents[i]);
                }
                else if (ents[i].resetOnCheckpoint)
                {
                    ents[i].revertToStartingState();
                }
            }

            //Do the same for ground
            Entity[] grndents = GlobalVars.groundEntities.Values.ToArray();
            for (int i = 0; i < grndents.Length; i++)
            {
                if (!grndents[i].isStartingEntity)
                {
                    removeEntity(grndents[i]);
                }
                else if (grndents[i].resetOnCheckpoint)
                {
                    grndents[i].revertToStartingState();
                }
            }

            foreach (Entity e in toRestore.Values)
            {
                e.revertToStartingState();
                addEntity(e.randId, e);
                GlobalVars.removedStartingEntities.Remove(e.randId);
            }

            Player player = getPlayer();

            if (player == null)
            {
                Console.WriteLine("Error, trying to go to checkpoint with no player");
                resetLevel();
            }
            PositionComponent playerPos = (PositionComponent)player.getComponent(GlobalVars.POSITION_COMPONENT_NAME);

            getMovementSystem().changePosition(playerPos, checkpointData.getPlayerLoc().X, checkpointData.getPlayerLoc().Y, false, false);

            paused = false;
        }
コード例 #12
0
ファイル: XmlParser.cs プロジェクト: zoki1998/PZ3
        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);
                    }
                }
            }
        }
コード例 #13
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);
            }
        }
コード例 #14
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);
        }
コード例 #15
0
        //Reads in a paint image and adds all entities to the level.
        public void readImage(Level level)
        {
            for (int y = 0; y < img.Height; y++)
            {
                for (int x = 0; x < img.Width; x++)
                {
                    //Get the color of the pixel
                    Color col = img.GetPixel(x, y);

                    float levelX = x;
                    float levelY = y;

                    //First check for cases which have some variation in possible color values
                    //i.e. something identified with only it's RG, or GB, or RB, or just R or G or B
                    if (col.R == switchReserveRed)
                    {
                        Entity s = null;

                        if (col.G == permSwitchG)
                        {
                            s = new SwitchEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileHeight);
                        }
                        else if (col.G == presSwitchG)
                        {
                            //Pressure Switch
                            s = new PressureSwitchEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileWidth);
                            TimedSwitchComponent timeComp = ( TimedSwitchComponent )s.getComponent(GlobalVars.TIMED_SWITCH_COMPONENT_NAME);
                            timeComp.baseTime = 0;
                        }
                        else
                        {
                            s = new TimedSwitchEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileWidth);
                            TimedSwitchComponent timeComp = ( TimedSwitchComponent )s.getComponent(GlobalVars.TIMED_SWITCH_COMPONENT_NAME);
                            timeComp.baseTime = col.G / 10;
                        }
                        s.isStartingEntity = true;
                        adjustLocation(s, level);
                        switches.Add(col.B, s);
                        level.addEntity(s.randId, s);
                    }
                    else if (col.R == spikeSwitchReserveRed)
                    {
                        float time = -1;
                        if (col.G < 255)
                        {
                            time = col.G / 10;
                        }
                        Entity s = new SpikeSwitchEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileHeight, time);

                        s.isStartingEntity = true;
                        adjustLocation(s, level);
                        switches.Add(col.B, s);
                        level.addEntity(s.randId, s);
                    }
                    else if (col.R == shooterRedUp || col.R == shooterRedRight || col.R == shooterRedDown || col.R == shooterRedLeft)
                    {
                        float betweenBursts = ( float )col.B / ( float )10;
                        int   switchId      = col.G;

                        TimedShooterEntity shooter = new TimedShooterEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileHeight, betweenBursts, 1, col.R - 110, switchId);
                        if (switchId == 0)
                        {
                            shooter.removeComponent(GlobalVars.SWITCH_LISTENER_COMPONENT_NAME);
                        }
                        else
                        {
                            SwitchListenerComponent slComp = ( SwitchListenerComponent )shooter.getComponent(GlobalVars.SWITCH_LISTENER_COMPONENT_NAME);
                            if (switches.ContainsKey(switchId))
                            {
                                slComp.switchId = switches[switchId].randId;
                            }
                            else
                            {
                                unmachedSwitchListeners.Add(slComp, switchId);
                            }
                        }
                        adjustLocation(shooter, level);
                        shooter.isStartingEntity = true;
                        level.addEntity(shooter);
                    }
                    else if (col.R == smushRed && (col.B - 4 <= 0))
                    {
                        int switchId           = col.G;
                        SmushBlockEntity smush = new SmushBlockEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileHeight, col.B, switchId);

                        if (switchId == 0)
                        {
                            smush.removeComponent(GlobalVars.SWITCH_LISTENER_COMPONENT_NAME);
                        }
                        else
                        {
                            SwitchListenerComponent slComp = ( SwitchListenerComponent )smush.getComponent(GlobalVars.SWITCH_LISTENER_COMPONENT_NAME);
                            if (switches.ContainsKey(switchId))
                            {
                                slComp.switchId = switches[switchId].randId;
                            }
                            else
                            {
                                unmachedSwitchListeners.Add(slComp, switchId);
                            }
                        }

                        adjustLocation(smush, level);
                        smush.isStartingEntity = true;
                        level.addEntity(smush);
                    }
                    else if (col.G == tallDoorReserveGreen || col.G == wideDoorReserveGreen || col.G == openTallDoorReserveGreen || col.G == openWideDoorReserveGreen)
                    {
                        float width  = tallDoorWidth;
                        float height = tallDoorHeight;

                        if (col.G == wideDoorReserveGreen || col.G == openWideDoorReserveGreen)
                        {
                            width  = wideDoorWidth;
                            height = wideDoorHeight;
                        }

                        DoorEntity door = new DoorEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileHeight, width, height, (col.G % 100 == 0 || col.G % 100 == 1));
                        adjustLocation(door, level);
                        SwitchListenerComponent slComp = ( SwitchListenerComponent )door.getComponent(GlobalVars.SWITCH_LISTENER_COMPONENT_NAME);
                        door.isStartingEntity = true;
                        //check for its switch
                        if (switches.ContainsKey(col.B))
                        {
                            slComp.switchId = switches[col.B].randId;
                        }
                        else
                        {
                            unmachedSwitchListeners.Add(slComp, col.B);
                        }
                        level.addEntity(door);
                    }
                    else if (col.R == spikeRed && col.G == spikeGreen && (col.B - 4 <= 0))
                    {
                        SpikeEntity spike = new SpikeEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileHeight, col.B);
                        adjustLocation(spike, level);
                        spike.isStartingEntity = true;
                        level.addEntity(spike);
                    }
                    else if (col.R == signRed && col.G == signGreen)
                    {
                        SignEntity signEnt = new SignEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileHeight, col.B);
                        adjustLocation(signEnt, level);
                        signEnt.isStartingEntity = true;
                        level.addEntity(signEnt);
                    }

                    //Now just check for the specific colors
                    else if (col == playerCol)
                    {
                        Player player = new Player(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileHeight);
                        adjustLocation(player, level);
                        PositionComponent posComp = ( PositionComponent )player.getComponent(GlobalVars.POSITION_COMPONENT_NAME);
                        level.getMovementSystem().teleportToNoCollisionCheck(posComp, posComp.x, posComp.y - GlobalVars.MIN_TILE_SIZE / 2);
                        posComp.setCurrentLocToStartingLoc();
                        player.isStartingEntity = true;
                        level.addEntity(player.randId, player);
                    }
                    else if (col == movePlatformTurn)
                    {
                        PlatformTurnEntity platTurn = new PlatformTurnEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileHeight);
                        adjustLocation(platTurn, level);
                        platTurn.isStartingEntity = true;
                        level.addEntity(platTurn.randId, platTurn);
                    }
                    else if (col == basicGroundCol)
                    {
                        float groundX     = (levelX) * tileWidth;
                        float groundWidth = tileWidth;

                        BasicGround ground = new BasicGround(level, rand.Next(Int32.MinValue, Int32.MaxValue), groundX, (levelY) * tileHeight, groundWidth, tileHeight);
                        adjustLocation(ground, level);
                        ground.isStartingEntity = true;
                        level.addEntity(ground.randId, ground);

                        if (!GlobalVars.fullForegroundImage)
                        {
                            //If no ground above it, change to a grass sprite
                            List <Entity> above = level.getCollisionSystem().findObjectAtPoint((levelX) * tileWidth, (levelY - 1) * tileWidth);
                            if (above.Count <= 0 || !(above[0] is BasicGround))
                            {
                                ground.changeSprite(false);
                            }
                        }
                    }
                    else if (col == testEntityColor)
                    {
                        float      xLoc = (levelX) * tileWidth;
                        float      yLoc = (levelY) * tileHeight;
                        int        id   = rand.Next(Int32.MinValue, Int32.MaxValue);
                        TestEntity test = new TestEntity(level, id, xLoc, yLoc);
                        adjustLocation(test, level);
                        test.isStartingEntity = true;
                        level.addEntity(test.randId, test);
                    }
                    else if (col == simpleEnemyColor)
                    {
                        float             xLoc  = (levelX) * tileWidth;
                        float             yLoc  = (levelY) * tileHeight;
                        int               id    = rand.Next(Int32.MinValue, Int32.MaxValue);
                        SimpleEnemyEntity enemy = new SimpleEnemyEntity(level, id, xLoc, yLoc, false);
                        adjustLocation(enemy, level);
                        enemy.isStartingEntity = true;
                        level.addEntity(enemy.randId, enemy);
                    }
                    else if (col == flyingEnemyColor)
                    {
                        float             xLoc  = (levelX) * tileWidth;
                        float             yLoc  = (levelY) * tileHeight;
                        int               id    = rand.Next(Int32.MinValue, Int32.MaxValue);
                        FlyingEnemyEntity enemy = new FlyingEnemyEntity(level, id, xLoc, yLoc, false);
                        adjustLocation(enemy, level);
                        enemy.isStartingEntity = true;
                        level.addEntity(enemy.randId, enemy);
                    }
                    else if (col == shieldWalkingEnemyColor)
                    {
                        float             xLoc  = (levelX) * tileWidth;
                        float             yLoc  = (levelY) * tileHeight;
                        int               id    = rand.Next(Int32.MinValue, Int32.MaxValue);
                        SimpleEnemyEntity enemy = new SimpleEnemyEntity(level, id, xLoc, yLoc, true);
                        adjustLocation(enemy, level);
                        enemy.isStartingEntity = true;
                        level.addEntity(enemy.randId, enemy);
                    }
                    else if (col == shieldFlyingEnemyColor)
                    {
                        float             xLoc  = (levelX) * tileWidth;
                        float             yLoc  = (levelY) * tileHeight;
                        int               id    = rand.Next(Int32.MinValue, Int32.MaxValue);
                        FlyingEnemyEntity enemy = new FlyingEnemyEntity(level, id, xLoc, yLoc, true);
                        adjustLocation(enemy, level);
                        enemy.isStartingEntity = true;
                        level.addEntity(enemy.randId, enemy);
                    }
                    else if (col == checkPointCollider)
                    {
                        CheckPointEntity checkEnt = new CheckPointEntity(level, rand.Next(Int32.MinValue, Int32.MaxValue), levelX * tileWidth, levelY * tileHeight);
                        adjustLocation(checkEnt, level);
                        checkEnt.isStartingEntity = true;
                        level.addEntity(checkEnt.randId, checkEnt);
                    }/*else if ( col == checkPointCollider ) {
                      *
                      * float xLoc = ( levelX ) * tileWidth;
                      * float yLoc = ( levelY ) * tileHeight;
                      * int id = rand.Next( Int32.MinValue, Int32.MaxValue );
                      * EndLevelEntity lvlEnd = new EndLevelEntity( level, id, xLoc, yLoc );
                      * adjustLocation( lvlEnd, level );
                      * lvlEnd.isStartingEntity = true;
                      * level.addEntity( lvlEnd.randId, lvlEnd );
                      *
                      * }*/
                    else if (col == vertMovPlatCol)
                    {
                        float xLoc = (levelX) * tileWidth;
                        float yLoc = (levelY) * tileHeight;
                        int   id   = rand.Next(Int32.MinValue, Int32.MaxValue);

                        MovingPlatformEntity plat = new MovingPlatformEntity(level, id, xLoc, yLoc);
                        adjustLocation(plat, level);

                        plat.isStartingEntity = true;
                        level.addEntity(plat);
                    } /*else if ( col == horizMovPlatCol ) {
                       *
                       * float xLoc = ( levelX ) * tileWidth;
                       * float yLoc = ( levelY ) * tileHeight;
                       * int id = rand.Next( Int32.MinValue, Int32.MaxValue );
                       *
                       * MovingPlatformEntity plat = new MovingPlatformEntity( level, id, xLoc, yLoc );
                       * adjustLocation( plat, level );
                       *
                       * plat.isStartingEntity = true;
                       * MovingPlatformComponent movPlatComp = ( MovingPlatformComponent )plat.getComponent( GlobalVars.MOVING_PLATFORM_COMPONENT_NAME );
                       * movPlatComp.vertical = false;
                       * VelocityComponent velComp = ( VelocityComponent )plat.getComponent( GlobalVars.VELOCITY_COMPONENT_NAME );
                       * velComp.y = 0;
                       * level.addEntity( plat );
                       *
                       * }*/
                    else if (col == bouncePickup)
                    {
                        float xLoc = (levelX) * tileWidth;
                        float yLoc = (levelY) * tileHeight;
                        int   id   = rand.Next(Int32.MinValue, Int32.MaxValue);

                        PowerupPickupEntity pickup = new PowerupPickupEntity(level, id, xLoc, yLoc, GlobalVars.BOUNCE_NUM);
                        adjustLocation(pickup, level);

                        pickup.isStartingEntity = true;
                        level.addEntity(pickup);
                    }
                    else if (col == speedyPickup)
                    {
                        float xLoc = (levelX) * tileWidth;
                        float yLoc = (levelY) * tileHeight;
                        int   id   = rand.Next(Int32.MinValue, Int32.MaxValue);

                        PowerupPickupEntity pickup = new PowerupPickupEntity(level, id, xLoc, yLoc, GlobalVars.SPEED_NUM);
                        adjustLocation(pickup, level);

                        pickup.isStartingEntity = true;
                        level.addEntity(pickup);
                    }
                    else if (col == jmpPickup)
                    {
                        float xLoc = (levelX) * tileWidth;
                        float yLoc = (levelY) * tileHeight;
                        int   id   = rand.Next(Int32.MinValue, Int32.MaxValue);

                        PowerupPickupEntity pickup = new PowerupPickupEntity(level, id, xLoc, yLoc, GlobalVars.JMP_NUM);
                        adjustLocation(pickup, level);

                        pickup.isStartingEntity = true;
                        level.addEntity(pickup);
                    }
                    else if (col == glidePickup)
                    {
                        float xLoc = (levelX) * tileWidth;
                        float yLoc = (levelY) * tileHeight;
                        int   id   = rand.Next(Int32.MinValue, Int32.MaxValue);

                        PowerupPickupEntity pickup = new PowerupPickupEntity(level, id, xLoc, yLoc, GlobalVars.GLIDE_NUM);
                        adjustLocation(pickup, level);

                        pickup.isStartingEntity = true;
                        level.addEntity(pickup);
                    }
                    else if (col == spawnPickup)
                    {
                        float xLoc = (levelX) * tileWidth;
                        float yLoc = (levelY) * tileHeight;
                        int   id   = rand.Next(Int32.MinValue, Int32.MaxValue);

                        PowerupPickupEntity pickup = new PowerupPickupEntity(level, id, xLoc, yLoc, GlobalVars.SPAWN_NUM);
                        adjustLocation(pickup, level);

                        pickup.isStartingEntity = true;
                        level.addEntity(pickup);
                    }
                    else if (col == grapPickup)
                    {
                        float xLoc = (levelX) * tileWidth;
                        float yLoc = (levelY) * tileHeight;
                        int   id   = rand.Next(Int32.MinValue, Int32.MaxValue);

                        PowerupPickupEntity pickup = new PowerupPickupEntity(level, id, xLoc, yLoc, GlobalVars.GRAP_NUM);
                        adjustLocation(pickup, level);

                        pickup.isStartingEntity = true;
                        level.addEntity(pickup);
                    }
                    else if (col == visionOrbUnlock)
                    {
                        float xLoc = (levelX) * tileWidth;
                        float yLoc = (levelY) * tileHeight;
                        int   id   = rand.Next(Int32.MinValue, Int32.MaxValue);

                        VisionOrbUnlock visUnlock = new VisionOrbUnlock(level, id, xLoc, yLoc);
                        adjustLocation(visUnlock, level);

                        visUnlock.isStartingEntity = true;
                        level.addEntity(visUnlock);
                    }
                }
            }

            //Match any unmatched switch listeners to their switch
            foreach (SwitchListenerComponent sc in unmachedSwitchListeners.Keys)
            {
                if (switches.ContainsKey(unmachedSwitchListeners[sc]))
                {
                    SwitchListenerComponent slComp = sc;
                    slComp.switchId = switches[unmachedSwitchListeners[sc]].randId;
                }
                else
                {
                    Console.WriteLine("Unmatched Switch Listener - B: " + unmachedSwitchListeners[sc]);
                }
            }
        }
コード例 #16
0
ファイル: MainWindow.xaml.cs プロジェクト: sl-h/rg-pz3
        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))
                    };
                }
            }
        }
コード例 #17
0
 public static IObservable <StateChange <SwitchEntity, EntityState <SwitchAttributes> > > StateAllChangesWithCurrent(this SwitchEntity entity)
 {
     return(entity.StateAllChangesWithCurrent <SwitchEntity, EntityState <SwitchAttributes>, SwitchAttributes>());
 }
コード例 #18
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);
        }