private void btnGetFuncAlongSection_Click(object sender, EventArgs e) { foreach (SectionDescription sectionDescription in sectionsList) { PointD p1 = sectionDescription.p1; PointD p2 = sectionDescription.p2; bool fromMarginToMargin = false; SectionDescription currSection = new SectionDescription(p1, p2, true); LineDescription2D l1 = currSection.SectionLine; DenseMatrix dmValues = (DenseMatrix)currImgData.DmSourceData.Clone(); DenseMatrix dmDistanceToLine = (DenseMatrix)currImgData.DmSourceData.Clone(); dmDistanceToLine.MapIndexedInplace((row, col, dVal) => { PointD currPt = new PointD(col, row); double dist = currPt.DistanceToLine(l1); return(dist); }); List <Tuple <PointD, double> > dataArray = new List <Tuple <PointD, double> >(); for (int row = 0; row < dmValues.RowCount; row++) { for (int col = 0; col < dmValues.ColumnCount; col++) { if (dmDistanceToLine[row, col] <= sectionGapWidth) { dataArray.Add(new Tuple <PointD, double>(new PointD(col, row), dmValues[row, col])); } } } List <Tuple <double, double> > dataArrayRotated = dataArray.ConvertAll((tpl) => { Vector2D pointVector = l1.p0.ToVector2D(tpl.Item1); double projection = pointVector * l1.directionVector; return(new Tuple <double, double>(projection, tpl.Item2)); }); double arrayMinPosition = dataArrayRotated.Min <Tuple <double, double> >(tpl1 => tpl1.Item1); double arrayMaxPosition = dataArrayRotated.Max <Tuple <double, double> >(tpl1 => tpl1.Item1); if (!fromMarginToMargin) { Vector2D pointVector = l1.p0.ToVector2D(p2); double projection = pointVector * l1.directionVector; double p2DoublePosition = projection; arrayMinPosition = Math.Min(0.0d, p2DoublePosition); arrayMaxPosition = Math.Max(0.0d, p2DoublePosition); dataArrayRotated.RemoveAll(tpl => ((tpl.Item1 < arrayMinPosition) || (tpl.Item1 > arrayMaxPosition))); } dataArrayRotated = dataArrayRotated.ConvertAll <Tuple <double, double> >( tpl => new Tuple <double, double>(tpl.Item1 - arrayMinPosition, tpl.Item2)); dataArrayRotated.Sort((tpl1, tpl2) => tpl1.Item1.CompareTo(tpl2.Item1)); FunctionRepresentationForm form1 = new FunctionRepresentationForm(); form1.dvScatterXSpace = DenseVector.OfEnumerable(dataArrayRotated.ConvertAll <double>(tpl => tpl.Item1)); form1.dvScatterFuncValues = DenseVector.OfEnumerable(dataArrayRotated.ConvertAll <double>(tpl => tpl.Item2)); if ((rtbMinValuesLimit.Text != "") && (rtbMaxValuesLimit.Text != "")) { form1.ForcedFuncMinValue = Convert.ToDouble(rtbMinValuesLimit.Text.Replace(".", ",")); form1.ForcedFuncMaxValue = Convert.ToDouble(rtbMaxValuesLimit.Text.Replace(".", ",")); form1.ForceFuncLimits = true; } if (rbtnShowByDots.Checked) { form1.scatterFuncDrawingVariant = SequencesDrawingVariants.circles; } else if (rbtnShowByLine.Checked) { form1.scatterFuncDrawingVariant = SequencesDrawingVariants.polyline; } form1.Show(); form1.Represent(); } }