Exemple #1
0
        /// <summary>
        /// Add a node to this storm.
        ///
        /// STM is temporary until globalstate is ported over
        ///
        /// create NodeInformation class later
        /// </summary>
        public void AddNode(int Intensity, string Type, Point Pos, int Pressure, StormTypeManager TEMP__ST2Manager) // String in this case bad but swnabhfabg
        {
            Node NewNode = new Node();

            // Determine intensity.
            NewNode.Intensity = Intensity;

            // Get node type.
            NewNode.NodeType = TEMP__ST2Manager.GetStormTypeWithName(Type);

            // Get id.
            NewNode.Id = NodeList.Count;

            if (Pressure < 0)
            {
                Error.Throw("Warning", "Pressure cannot be less than zero!", ErrorSeverity.Warning, 400);
            }
            else
            {
                NewNode.Pressure = Pressure;
            }

            // dumb but it works!
            RelativePositionConverter RPC = new RelativePositionConverter();

            NewNode.Position = (RelativePosition)RPC.Convert(Pos, typeof(RelativePosition), null, null);


            Logging.Log($"Adding node");
            // Add.
            NodeList.Add(NewNode);
        }
Exemple #2
0
        public RelativePosition FromCoordinateToRelativeNodePosition(Coordinate Coord, Point WindowSize)
        {
            Debug.Assert(Coord.Directions.Count == 2);

            double LowX  = CoordsLower.Coordinates.X;
            double LowY  = CoordsLower.Coordinates.Y;
            double HighX = CoordsHigher.Coordinates.X;
            double HighY = CoordsHigher.Coordinates.Y;

            // convert to absolute coordinate
            foreach (CardinalDirection CD in CoordsLower.Directions)
            {
                switch (CD)
                {
                case CardinalDirection.W:
                    LowX = -LowX;
                    continue;

                case CardinalDirection.S:
                    LowY = -LowY;
                    continue;
                }
            }

            // convert to absolute coordinate
            foreach (CardinalDirection CD in CoordsHigher.Directions)
            {
                switch (CD)
                {
                case CardinalDirection.W:
                    HighX = -HighX;
                    continue;

                case CardinalDirection.S:
                    HighY = -HighY;
                    continue;
                }
            }

            // get the multiplier from the coordshigher.

            double PreFinalX = 0.991823613;
            double PreFinalY = 0.991823613;

            if (HighX > LowX)
            {
                PreFinalX = Coord.Coordinates.X / (HighX - LowX);
            }
            else
            {
                PreFinalX = Coord.Coordinates.X / (LowX - HighX);
            }

            if (HighY > LowY)
            {
                PreFinalY = Coord.Coordinates.Y / (HighY - LowY);
            }
            else
            {
                PreFinalY = Coord.Coordinates.Y / (LowY - HighY);
            }

            if (PreFinalX == 0.991823613 || PreFinalY == 0.991823613)
            {
                Error.Throw("Error", "Error translating coordinates - internal ATCF import error", ErrorSeverity.Error, 320);
                return(new RelativePosition(0.991823613, 0.991823613));
            }

            // atcf fix
            Point FinalPos = new Point(WindowSize.Y * PreFinalY, WindowSize.X * PreFinalX);

            RelativePositionConverter RPC = new RelativePositionConverter();
            RelativePosition          RP  = (RelativePosition)RPC.Convert(FinalPos, typeof(RelativePosition), null, null);

            return(RP);
        }