Example #1
0
        public void PaintChild(System.Drawing.Graphics g, IPaintContext paintContext, IPlotArea layer, PlotItemCollection coll, int i)
        {
            CachedPaintData paintData = paintContext.GetValue <CachedPaintData>(this);

            if (_useClipping)
            {
                //g.SetClip(clippingColl[i], CombineMode.Replace);
                g.Clip = paintData._clippingColl[i];
            }

            if (null == paintData._plotDataColl[i])
            {
                coll[i].Paint(g, paintContext, layer, i == coll.Count - 1 ? null : coll[i - 1], i == 0 ? null : coll[i - 1]);
            }
            else
            {
                var layerwrapper = new TransformedLayerWrapper(layer, paintData._xincColl[i], paintData._yincColl[i]);
                ((G2DPlotItem)coll[i]).Paint(g, layerwrapper, paintData._plotDataColl[i], i == coll.Count - 1 ? null : paintData._plotDataColl[i + 1], i == 0 ? null : paintData._plotDataColl[i - 1]);
            }

            // The clipping region is no longer needed, so we can dispose it
            if (_useClipping)
            {
                if (i == 0)
                {
                    g.Clip = paintData._clippingColl[0]; // restore the original clipping region
                }
                else
                {
                    paintData._clippingColl[i].Dispose(); // for i!=0 dispose the clipping region
                }
            }
        }
Example #2
0
        public void PaintPreprocessing(System.Drawing.Graphics g, IPaintContext paintContext, IPlotArea layer, PlotItemCollection coll)
        {
            var paintData = new CachedPaintData
            {
                _clippingColl = new System.Drawing.Region[coll.Count],
                _plotDataColl = new Processed2DPlotData[coll.Count],
                _xincColl     = new double[coll.Count],
                _yincColl     = new double[coll.Count]
            };

            paintContext.AddValue(this, paintData);

            // First prepare
            int idx = -1;
            Processed2DPlotData previousPlotData = null;

            for (int i = 0; i < coll.Count; i++)
            {
                if (coll[i] is G2DPlotItem)
                {
                    idx++;
                    double currxinc = paintData._xincColl[i] = idx * _xinc * _scaleXInc;
                    double curryinc = paintData._yincColl[i] = idx * _yinc * _scaleYInc;

                    var gpi = coll[i] as G2DPlotItem;
                    Processed2DPlotData plotdata = paintData._plotDataColl[i] = gpi.GetRangesAndPoints(layer);
                    plotdata.PreviousItemData = previousPlotData;
                    previousPlotData          = plotdata;

                    int j = -1;
                    foreach (int rowIndex in plotdata.RangeList.OriginalRowIndices())
                    {
                        j++;

                        AltaxoVariant xx = plotdata.GetXPhysical(rowIndex) + currxinc;
                        AltaxoVariant yy = plotdata.GetYPhysical(rowIndex) + curryinc;

                        var rel = new Logical3D(layer.XAxis.PhysicalVariantToNormal(xx), layer.YAxis.PhysicalVariantToNormal(yy));
                        layer.CoordinateSystem.LogicalToLayerCoordinates(rel, out var xabs, out var yabs);
                        plotdata.PlotPointsInAbsoluteLayerCoordinates[j] = new System.Drawing.PointF((float)xabs, (float)yabs);
                    }

                    // if clipping is used, we must get a clipping region for every plot item
                    // and combine the regions from
                    if (_useClipping)
                    {
                        if (i == 0)
                        {
                            paintData._clippingColl[i] = g.Clip;
                        }

                        Plot.Styles.LinePlotStyle linestyle = null;
                        foreach (Plot.Styles.IG2DPlotStyle st in gpi.Style)
                        {
                            if (st is Plot.Styles.LinePlotStyle)
                            {
                                linestyle = st as Plot.Styles.LinePlotStyle;
                                break;
                            }
                        }

                        if (null != linestyle)
                        {
                            var path = new System.Drawing.Drawing2D.GraphicsPath();
                            linestyle.GetFillPath(path, layer, plotdata, CSPlaneID.Bottom);
                            if ((i + 1) < paintData._clippingColl.Length)
                            {
                                paintData._clippingColl[i + 1] = paintData._clippingColl[i].Clone();
                                paintData._clippingColl[i + 1].Exclude(path);
                            }
                        }
                        else
                        {
                            if ((i + 1) < paintData._clippingColl.Length)
                            {
                                paintData._clippingColl[i + 1] = paintData._clippingColl[i];
                            }
                        }
                    }
                }
            }
        }
Example #3
0
		public void PaintPreprocessing(System.Drawing.Graphics g, IPaintContext paintContext, IPlotArea layer, PlotItemCollection coll)
		{
			var paintData = new CachedPaintData
			{
				_clippingColl = new System.Drawing.Region[coll.Count],
				_plotDataColl = new Processed2DPlotData[coll.Count],
				_xincColl = new double[coll.Count],
				_yincColl = new double[coll.Count]
			};

			paintContext.AddValue(this, paintData);

			// First prepare
			int idx = -1;
			Processed2DPlotData previousPlotData = null;
			for (int i = 0; i < coll.Count; i++)
			{
				if (coll[i] is G2DPlotItem)
				{
					idx++;
					double currxinc = paintData._xincColl[i] = idx * _xinc * _scaleXInc;
					double curryinc = paintData._yincColl[i] = idx * _yinc * _scaleYInc;

					G2DPlotItem gpi = coll[i] as G2DPlotItem;
					Processed2DPlotData plotdata = paintData._plotDataColl[i] = gpi.GetRangesAndPoints(layer);
					plotdata.PreviousItemData = previousPlotData;
					previousPlotData = plotdata;

					int j = -1;
					foreach (int rowIndex in plotdata.RangeList.OriginalRowIndices())
					{
						j++;

						AltaxoVariant xx = plotdata.GetXPhysical(rowIndex) + currxinc;
						AltaxoVariant yy = plotdata.GetYPhysical(rowIndex) + curryinc;

						Logical3D rel = new Logical3D(layer.XAxis.PhysicalVariantToNormal(xx), layer.YAxis.PhysicalVariantToNormal(yy));
						double xabs, yabs;
						layer.CoordinateSystem.LogicalToLayerCoordinates(rel, out xabs, out yabs);
						plotdata.PlotPointsInAbsoluteLayerCoordinates[j] = new System.Drawing.PointF((float)xabs, (float)yabs);
					}

					// if clipping is used, we must get a clipping region for every plot item
					// and combine the regions from
					if (_useClipping)
					{
						if (i == 0)
							paintData._clippingColl[i] = g.Clip;

						Plot.Styles.LinePlotStyle linestyle = null;
						foreach (Plot.Styles.IG2DPlotStyle st in gpi.Style)
						{
							if (st is Plot.Styles.LinePlotStyle)
							{
								linestyle = st as Plot.Styles.LinePlotStyle;
								break;
							}
						}

						if (null != linestyle)
						{
							GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
							linestyle.GetFillPath(path, layer, plotdata, CSPlaneID.Bottom);
							if ((i + 1) < paintData._clippingColl.Length)
							{
								paintData._clippingColl[i + 1] = (Region)paintData._clippingColl[i].Clone();
								paintData._clippingColl[i + 1].Exclude(path);
							}
						}
						else
						{
							if ((i + 1) < paintData._clippingColl.Length)
								paintData._clippingColl[i + 1] = paintData._clippingColl[i];
						}
					}
				}
			}
		}