public GridRemovalSettingsDialog(NuGenDocument doc)
        {
            this.settings = doc.GridRemovalSettings;
            this.originalImage = doc.OriginalImage;
            this.discretizeSettings = doc.DiscretizeSettings;
            this.transform = doc.Transform;
            this.bgColor = doc.BackgroundColor;
            this.coordSettings = doc.CoordSettings;

            if (doc.ValidAxes)
                this.gridRemovalMesh = doc.GridDisplaySettings;
            else
                this.gridRemovalMesh.initialized = false;

            discretizeSettings.discretizeMethod = DiscretizeMethod.DiscretizeForeground;

            InitializeComponent();
            InitializeDefaults();

            if (!(doc.ValidAxes || doc.ValidScale))
            {
                textBox1.Enabled = false;
                textBox2.Enabled = false;
                checkBox2.Enabled = false;
                checkBox2.Checked = false;
                checkBox3.Enabled = false;
                checkBox3.Checked = false;
            }

            histogram.ValueChanged = this.ValueChanged;

            ValueChanged(true);

            this.MaximumSize = Size;
        }
Пример #2
0
        // compute pleasing gridMeshSettings display line settings, returning true if successful
        public void InitGridMesh(ref GridMeshSettings gridSettings)
        {
            gridSettings.initialized = false;

            if (!transform.ValidAxes)
            {
                return;
            }

            gridSettings.gridSetX = GridSet.AllButStep;
            gridSettings.gridSetY = GridSet.AllButStep;

            double xThetaMin = 0.0, xThetaMax = 0.0, yRMin = 0.0, yRMax = 0.0;

            pointSets.PointSetGraphLimits(coordSettings, transform,
                                          ref xThetaMin, ref xThetaMax, ref yRMin, ref yRMax);

            NuGenMath.AxisScale(xThetaMin, xThetaMax, (coordSettings.xThetaScale == Scale.Linear),
                                out gridSettings.startX,
                                out gridSettings.stopX,
                                out gridSettings.stepX,
                                out gridSettings.countX);
            NuGenMath.AxisScale(yRMin, yRMax, (coordSettings.yRScale == Scale.Linear),
                                out gridSettings.startY,
                                out gridSettings.stopY,
                                out gridSettings.stepY,
                                out gridSettings.countY);

            gridSettings.initialized = true;
        }
Пример #3
0
        public GridSettingsDialog(GridMeshSettings settings, CoordSettings coordSettings)
        {
            this.settings      = settings;
            this.coordSettings = coordSettings;

            InitializeComponent();
            InitializeDefaults();

            this.MaximumSize = Size;
        }
Пример #4
0
        public GridSettingsDialog(GridMeshSettings settings, CoordSettings coordSettings)
        {            
            this.settings = settings;
            this.coordSettings = coordSettings;

            InitializeComponent();
            InitializeDefaults();

            this.MaximumSize = Size;
        }
Пример #5
0
        private static List<GridlineScreen> MakeGridR(NuGenScreenTranslate transform, CoordSettings coordSettings, GridMeshSettings gridMeshSettings)
        {
            int i;
            int xStartS = 0, yStartS = 0, xStopS = 1, yStopS = 1;
            double rG = gridMeshSettings.startY;
            GridlineScreen gridline;
            List<GridlineScreen> gridlines = new List<GridlineScreen>();
            for (i = 0; i < gridMeshSettings.countY; i++)
            {
                gridline = new GridlineScreen();
                // for polar coordinates we simply piecewise define the elliptical arc until motivated
                // to implement a better drawing algorithm. segments will be evenly spaced in angle
                // some pdf documents describing alternative algorithms are found in the doc directory.
                // it would have been elegant to use QCanvasEllipses but those are axis-aligned.
                double delta = AngleSpacing(coordSettings.thetaUnits);
                bool first = true;
                for (double angle = gridMeshSettings.startX; angle < gridMeshSettings.stopX; angle += delta)
                {
                    transform.XThetaYRToScreen(coordSettings, angle, rG, out xStopS, out yStopS);

                    if (first)
                    {
                        xStartS = xStopS;
                        yStartS = yStopS;
                    }
                    else
                    {
                        if (NuGenMath.VectorMagnitude(xStopS - xStartS, yStopS - yStartS, 0.0) >= pixelSpacing)
                        {
                            gridline.Start.X = xStartS;
                            gridline.Start.Y = yStartS;
                            gridline.Stop.X = xStopS;
                            gridline.Stop.Y = yStopS;
                            gridline.R = true;

                            xStartS = xStopS;
                            yStartS = yStopS;
                        }
                    }

                    first = false;
                }

                if (coordSettings.yRScale == Scale.Linear)
                    rG += gridMeshSettings.stepY;
                else
                    rG *= gridMeshSettings.stepY;
            }

            return gridlines;
        }
Пример #6
0
        public ExportSettingsDialog(ExportSettings settings, NuGenDocument doc, List <string> includedCurves, List <string> excludedCurves)
        {
            this.settings       = settings;
            this.includedCurves = includedCurves;
            this.excludedCurves = excludedCurves;
            this.pointsets      = doc.PointSets;

            this.coordSettings = doc.CoordSettings;
            this.gridSettings  = doc.GridDisplaySettings;

            InitializeComponent();
            InitializeDefaults();

            this.MaximumSize = Size;
        }
        public ExportSettingsDialog(ExportSettings settings, NuGenDocument doc, List<string> includedCurves, List<string> excludedCurves)
        {
            this.settings = settings;
            this.includedCurves = includedCurves;
            this.excludedCurves = excludedCurves;
            this.pointsets = doc.PointSets;

            this.coordSettings = doc.CoordSettings;
            this.gridSettings = doc.GridDisplaySettings;

            InitializeComponent();
            InitializeDefaults();

            this.MaximumSize = Size;
        }
Пример #8
0
        // export the curves into a text stream
        public void ExportToFile(Stream str, CoordSettings coord, GridMeshSettings grid,
                                 ExportSettings xport)
        {
            int xPrecision, yPrecision;

            SelectXYPrecisionsForExport(coord, out xPrecision, out yPrecision);

            if (xport.layout == ExportLayout.AllCurvesOnEachLine)
            {
                ExportToStreamAllCurvesTogether(str, coord, grid, xport, xPrecision, yPrecision);
            }
            else
            {
                ExportToStreamEachCurveSeparately(str, coord, grid, xport, xPrecision, yPrecision);
            }
        }
Пример #9
0
        // return list of x values in ascending order
        private List <double> AscendingXValuesList(CoordSettings coord,
                                                   GridMeshSettings grid, ExportSettings xport, int xPrecision)
        {
            List <double> dList = new List <double>();

            switch (xport.pointsSelection)
            {
            case ExportPointsSelection.XFromAllCurves:
            case ExportPointsSelection.XYFromAllCurves:
            {
                foreach (NuGenPointSet pointset in curveList)
                {
                    pointset.MergeUniqueXValues(dList, xPrecision);
                }
            }
            break;

            case ExportPointsSelection.XFromFirstCurve:
                // for simplicity for the user and in code, we use x values from the
                // first curve, not the first exported curve according to the export flags
                (curveList.ToArray().GetValue(0) as NuGenPointSet).MergeUniqueXValues(dList, xPrecision);
                break;

            case ExportPointsSelection.XFromGridLines:
            {
                double x = grid.startX;
                for (int i = 0; i < grid.countX; i++)
                {
                    dList.Add(x);

                    if (coord.xThetaScale == Scale.Linear)
                    {
                        x += grid.stepX;
                    }
                    else
                    {
                        x *= grid.stepX;
                    }
                }
            }
            break;
            }

            return(dList);
        }
Пример #10
0
        //Makes gridlines from the given translation
        public static List<GridlineScreen> MakeGridLines(NuGenScreenTranslate transform, CoordSettings coordSettings, GridMeshSettings gridMeshSettings)
        {
            List<GridlineScreen> list = new List<GridlineScreen>();
            if (transform.ValidAxes)
            {
                if (coordSettings.frame == ReferenceFrame.Cartesian)
                {
                    list.AddRange(MakeGridX(transform, coordSettings, gridMeshSettings));
                    list.AddRange(MakeGridY(transform, coordSettings, gridMeshSettings));
                    return list;
                }
                else
                {
                    list.AddRange(MakeGridTheta(transform, coordSettings, gridMeshSettings));
                    list.AddRange(MakeGridR(transform, coordSettings, gridMeshSettings));
                    return list;
                }
            }

            return list;
        }
Пример #11
0
        public GridRemovalSettingsDialog(NuGenDocument doc)
        {
            this.settings           = doc.GridRemovalSettings;
            this.originalImage      = doc.OriginalImage;
            this.discretizeSettings = doc.DiscretizeSettings;
            this.transform          = doc.Transform;
            this.bgColor            = doc.BackgroundColor;
            this.coordSettings      = doc.CoordSettings;

            if (doc.ValidAxes)
            {
                this.gridRemovalMesh = doc.GridDisplaySettings;
            }
            else
            {
                this.gridRemovalMesh.initialized = false;
            }

            discretizeSettings.discretizeMethod = DiscretizeMethod.DiscretizeForeground;

            InitializeComponent();
            InitializeDefaults();

            if (!(doc.ValidAxes || doc.ValidScale))
            {
                textBox1.Enabled  = false;
                textBox2.Enabled  = false;
                checkBox2.Enabled = false;
                checkBox2.Checked = false;
                checkBox3.Enabled = false;
                checkBox3.Checked = false;
            }

            histogram.ValueChanged = this.ValueChanged;

            ValueChanged(true);

            this.MaximumSize = Size;
        }
Пример #12
0
        private static List<GridlineScreen> MakeGridTheta(NuGenScreenTranslate transform, CoordSettings coordSettings, GridMeshSettings gridMeshSettings)
        {
            int i;
            int xStartS, yStartS, xStopS, yStopS;
            double thetaG = gridMeshSettings.startX;
            GridlineScreen gridline;
            List<GridlineScreen> gridlines = new List<GridlineScreen>();
            for (i = 0; i < gridMeshSettings.countX; i++)
            {
                transform.XThetaYRToScreen(coordSettings, thetaG, gridMeshSettings.startY, out xStartS, out yStartS);
                transform.XThetaYRToScreen(coordSettings, thetaG, gridMeshSettings.stopY, out xStopS, out yStopS);

                gridline.Start.X = xStartS;
                gridline.Start.Y = yStartS;
                gridline.Stop.X = xStopS;
                gridline.Stop.Y = yStopS;
                gridline.R = false;

                thetaG += gridMeshSettings.stepX;
                gridlines.Add(gridline); //Maybe not?
            }

            return gridlines;
        }
Пример #13
0
        private static List <GridlineScreen> MakeGridR(NuGenScreenTranslate transform, CoordSettings coordSettings, GridMeshSettings gridMeshSettings)
        {
            int                   i;
            int                   xStartS = 0, yStartS = 0, xStopS = 1, yStopS = 1;
            double                rG = gridMeshSettings.startY;
            GridlineScreen        gridline;
            List <GridlineScreen> gridlines = new List <GridlineScreen>();

            for (i = 0; i < gridMeshSettings.countY; i++)
            {
                gridline = new GridlineScreen();
                // for polar coordinates we simply piecewise define the elliptical arc until motivated
                // to implement a better drawing algorithm. segments will be evenly spaced in angle
                // some pdf documents describing alternative algorithms are found in the doc directory.
                // it would have been elegant to use QCanvasEllipses but those are axis-aligned.
                double delta = AngleSpacing(coordSettings.thetaUnits);
                bool   first = true;
                for (double angle = gridMeshSettings.startX; angle < gridMeshSettings.stopX; angle += delta)
                {
                    transform.XThetaYRToScreen(coordSettings, angle, rG, out xStopS, out yStopS);

                    if (first)
                    {
                        xStartS = xStopS;
                        yStartS = yStopS;
                    }
                    else
                    {
                        if (NuGenMath.VectorMagnitude(xStopS - xStartS, yStopS - yStartS, 0.0) >= pixelSpacing)
                        {
                            gridline.Start.X = xStartS;
                            gridline.Start.Y = yStartS;
                            gridline.Stop.X  = xStopS;
                            gridline.Stop.Y  = yStopS;
                            gridline.R       = true;

                            xStartS = xStopS;
                            yStartS = yStopS;
                        }
                    }

                    first = false;
                }

                if (coordSettings.yRScale == Scale.Linear)
                {
                    rG += gridMeshSettings.stepY;
                }
                else
                {
                    rG *= gridMeshSettings.stepY;
                }
            }

            return(gridlines);
        }
Пример #14
0
        private static List <GridlineScreen> MakeGridTheta(NuGenScreenTranslate transform, CoordSettings coordSettings, GridMeshSettings gridMeshSettings)
        {
            int                   i;
            int                   xStartS, yStartS, xStopS, yStopS;
            double                thetaG = gridMeshSettings.startX;
            GridlineScreen        gridline;
            List <GridlineScreen> gridlines = new List <GridlineScreen>();

            for (i = 0; i < gridMeshSettings.countX; i++)
            {
                transform.XThetaYRToScreen(coordSettings, thetaG, gridMeshSettings.startY, out xStartS, out yStartS);
                transform.XThetaYRToScreen(coordSettings, thetaG, gridMeshSettings.stopY, out xStopS, out yStopS);

                gridline.Start.X = xStartS;
                gridline.Start.Y = yStartS;
                gridline.Stop.X  = xStopS;
                gridline.Stop.Y  = yStopS;
                gridline.R       = false;

                thetaG += gridMeshSettings.stepX;
                gridlines.Add(gridline); //Maybe not?
            }

            return(gridlines);
        }
Пример #15
0
        //Makes gridlines from the given translation
        public static List <GridlineScreen> MakeGridLines(NuGenScreenTranslate transform, CoordSettings coordSettings, GridMeshSettings gridMeshSettings)
        {
            List <GridlineScreen> list = new List <GridlineScreen>();

            if (transform.ValidAxes)
            {
                if (coordSettings.frame == ReferenceFrame.Cartesian)
                {
                    list.AddRange(MakeGridX(transform, coordSettings, gridMeshSettings));
                    list.AddRange(MakeGridY(transform, coordSettings, gridMeshSettings));
                    return(list);
                }
                else
                {
                    list.AddRange(MakeGridTheta(transform, coordSettings, gridMeshSettings));
                    list.AddRange(MakeGridR(transform, coordSettings, gridMeshSettings));
                    return(list);
                }
            }

            return(list);
        }
Пример #16
0
        private static List <GridlineScreen> MakeGridX(NuGenScreenTranslate transform, CoordSettings coordSettings, GridMeshSettings gridMeshSettings)
        {
            int                   i;
            int                   xStartS, yStartS, xStopS, yStopS;
            double                xG = gridMeshSettings.startX;
            GridlineScreen        gridline;
            List <GridlineScreen> gridlines = new List <GridlineScreen>();

            for (i = 0; i < gridMeshSettings.countX; i++)
            {
                gridline = new GridlineScreen();
                transform.XThetaYRToScreen(coordSettings, xG, gridMeshSettings.startY, out xStartS, out yStartS);
                transform.XThetaYRToScreen(coordSettings, xG, gridMeshSettings.stopY, out xStopS, out yStopS);

                gridline.Start.X = xStartS;
                gridline.Start.Y = yStartS;
                gridline.Stop.X  = xStopS;
                gridline.Stop.Y  = yStopS;
                gridline.R       = false;

                gridlines.Add(gridline);

                if (coordSettings.xThetaScale == Scale.Linear)
                {
                    xG += gridMeshSettings.stepX;
                }
                else
                {
                    xG *= gridMeshSettings.stepX;
                }
            }

            return(gridlines);
        }
Пример #17
0
        // curves can be exported together in multiple columns, or one after the other in the same column
        private void ExportToStreamAllCurvesTogether(Stream str, CoordSettings coord, GridMeshSettings grid,
                                                     ExportSettings xport, int xPrecision, int yPrecision)
        {
            // list of x values in ascending order
            List <double> xUsed = AscendingXValuesList(coord, grid, xport, xPrecision);

            StreamWriter writer = new StreamWriter(str);

            if (xport.header != ExportHeader.HeaderNone)
            {
                // header
                writer.Write(ExportHeaderPrefix(coord, xport));
                foreach (NuGenPointSet pointset in curveList)
                {
                    if (pointset.Export)
                    {
                        writer.Write(xport.GetDelimiter());
                        writer.Write(pointset.ExportCurveHeader(xport));
                    }
                }
                writer.Write("\n");
            }

            // if only allowing raw data, then forgo interpolation
            bool useInterpolation = (xport.pointsSelection != ExportPointsSelection.XYFromAllCurves);

            foreach (double itrX in xUsed)
            {
                writer.Write(Math.Round(itrX, xPrecision).ToString());
                foreach (NuGenPointSet pointset in curveList)
                {
                    if (pointset.Export)
                    {
                        writer.Write(xport.GetDelimiter());
                        writer.Write(pointset.ExportCurvePoint(itrX, coord, useInterpolation, yPrecision));
                    }
                }

                writer.Write("\n");
            }

            writer.Flush();
            writer.Close();
        }
Пример #18
0
        //Exports all of the curve data to the given stream with each curve having its own line
        private void ExportToStreamEachCurveSeparately(Stream str, CoordSettings coord, GridMeshSettings grid,
                                                       ExportSettings xport, int xPrecision, int yPrecision)
        {
            // list of x values in ascending order
            List <double> xUsed = AscendingXValuesList(coord, grid, xport, xPrecision);

            StreamWriter writer = new StreamWriter(str);

            foreach (NuGenPointSet pointset in curveList)
            {
                if (pointset.Export)
                {
                    if (xport.header != ExportHeader.HeaderNone)
                    {
                        writer.Write(ExportHeaderPrefix(coord, xport));
                        writer.Write(xport.GetDelimiter());
                        writer.Write(pointset.ExportCurveHeader(xport));
                        writer.Write("\n");
                    }

                    if (xport.pointsSelection == ExportPointsSelection.XYFromAllCurves)
                    {
                        writer.Write(pointset.ExportCurveAll(xport, xPrecision, yPrecision));
                    }
                    else
                    {
                        bool useInterpolation = true;

                        foreach (double itrX in xUsed)
                        {
                            writer.Write(Math.Round(itrX, xPrecision));
                            writer.Write(xport.GetDelimiter());
                            writer.Write(pointset.ExportCurvePoint(itrX, coord, useInterpolation, yPrecision));
                            writer.Write("\n");
                        }

                        if (xport.header == ExportHeader.HeaderGnuplot)
                        {
                            writer.Write("\n\n");
                        }
                    }
                }
            }

            writer.Flush();
            writer.Close();
        }
Пример #19
0
        private static List<GridlineScreen> MakeGridX(NuGenScreenTranslate transform, CoordSettings coordSettings, GridMeshSettings gridMeshSettings)
        {
            int i;
            int xStartS, yStartS, xStopS, yStopS;
            double xG = gridMeshSettings.startX;
            GridlineScreen gridline;
            List<GridlineScreen> gridlines = new List<GridlineScreen>();
            for (i = 0; i < gridMeshSettings.countX; i++)
            {
                gridline = new GridlineScreen();
                transform.XThetaYRToScreen(coordSettings, xG, gridMeshSettings.startY, out xStartS, out yStartS);
                transform.XThetaYRToScreen(coordSettings, xG, gridMeshSettings.stopY, out xStopS, out yStopS);

                gridline.Start.X = xStartS;
                gridline.Start.Y = yStartS;
                gridline.Stop.X = xStopS;
                gridline.Stop.Y = yStopS;
                gridline.R = false;

                gridlines.Add(gridline);

                if (coordSettings.xThetaScale == Scale.Linear)
                    xG += gridMeshSettings.stepX;
                else
                    xG *= gridMeshSettings.stepX;
            }

            return gridlines;
        }