public bool PixelSame(EastingNorthingPoint src)
 {
     return m_pixel.Same(src.m_pixel);
 }
        private void AddNewEastingNorthing(int newEasting, int newNorthing, int pixelX, int pixelY)
        {
            EastingNorthingPoint newPoint = new EastingNorthingPoint(newEasting, newNorthing, pixelX, pixelY);
            /*
            bool found = false;
            foreach (EastingNorthingPoint point in m_settings.m_calibrationPoints)
            {
                if (point.PixelSame(newPoint))
                {
                    point.EastingNorthing.X = newEasting;
                    point.EastingNorthing.Y = newNorthing;
                    found = true;
                    MessageBox.Show("Found it");
                    break;
                }
            }
            */
            if (m_hoverCalibrationPoint == -1)
            {
                m_settings.m_calibrationPoints.Add(newPoint);
            }
            else
            {
                m_settings.m_calibrationPoints[m_hoverCalibrationPoint].EastingNorthing.X = newEasting;
                m_settings.m_calibrationPoints[m_hoverCalibrationPoint].EastingNorthing.Y = newNorthing;
            }

            ComputeBestFitEastingNorthing();
            RefreshImages();
        }
            public bool Load(string fileName)
            {
                try
                {
                    StreamReader inputStream = new StreamReader(fileName);
                    string param;
                    string value;
                    m_calibrationPoints.Clear();
                    m_trees.Clear();

                    while (inputStream.EndOfStream == false)
                    {
                        param = inputStream.ReadLine();
                        value = inputStream.ReadLine();
                        if (param == "EastingZero")
                        {
                            m_eastingZero = Convert.ToSingle(value);
                        }
                        else if (param == "NorthingZero")
                        {
                            m_northingZero = Convert.ToSingle(value);
                        }
                        else if (param == "EastingScale")
                        {
                            m_eastingScale = Convert.ToSingle(value);
                        }
                        else if (param == "NorthingScale")
                        {
                            m_northingScale = Convert.ToSingle(value);
                        }
                        else if (param == "DisplayPoints")
                        {
                            m_displayPoints = Convert.ToBoolean(value);
                        }
                        else if (param == "DetailImageTrack")
                        {
                            m_detailImageTrack = Convert.ToBoolean(value);
                        }
                        else if (param == "NumNorthPoints")
                        {
                            m_numNorthPoints = Convert.ToInt32(value);
                        }
                        else if (param == "NorthPoint0_X")
                        {
                            m_northPoint0_X = Convert.ToInt32(value);
                        }
                        else if (param == "NorthPoint0_Y")
                        {
                            m_northPoint0_Y = Convert.ToInt32(value);
                        }
                        else if (param == "NorthPoint1_X")
                        {
                            m_northPoint1_X = Convert.ToInt32(value);
                        }
                        else if (param == "NorthPoint1_Y")
                        {
                            m_northPoint1_Y = Convert.ToInt32(value);
                        }
                        else if (param == "NorthAngle")
                        {
                            m_northAngle = Convert.ToDouble(value) * Math.PI / 180.0f;
                        }
                        else if (param == "NumPoints")
                        {
                            int numPoints = Convert.ToInt32(value);
                            m_calibrationPoints.Clear();
                            for (int i = 0; i < numPoints; i++)
                            {
                                param = inputStream.ReadLine();
                                if (param != string.Format("Point[{0}]", i))
                                {
                                    MessageBox.Show(String.Format("Load Failed : file '{0}' : unknown parameter '{1}'", fileName, param));
                                    inputStream.Close();
                                    return false;
                                }
                                EastingNorthingPoint point = new EastingNorthingPoint();
                                value = inputStream.ReadLine();
                                point.EastingNorthing.X = Convert.ToInt64(value);
                                value = inputStream.ReadLine();
                                point.EastingNorthing.Y = Convert.ToInt64(value);
                                value = inputStream.ReadLine();
                                point.Pixel.X = Convert.ToInt64(value);
                                value = inputStream.ReadLine();
                                point.Pixel.Y = Convert.ToInt64(value);

                                m_calibrationPoints.Add(point);
                            }
                        }
                        else if (param == "NumTrees")
                        {
                            int numTrees = Convert.ToInt32(value);
                            m_trees.Clear();
                            for (int i = 0; i < numTrees; i++)
                            {
                                param = inputStream.ReadLine();
                                if (param != string.Format("Tree[{0}]", i))
                                {
                                    MessageBox.Show(String.Format("Load Failed : file '{0}' : unknown parameter '{1}'", fileName, param));
                                    inputStream.Close();
                                    return false;
                                }
                                EastingNorthingPoint point = new EastingNorthingPoint();
                                value = inputStream.ReadLine();
                                point.EastingNorthing.X = Convert.ToInt64(value);
                                value = inputStream.ReadLine();
                                point.EastingNorthing.Y = Convert.ToInt64(value);
                                value = inputStream.ReadLine();
                                point.Pixel.X = Convert.ToInt64(value);
                                value = inputStream.ReadLine();
                                point.Pixel.Y = Convert.ToInt64(value);

                                m_trees.Add(point);
                            }
                        }
                        else
                        {
                            MessageBox.Show(String.Format("Load Failed : file '{0}' : unknown parameter '{1}'", fileName, param));
                            inputStream.Close();
                            return false;
                        }
                    }

                    inputStream.Close();
                    return true;
                }
                catch (FileNotFoundException)
                {
                    MessageBox.Show(String.Format("Load Failed : file '{0}' not found", fileName));
                    return false;
                }
                catch (IOException e)
                {
                    MessageBox.Show(String.Format("Load Failed : file '{0}' : IO exception {0}", fileName, e.Message));
                    return false;
                }
                catch (Exception e)
                {
                    MessageBox.Show(String.Format("Load Failed : file '{0}' : C# exception {0}", fileName, e.Message));
                    return false;
                }
            }
        private void EnterTree()
        {
            int pixelX = m_sourceImagePixelX;
            int pixelY = m_sourceImagePixelY;

            float eastingPixel = 0.0f;
            float northingPixel = 0.0f;
            ComputeEastingNorthingPixel((float)pixelX, (float)pixelY, ref eastingPixel, ref northingPixel);
            float easting = m_settings.m_eastingZero + eastingPixel * m_settings.m_eastingScale;
            float northing = m_settings.m_northingZero + northingPixel * m_settings.m_northingScale;

            if (m_hoverTreePoint == -1)
            {
                EastingNorthingPoint newTree = new EastingNorthingPoint((int)easting, (int)northing, pixelX, pixelY);
                m_settings.m_trees.Add(newTree);
            }
            else
            {
                m_settings.m_trees[m_hoverTreePoint].EastingNorthing.X = (int)easting;
                m_settings.m_trees[m_hoverTreePoint].EastingNorthing.Y = (int)northing;
                m_settings.m_trees[m_hoverTreePoint].Pixel.X = pixelX;
                m_settings.m_trees[m_hoverTreePoint].Pixel.Y = pixelY;
            }

            RefreshImages();
            SaveSettings(true);
        }