コード例 #1
0
ファイル: Storm.cs プロジェクト: starfrost013/TrackMaker
        /// <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, StormType2 Type, Point Pos, int Pressure) // String in this case bad but swnabhfabg
        {
            Node NewNode = new Node();

            // Determine intensity.
            NewNode.Intensity = Intensity;

            // Get node type.
            NewNode.NodeType = 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;
            }

            // Set node position.

            RelativePositionConverter RPC = new RelativePositionConverter();
            RelativePosition          RP  = (RelativePosition)RPC.ConvertBack(Pos, typeof(RelativePosition), null, null);

            NewNode.Position = RP;

            Logging.Log($"Adding node");
            // Add.
            NodeList.Add(NewNode);
        }
コード例 #2
0
        public object ConvertBack(object Value, Type TargetType, object Parameter, CultureInfo Culture)
        {
            if (!(Value is RelativePosition) || TargetType != typeof(Point))
            {
                Error.Throw("Error!", "Fatal error: Attempted to call RelativePositionConverter.ConvertBack() with parameter 0 (Value) not of type RelativePosition!", ErrorSeverity.Error, 418);
            }
            else
            {
                RelativePosition Rp = (RelativePosition)Value;

                double Px = VolatileApplicationSettings.WindowSize.X * Rp.X;
                double Py = VolatileApplicationSettings.WindowSize.Y * Rp.Y;

                Point P = new Point(Px, Py);
                return(P);
            }

            return(null); //pre-v3
        }
コード例 #3
0
        public object Convert(object Value, Type TargetType, object Parameter, CultureInfo Culture)
        {
            if (!(Value is Point) || TargetType != typeof(RelativePosition))
            {
                Error.Throw("Error!", "Fatal Error: Attempted to convert a non-Point class to RelativePosition!", ErrorSeverity.FatalError, 417);
            }
            else
            {
                Point Vz = (Point)Value;

                double RpX = Vz.X / VolatileApplicationSettings.WindowSize.X;
                double RpY = Vz.Y / VolatileApplicationSettings.WindowSize.Y;

                RelativePosition Rp = new RelativePosition(RpX, RpY);
                return(Rp);
            }

            return(null); // pre-v3
        }
コード例 #4
0
ファイル: Basin.cs プロジェクト: starfrost013/TrackMaker
        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);
        }
コード例 #5
0
ファイル: Basin.cs プロジェクト: starfrost013/TrackMaker
        // Basin API for Priscilla
        public Coordinate FromNodePositionToCoordinate(RelativePosition NodePosition, Point WindowSize)
        {
            RelativePositionConverter RPC = new RelativePositionConverter();
            Point Pt = (Point)RPC.ConvertBack(NodePosition, typeof(Point), null, null);

            Coordinate Coord = new Coordinate();

            //Convert
            double X1 = CoordsLower.Coordinates.X;
            double Y1 = CoordsLower.Coordinates.Y;
            double X2 = CoordsHigher.Coordinates.X;
            double Y2 = CoordsHigher.Coordinates.Y;

            // Convert to negative

            foreach (CardinalDirection Cardir in CoordsLower.Directions)
            {
                switch (Cardir)
                {
                case CardinalDirection.W:
                    X1 = -X1;
                    continue;

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

            foreach (CardinalDirection Cardir in CoordsHigher.Directions)
            {
                switch (Cardir)
                {
                case CardinalDirection.W:
                    X2 = -X2;
                    continue;

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


            double WindowMultiplierPositionX = Pt.X / WindowSize.X;
            double WindowMultiplierPositionY = Pt.Y / WindowSize.Y;

            double FinalX = -2.999126165;
            double FinalY = -2.999126165;

            if (X1 <= 0 && X2 <= 0)
            {
                WindowMultiplierPositionX = -WindowMultiplierPositionX;
            }
            if (Y1 <= 0 && Y2 <= 0)
            {
                WindowMultiplierPositionY = -WindowMultiplierPositionY;
            }

            // this is so the user can input the coordinates in any way they want.
            if (X2 < X1)
            {
                FinalX = (X1 - X2) * WindowMultiplierPositionX;
            }
            else
            {
                FinalX = (X2 - X1) * WindowMultiplierPositionX;
            }

            if (Y2 < Y1)
            {
                FinalY = (Y1 - Y2) * WindowMultiplierPositionY;
            }
            else
            {
                FinalY = (Y2 - Y1) * WindowMultiplierPositionY;
            }

            if (FinalX == -2.999126165 || FinalY == -2.999126125)
            {
                Error.Throw("Error!", "Failed to set FinalX!", ErrorSeverity.Error, 277);
                return(null);
            }

            string _s  = FinalX.ToString();
            string _s2 = FinalY.ToString();

            string[] _s3 = _s.Split('.');
            string[] _s5 = _s2.Split('.');

            if (_s3.Length != 0)
            {
                // Truncate to the first decimal point if there are decimal points

                // rename this in iris
                string _s4 = "";

                if (_s3.Length == 1)
                {
                    _s4 = _s3[0];
                }
                else
                {
                    _s4 = _s3[1].Substring(0, 1);
                }


                // Concanectate
                _s4 = $"{_s3[0]}{_s4}";

                // Convert back
                FinalX = Convert.ToDouble(_s4);
            }

            if (_s5.Length != 0)
            {
                // Truncate to the first decimal point if there are decimal points

                string _s6 = "";

                // fixes crash with nodes that are very high up
                // on the screen
                if (_s5.Length == 1)
                {
                    _s6 = _s5[0];
                }
                else
                {
                    _s6 = _s5[1].Substring(0, 1);
                }

                // Concanectate
                _s6 = $"{_s5[0]}{_s6}";

                // Convert back
                FinalY = Convert.ToDouble(_s6);
            }

            Coord.Directions = new List <CardinalDirection>();


            if (FinalY < 0)
            {
                FinalY = -FinalY;
                Coord.Directions.Add(CardinalDirection.S);
            }
            else
            {
                Coord.Directions.Add(CardinalDirection.N);
            }

            if (FinalX < 0)
            {
                FinalX = -FinalX;
                Coord.Directions.Add(CardinalDirection.W);
            }
            else
            {
                Coord.Directions.Add(CardinalDirection.E);
            }


            // ATCF moment
            Coord.Coordinates = new Point(FinalY, FinalX);

            return(Coord);
        }