private void UpdateImage() { imgToShow = origImage.Copy(); if (!sunDiskPositionAndSize.IsNull) { int thickness = 0; // fill out switch (currMouseActionRegime) { case MouseActionsRegime.Nothing: thickness = 0; break; case MouseActionsRegime.DrawingSunDisk: thickness = 2; break; case MouseActionsRegime.MovingSunDisk: thickness = 2; break; case MouseActionsRegime.ResizingSunDisk: thickness = 2; break; default: break; } imgToShow.Draw(sunDiskPositionAndSize.CircleF(), new Bgr(Color.Orange), thickness); } ThreadSafeOperations.UpdatePictureBox(pbTheImage, imgToShow.Bitmap, true); ThreadSafeOperations.SetText(lblTitle, sunDiskPositionAndSize.ToString(), false); }
public void ClearLog(int maxLinesCount = 2048) { if (textBox1.Lines.Count() >= maxLinesCount) { ThreadSafeOperations.SetTextTB(textBox1, "", false); } }
private void btnSaveImage_Click(object sender, EventArgs e) { if (tbFileName.Text == "") { return; } string fileName = tbFileName.Text; if (fileName == "") { SaveFileDialog d1 = new SaveFileDialog(); //d1.DefaultExt = ""; d1.FileName = DateTime.UtcNow.ToString("s").Replace(":", "-") + ".jpg"; d1.Filter = "jpeg images | *.jpg"; d1.AddExtension = true; DialogResult res = d1.ShowDialog(); if (res == DialogResult.OK) { fileName = d1.FileName; } } try { theImage.Bitmap.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg); ThreadSafeOperations.SetText(lblTitle1, fileName, false); } catch (Exception) { ThreadSafeOperations.SetText(lblTitle1, "Couldnt save the file", false); return; } }
private void pbTheImage_MouseDown(object sender, MouseEventArgs e) { PointD ptRealPosition = ((PictureBox)sender).GetMouseEventPositionOnRealImage(e, origImage); ThreadSafeOperations.SetText(lblTitle, ptRealPosition.ToString() + " down " + currMouseActionRegime, false); ptMouseDown = ptRealPosition; switch (ptRealPosition.IsPointInsideCircle(sunDiskPositionAndSize, 10.0d)) { case -1: currMouseActionRegime = MouseActionsRegime.DrawingSunDisk; break; case 0: currMouseActionRegime = MouseActionsRegime.ResizingSunDisk; sunDiskPositionAndSizeBeforeMovingResizing = sunDiskPositionAndSize.Copy(); break; case 1: currMouseActionRegime = MouseActionsRegime.MovingSunDisk; sunDiskPositionAndSizeBeforeMovingResizing = sunDiskPositionAndSize.Copy(); break; default: break; } }
private void SunDiskRepresentingAndCorrectionForm_Paint(object sender, PaintEventArgs e) { if (imgToShow == null) { imgToShow = origImage.Copy(); } ThreadSafeOperations.UpdatePictureBox(pbTheImage, imgToShow.Bitmap, true); }
private void pbRes_MouseUp(object sender, MouseEventArgs e) { // ReSharper disable InconsistentNaming imageConditionAndData currentICD = null; // ReSharper restore InconsistentNaming Type theSenderDataType = typeof(imageConditionAndData); if (e.Button == MouseButtons.Left && sender.Equals(meLeftButtonDownSender)) { PictureBoxSelection pbSelection = null; if (sender == pbRes) { currentICD = imgData; theSenderDataType = imgData.GetType(); } else if (sender == pbScale) { currentICD = imgData; theSenderDataType = imgData.currentColorSchemeRuler.GetType(); } //если уже есть selection у этого объекта, а это выделение пусто - проверить, было ли оно внутри //если было внутри - значит, был клик или даблклик внутри выделения - не обрабатывать здесь if (theSenderDataType == typeof(imageConditionAndData)) { pbSelection = new PictureBoxSelection(sender, meLeftButtonDownArgs.Location, e.Location, currentICD); if ((pbSelection.IsEmptySelection) && (currentICD.Selection != null)) { if (currentICD.Selection.CheckIfDoubleclickedinsideSelection(sender, e, currentICD)) { return; } } currentICD.Selection = pbSelection; } else if (theSenderDataType == typeof(ColorSchemeRuler)) { pbSelection = new PictureBoxSelection(sender, meLeftButtonDownArgs.Location, e.Location, currentICD.currentColorSchemeRuler); currentICD.currentColorSchemeRuler.Selection = pbSelection; } HighlightLinkedSelection(pbSelection); RaisePaintEvent(null, null); if ((theSenderDataType == typeof(ColorSchemeRuler)) && (imgData.HighlightMask != null)) { string testToShow = "significant area: " + imgData.maskImageBinary.CountNonzero()[0] + Environment.NewLine; testToShow += "highlighted area: " + imgData.highlightedArea + Environment.NewLine; testToShow += "highlighted area relative: " + (imgData.highlightedArea / (double)imgData.maskImageBinary.CountNonzero()[0]).ToString("e") + Environment.NewLine; ThreadSafeOperations.SetTextTB(tbStats, testToShow, true); } } }
private void SimpleShowImageForm_Paint(object sender, PaintEventArgs e) { if (LocalBitmap2show != null) { ThreadSafeOperations.UpdatePictureBox(pb1, LocalBitmap2show, true); } ThreadSafeOperations.SetText(lblTitle1, title, false); this.Text = title; }
private void DataDistributionRepresentingForm_Paint(object sender, PaintEventArgs e) { if (contextHasBeenChanged) { constructdataRepresentingPicture(); contextHasBeenChanged = false; } ThreadSafeOperations.UpdatePictureBox(pbRes, representingImage.Bitmap, true); }
private void simpleMultipleImagesShow_Paint(object sender, PaintEventArgs e) { for (int i = 0; i < 6; i++) { ThreadSafeOperations.UpdatePictureBox((PictureBox)(Controls.Find("pb" + (i + 1).ToString(), true)[0]), bmList[i], true); ThreadSafeOperations.SetText((Label)(Controls.Find("lblTitle" + (i + 1).ToString(), true)[0]), titlesList[i], false); } }
public HistogramCalcAndShowForm(string description, Dictionary <string, object> inDefProperties) { InitializeComponent(); ThreadSafeOperations.SetText(lblTitle, description, false); currentDescription = description; //theFont.thickness = 1; if (inDefProperties != null) { defaultProperties = inDefProperties; } }
public void SwapLog(string filename) { if (!ServiceTools.CheckIfDirectoryExists(filename)) { return; } ServiceTools.logToTextFile(filename, textBox1.Text, false); ThreadSafeOperations.SetTextTB(textBox1, "", false); }
//private void ReadTopoData() //{ // Dictionary<string, object> dictReadData = NetCDFoperations.ReadDataFromFile(strTopoGeoGridFilename); // dvLatValues = dictReadData[strLatNetCDFVarName] as DenseVector; // dvLatValuesScaledGrid = dictReadData[strLatNetCDFVarName] as DenseVector; // dvLonValues = dictReadData[strLonNetCDFVarName] as DenseVector; // dvLonValuesScaledGrid = dictReadData[strLonNetCDFVarName] as DenseVector; // dmTopoData = dictReadData[strTopoDataNetCDFVarName] as DenseMatrix; // dmTopoDataScaledGrid = dictReadData[strTopoDataNetCDFVarName] as DenseMatrix; // dmTopoDataScaledGrid = ConvertTopoToLog10(dmTopoDataScaledGrid, dmTopoData.Values.Min(), // dmTopoData.Values.Max()); // imgGeoImg = new imageConditionAndData(dmTopoDataScaledGrid, null); // imgGeoImg.currentColorScheme = new ColorScheme(""); // imgGeoImg.currentColorSchemeRuler = new ColorSchemeRuler(imgGeoImg.currentColorScheme, // dmTopoDataScaledGrid.Values.Min(), dmTopoDataScaledGrid.Values.Max()); // imgGeoImg.currentColorSchemeRuler.minValue = dmTopoDataScaledGrid.Values.Min(); // imgGeoImg.currentColorSchemeRuler.maxValue = dmTopoDataScaledGrid.Values.Max(); // imgGeoImg.currentColorSchemeRuler.imgToRule = imgGeoImg; // imgGeoImg.currentColorSchemeRuler.IsMarginsFixed = false; // DenseMatrix dmTopoDataScaledGridBinary = (DenseMatrix)dmTopoDataScaledGrid.Clone(); // dmTopoDataScaledGridBinary.MapInplace(dval => (dval <= 0.0d)?(0.0d):(1.0d)); // imgImgTopoEdges = new imageConditionAndData(dmTopoDataScaledGridBinary); // imgImgTopoEdges.setGrayscaleCalculatedColorScheme(); // imgImgTopoEdges.currentColorSchemeRuler.minValue = 0.0d; // imgImgTopoEdges.currentColorSchemeRuler.maxValue = 1.0d; // imgImgTopoEdges.currentColorSchemeRuler.IsMarginsFixed = true; // imgImgTopoEdges.currentColorSchemeRuler.imgToRule = imgImgTopoEdges; //} #endregion // obsolete - TOPO data public void ReadGPSFiles(Label lblToShowStatus = null) { if (listGPSdataLogNetCDFFileNames.Count == 0) { return; } if (lTracksData.Count == 0) { TrackData newTrack = new TrackData(); newTrack.lineColor = tracksColor; lTracksData.Add(newTrack); } else { lTracksData.Clear(); TrackData newTrack = new TrackData(); lTracksData.Add(newTrack); } foreach (string GPSdataLogNetCDFfileName in listGPSdataLogNetCDFFileNames) { if (lblToShowStatus != null) { ThreadSafeOperations.SetText(lblToShowStatus, "reading " + GPSdataLogNetCDFfileName, false); } Dictionary <string, object> dictCurrFileData = NetCDFoperations.ReadDataFromFile(GPSdataLogNetCDFfileName); string varNameDateTime = "DateTime"; List <long> currFileDateTimeLongTicksList = new List <long>((dictCurrFileData[varNameDateTime] as long[])); List <DateTime> currFileDateTimeList = currFileDateTimeLongTicksList.ConvertAll(longVal => new DateTime(longVal)); string varNameGPSdata = "GPSdata"; List <GPSdata> lGPSdataToAdd = GPSdata.OfDenseMatrix(dictCurrFileData[varNameGPSdata] as DenseMatrix); TimeSeries <GPSdata> tsCurrFileGPSserie = new TimeSeries <GPSdata>(lGPSdataToAdd, currFileDateTimeList, true); tsCurrFileGPSserie.RemoveValues(gpsDatum => ((gpsDatum.lat == 0.0d) && (gpsDatum.lon == 0.0d))); lTracksData[0].tsGPSdata.AddSubseriaData(tsCurrFileGPSserie); } if (lblToShowStatus != null) { ThreadSafeOperations.SetText(lblToShowStatus, "", false); } }
public void DetectConnected() { var classificator = new SkyCloudClassification(processingImage, defaultProperties); classificator.Classify(); DenseMatrix dmSkyIndexDataBinary = classificator.dmSkyIndexDataBinary(); Image <Gray, Byte> imgSkyIndexDataBinary = ImageProcessing.grayscaleImageFromDenseMatrixWithFixedValuesBounds(dmSkyIndexDataBinary, 0.0d, 1.0d, true); imgSkyIndexDataBinary = imgSkyIndexDataBinary.Mul(classificator.maskImage); Image <Bgr, Byte> previewImage = imgSkyIndexDataBinary.CopyBlank().Convert <Bgr, Byte>(); // Contour<Point> contoursDetected = imgSkyIndexDataBinary.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_LIST); #region // EmguCV 3.0 //VectorOfVectorOfPoint contoursDetected = new VectorOfVectorOfPoint(); //CvInvoke.FindContours(imgSkyIndexDataBinary, contoursDetected, null, Emgu.CV.CvEnum.RetrType.List, // Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); //contoursArray = new List<VectorOfPoint>(); //int count = contoursDetected.Size; //var colorGen = new RandomPastelColorGenerator(); //for (int i = 0; i < count; i++) //{ // Color currentColor = colorGen.GetNext(); // var currentColorBgr = new Bgr(currentColor.B, currentColor.G, currentColor.R); // using (VectorOfPoint currContour = contoursDetected[i]) // { // contoursArray.Add(currContour); // previewImage.Draw(currContour.ToArray(), currentColorBgr, -1); //.Draw(currContour, currentColorBgr, -1); // } //} #endregion // EmguCV 3.0 List <Contour <Point> > contoursDetected = imgSkyIndexDataBinary.DetectContours(); RandomPastelColorGenerator colorGen = new RandomPastelColorGenerator(); foreach (Contour <Point> currContour in contoursDetected) { Color currentColor = colorGen.GetNext(); Bgr currentColorBgr = new Bgr(currentColor.B, currentColor.G, currentColor.R); previewImage.Draw(currContour, currentColorBgr, -1); } ThreadSafeOperations.SetTextTB(tbLog, "Количество выделенных объектов: " + contoursArray.Count + Environment.NewLine, true); //ShowImageForm ImgShow = new ShowImageForm(localPreviewBitmap, ParentForm, this); var imgShow = new SimpleShowImageForm(previewImage); imgShow.Show(); }
public Field3Drepresentation(DenseMatrix dmDataToRepresent, Dictionary <string, object> properties, string description = "") { InitializeComponent(); strDataDescription = description; ThreadSafeOperations.SetText(lblDescription, strDataDescription, false); defaultProperties = properties; strOutputDirectory = (string)defaultProperties["DefaultDataFilesLocation"]; if (!ServiceTools.CheckIfDirectoryExists(strOutputDirectory)) { strOutputDirectory = ""; } dmData = dmDataToRepresent.Copy(); ILScene scene = new ILScene(); currSurfPlotCube = new ILPlotCube(); currSurfPlotCube.TwoDMode = false; ILSurface surf; ILInArray <double> ilaDataMeshToShow = dmData.ToArray(); if ((dmDataXcoord != null) && (dmDataYcoord != null)) { ILInArray <double> ilaXvalues = dmDataXcoord.Row(0).ToArray(); ILInArray <double> ilaYvalues = dmDataYcoord.Column(0).ToArray(); surf = new ILSurface(ilaDataMeshToShow, ilaXvalues, ilaYvalues); } else { surf = new ILSurface(ilaDataMeshToShow); } surf.UseLighting = true; surf.Colormap = Colormaps.ILNumerics; surf.Children.Add(new ILColorbar()); currSurfPlotCube.Children.Add(surf); currSurfPlotCube.Rotation = Matrix4.Rotation(new Vector3(1, 0, 0), 1.2f) * Matrix4.Rotation(new Vector3(0, 0, 1), Math.PI); currSurfPlotCube.Projection = Projection.Perspective; scene.Add(currSurfPlotCube); ilPanel1.Scene = scene; }
private void pbHistRepresentation_Click(object sender, EventArgs e) { //xCoordinateBinCenter = Convert.ToInt32(serviceSpaceGap + (binCenter - xSpaceMin) * koeffX); //yCoordinateTop = Convert.ToInt32(pictureHeight - serviceSpaceGap - probDens * koeffY); // currBinCenter = ((xCoordinate - serviceSpaceGap)/koeffX) + xSpaceMin // currProbDens = (pictureHeight - serviceSpaceGap - yCoordinateTop)/koeffY int mouseClickX = ((MouseEventArgs)e).X; int mouseClickY = ((MouseEventArgs)e).Y; double currBinCenter = ((mouseClickX - serviceSpaceGap) / koeffX) + xSpaceMin; //double currProbDens = (pictureHeight - serviceSpaceGap - mouseClickY)/koeffY; int barWidthHalfed = Convert.ToInt32((double)barWidth / 2.0d); barWidthHalfed = (barWidthHalfed < 1) ? (1) : (barWidthHalfed); for (int i = 0; i < histToRepresent.BinsCount; i++) { double binCenter = histToRepresent.dvbinsCenters[i]; double probDens = histToRepresent.dvProbDens[i]; int xCoordinateBinCenter = Convert.ToInt32(serviceSpaceGap + (binCenter - xSpaceMin) * koeffX); if ((mouseClickX >= xCoordinateBinCenter - barWidthHalfed) && (mouseClickX <= xCoordinateBinCenter + barWidthHalfed)) { int yCoordinateTop = Convert.ToInt32(pictureHeight - serviceSpaceGap - probDens * koeffY); yCoordinateTop = (yCoordinateTop == pictureHeight - serviceSpaceGap) ? (pictureHeight - serviceSpaceGap - 2) : (yCoordinateTop); Point ptUperLeft = new Point(xCoordinateBinCenter - barWidthHalfed, yCoordinateTop); Size barSize = new Size(barWidth, pictureHeight - serviceSpaceGap - yCoordinateTop); Image <Bgr, byte> tmpImage = theImage.Copy(); tmpImage.Draw(new Rectangle(ptUperLeft, barSize), colorMagenta, -1); theFont.thickness = 2; tmpImage.Draw(binCenter.ToString("e"), ref theFont, new Point(mouseClickX - 40, pictureHeight + 30 - serviceSpaceGap), colorBlack); tmpImage.Draw((probDens).ToString("e"), ref theFont, new Point(serviceSpaceGap + 4, yCoordinateTop), colorBlack); theFont.thickness = 1; //tmpImage.Draw(binCenter.ToString("e"), new Point(mouseClickX - 40, pictureHeight + 30 - serviceSpaceGap), FontFace.HersheyPlain, 1.0d, colorBlack, 2); //tmpImage.Draw((probDens).ToString("e"), new Point(serviceSpaceGap + 4, yCoordinateTop), FontFace.HersheyPlain, 1.0d, colorBlack, 2); ThreadSafeOperations.UpdatePictureBox(pbHistRepresentation, tmpImage.Bitmap, false); break; } } }
void bgwQueueOutputWorker_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker thisWorker = sender as BackgroundWorker; while (true) { if (thisWorker.CancellationPending) { break; } try { if (cqLinesToLog.Count > 0) { while (cqLinesToLog.Count > 0) { LinesToDisplay currLine = new LinesToDisplay(); while (!cqLinesToLog.TryDequeue(out currLine)) { Application.DoEvents(); Thread.Sleep(0); } ThreadSafeOperations.SetTextTB(textBox1, currLine.textLine, currLine.appendMode); Application.DoEvents(); Thread.Sleep(0); } } else { Application.DoEvents(); Thread.Sleep(0); continue; } } catch (Exception) { Application.DoEvents(); Thread.Sleep(0); continue; } } }
private void btnSaveToFile_Click(object sender, EventArgs e) { if (tbFileName.Text == "") { return; } string fileName = tbFileName.Text; try { LocalBitmap2show.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg); ThreadSafeOperations.SetText(lblTitle1, fileName, false); } catch (Exception) { ThreadSafeOperations.SetText(lblTitle1, "Couldnt save the file", false); return; } }
private void PlotByNodesPoints( DenseMatrix dmListOfData, Dictionary <string, object> properties, string description = "") { strDataDescription = description; ThreadSafeOperations.SetText(lblDescription, strDataDescription, false); defaultProperties = properties; strOutputDirectory = (string)defaultProperties["DefaultDataFilesLocation"]; if (!ServiceTools.CheckIfDirectoryExists(strOutputDirectory)) { strOutputDirectory = ""; } dmDataList = dmListOfData.Copy(); double dataMaxVal = dmDataList.Column(3).Max(); double dataMinVal = dmDataList.Column(3).Min(); ILScene scene = new ILScene(); currSurfPlotCube = new ILPlotCube(); currSurfPlotCube.TwoDMode = false; ILArray <float> A = ILMath.tosingle((ILArray <double>)(dmDataList.SubMatrix(0, dmDataList.RowCount, 0, 3).ToArray())); ILArray <float> colors = ILMath.zeros <float>(4, dmDataList.RowCount); ColorScheme newCS = new ColorScheme(""); double[] dvRvalues = DenseVector.Create(dmDataList.RowCount, (r) => { Bgr currColor = newCS.GetColorByValueAndRange(dmDataList[r, 3], dataMinVal, dataMaxVal); return(currColor.Red / 255.0d); }).ToArray(); double[] dvGvalues = DenseVector.Create(dmDataList.RowCount, (r) => { Bgr currColor = newCS.GetColorByValueAndRange(dmDataList[r, 3], dataMinVal, dataMaxVal); return(currColor.Green / 255.0d); }).ToArray(); double[] dvBvalues = DenseVector.Create(dmDataList.RowCount, (r) => { Bgr currColor = newCS.GetColorByValueAndRange(dmDataList[r, 3], dataMinVal, dataMaxVal); return(currColor.Blue / 255.0d); }).ToArray(); colors["0;:"] = ILMath.tosingle((ILArray <double>)dvRvalues); colors["1;:"] = ILMath.tosingle((ILArray <double>)dvGvalues); colors["2;:"] = ILMath.tosingle((ILArray <double>)dvBvalues); colors["3;:"] = 0.5f; ILPoints pts = new ILPoints { Positions = A, Colors = colors, }; pts.Color = null; currSurfPlotCube.Add(pts); currSurfPlotCube.Projection = Projection.Orthographic; currSurfPlotCube.Rotation = Matrix4.Rotation(new Vector3(1, 1, 1), 0.5f); currSurfPlotCube.Plots.Reset(); scene.Add(currSurfPlotCube); ilPanel1.Scene = scene; }
//private PdfFont ArialNormal; //private PdfFont ArialBold; //private PdfFont ArialItalic; //private PdfFont ArialBoldItalic; //private PdfFont TimesNormal; //private PdfFont Comic; //private PdfTilingPattern WaterMark; //public void SaveToPDF(string filename = "", bool absolutePath = true) //{ // if (filename == "") return; // PdfDocument thePdfDoc = new PdfDocument(10.0, 10.0, UnitOfMeasure.cm); // DefineFontResources(thePdfDoc); // //DefineTilingPatternResource(thePdfDoc); // PdfPage Page = new PdfPage(thePdfDoc); // PdfContents Contents = new PdfContents(Page); // DrawHeading(Contents, currentDescription); // DrawAnImage(thePdfDoc, Contents, theImage.Bitmap, filename); // //DrawTextBox(Contents); // thePdfDoc.CreateFile(filename); // //File.Delete(filename + "_tmp.jpg"); // Process Proc = new Process(); // Proc.StartInfo = new ProcessStartInfo(filename); // Proc.Start(); //} //private void DefineFontResources(PdfDocument Document) //{ // ArialNormal = new PdfFont(Document, "Arial", FontStyle.Regular, true); // ArialBold = new PdfFont(Document, "Arial", FontStyle.Bold, true); // ArialItalic = new PdfFont(Document, "Arial", FontStyle.Italic, true); // ArialBoldItalic = new PdfFont(Document, "Arial", FontStyle.Bold | FontStyle.Italic, true); // TimesNormal = new PdfFont(Document, "Times New Roman", FontStyle.Regular, true); // Comic = new PdfFont(Document, "Comic Sans MS", FontStyle.Bold, true); // ArialNormal.CharSubstitution(9679, 9679, 164); // return; //} //private void DrawHeading(PdfContents Contents, string headingString = "") //{ // Contents.DrawText(ArialNormal, 12.0, 5.0, 9.5, TextJustify.Center, 0.02, Color.Black, Color.Black, headingString); // Contents.SaveGraphicsState(); // Contents.RestoreGraphicsState(); // return; //} //private void DrawAnImage(PdfDocument Document, PdfContents Contents, Bitmap theImageBitmap, string finalFileName) //{ // // define local image resources // string tmpFilename = finalFileName + "_tmp.jpg"; // //System.Drawing.Imaging.EncoderParameters encParams = new System.Drawing.Imaging.EncoderParameters(1); // //encParams.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100); // theImageBitmap.Save(tmpFilename, System.Drawing.Imaging.ImageFormat.Jpeg); // PdfImage Image1 = new PdfImage(Document, tmpFilename); // // image size will be limited to 1.4" by 1.4" // PdfFileWriter.SizeD ImageSize = Image1.ImageSize(10.0d, 10.0d); // // save graphics state // Contents.SaveGraphicsState(); // // translate coordinate origin to the center of the picture // //Contents.Translate(3.36, 5.7); // // clipping path // //Contents.DrawOval(-ImageSize.Width / 2, -ImageSize.Height / 2, ImageSize.Width, ImageSize.Height, PaintOp.ClipPathEor); // // draw image // Contents.DrawImage(Image1, 0.5d, 0.5d, ImageSize.Width, ImageSize.Height); // // restore graphics state // Contents.RestoreGraphicsState(); // return; //} //private void DrawTextBox(PdfContents Contents) //{ // // save graphics state // Contents.SaveGraphicsState(); // // translate origin to PosX=1.1" and PosY=1.1" this is the bottom left corner of the text box example // Contents.Translate(1.1, 1.1); // // Contents.TranslateScaleRotate(7.4, 1.1, 1.0, Math.PI / 2); // // Define constants // // Box width 3.25" // // Box height is 3.65" // // Normal font size is 9.0 points. // const Double Width = 3.15; // const Double Height = 3.65; // const Double FontSize = 9.0; // // Create text box object width 3.25" // // First line indent of 0.25" // PdfFileWriter.TextBox Box = new PdfFileWriter.TextBox(Width, 0.25); // // add text to the text box // Box.AddText(ArialNormal, FontSize, // "This area is an example of displaying text that is too long to fit within a fixed width " + // "area. The text is displayed justified to right edge. You define a text box with the required " + // "width and first line indent. You add text to this box. The box will divide the text into " + // "lines. Each line is made of segments of text. For each segment, you define font, font " + // "size, drawing style and color. After loading all the text, the program will draw the formatted text.\n"); // Box.AddText(TimesNormal, FontSize + 1.0, "Example of multiple fonts: Times New Roman, "); // Box.AddText(Comic, FontSize, "Comic Sans MS, "); // Box.AddText(ArialNormal, FontSize, "Example of regular, "); // Box.AddText(ArialBold, FontSize, "bold, "); // Box.AddText(ArialItalic, FontSize, "italic, "); // Box.AddText(ArialBoldItalic, FontSize, "bold plus italic. "); // Box.AddText(ArialNormal, FontSize - 2.0, "Arial size 7, "); // Box.AddText(ArialNormal, FontSize - 1.0, "size 8, "); // Box.AddText(ArialNormal, FontSize, "size 9, "); // Box.AddText(ArialNormal, FontSize + 1.0, "size 10. "); // Box.AddText(ArialNormal, FontSize, DrawStyle.Underline, "Underline, "); // Box.AddText(ArialNormal, FontSize, DrawStyle.Strikeout, "Strikeout. "); // Box.AddText(ArialNormal, FontSize, "Subscript H"); // Box.AddText(ArialNormal, FontSize, DrawStyle.Subscript, "2"); // Box.AddText(ArialNormal, FontSize, "O. Superscript A"); // Box.AddText(ArialNormal, FontSize, DrawStyle.Superscript, "2"); // Box.AddText(ArialNormal, FontSize, "+B"); // Box.AddText(ArialNormal, FontSize, DrawStyle.Superscript, "2"); // Box.AddText(ArialNormal, FontSize, "=C"); // Box.AddText(ArialNormal, FontSize, DrawStyle.Superscript, "2"); // Box.AddText(ArialNormal, FontSize, "\n"); // Box.AddText(Comic, FontSize, Color.Red, "Lets add some color, "); // Box.AddText(Comic, FontSize, Color.Green, "green, "); // Box.AddText(Comic, FontSize, Color.Blue, "blue, "); // Box.AddText(Comic, FontSize, Color.Orange, "orange, "); // Box.AddText(Comic, FontSize, DrawStyle.Underline, Color.Purple, "and purple.\n"); // // Draw the text box // // Text left edge is at zero (note: origin was translated to 1.1") // // The top text base line is at Height less first line ascent. // // Text drawing is limited to vertical coordinate of zero. // // First line to be drawn is line zero. // // After each line add extra 0.015". // // After each paragraph add extra 0.05" // // Stretch all lines to make smooth right edge at box width of 3.15" // // After all lines are drawn, PosY will be set to the next text line after the box's last paragraph // Double PosY = Height; // Contents.DrawText(0.0, ref PosY, 0.0, 0, 0.015, 0.05, true, Box); // // Create text box object width 3.25" // // No first line indent // Box = new PdfFileWriter.TextBox(Width); // // Add text as before. // // No extra line spacing. // // No right edge adjustment // Box.AddText(ArialNormal, FontSize, // "In the examples above this area the text box was set for first line indent of " + // "0.25 inches. This paragraph has zero first line indent and no right justify."); // Contents.DrawText(0.0, ref PosY, 0.0, 0, 0.01, 0.05, false, Box); // // Create text box object width 2.75 // // First line hanging indent of 0.5" // Box = new PdfFileWriter.TextBox(Width - 0.5, -0.5); // // Add text // Box.AddText(ArialNormal, FontSize, // "This paragraph is set to first line hanging indent of 0.5 inches. " + // "The left margin of this paragraph is 0.5 inches."); // // Draw the text // // left edge at 0.5" // Contents.DrawText(0.5, ref PosY, 0.0, 0, 0.01, 0.05, false, Box); // // restore graphics state // Contents.RestoreGraphicsState(); // return; //} #endregion OBSOLETE save as PDF manually - p2 private void FunctionRepresentationForm_Load(object sender, EventArgs e) { ThreadSafeOperations.SetText(lblTitle1, currentDescription, false); }
//public FunctionRepresentationForm(FunctionDefinitionTypes theDefinitionType = FunctionDefinitionTypes.analytic, string description = "") public FunctionRepresentationForm(string description = "") { InitializeComponent(); ThreadSafeOperations.SetText(lblTitle1, description, false); currentDescription = description; }
private void RepresentAnalytic() { int xValuesCount = pictureWidth - (2 * serviceSpaceGap);// оставляем место на шкалу Y List <Point> rulerVertices = new List <Point>(); rulerVertices.Add(new Point(serviceSpaceGap, pictureHeight - serviceSpaceGap)); rulerVertices.Add(new Point(pictureWidth - serviceSpaceGap, pictureHeight - serviceSpaceGap)); rulerVertices.Add(new Point(pictureWidth - serviceSpaceGap, serviceSpaceGap)); rulerVertices.Add(new Point(serviceSpaceGap, serviceSpaceGap)); theImage.DrawPolyline(rulerVertices.ToArray(), true, colorBlack, 2); DenseVector dvXSpaceValues = DenseVector.Create(xValuesCount, new Func <int, double>(i => xSpaceMin + ((double)i / ((double)xValuesCount - 1.0d)) * (xSpaceMax - xSpaceMin))); DenseVector parametersList = null; for (int i = 0; i < theRepresentingFunctions.Count; i++) { Func <DenseVector, double, double> theRepresentingFunction = theRepresentingFunctions[i]; DenseVector currentParametersList = parameters[i]; DenseVector dvFuncValues = DenseVector.Create(xValuesCount, new Func <int, double>(j => theRepresentingFunction(currentParametersList, dvXSpaceValues[j]))); double funcMax = dvFuncValues.Max(); double funcMin = dvFuncValues.Min(); if (!ForceFuncLimits) { overallFuncMax = (funcMax > overallFuncMax) ? (funcMax) : (overallFuncMax); overallFuncMin = (funcMin < overallFuncMin) ? (funcMin) : (overallFuncMin); } } #region Прописываем текстовые маркеры MCvFont theFont = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_PLAIN, 1.0d, 1.0d); theFont.thickness = 1; double dMarkersCount = (double)(pictureHeight - (2 * serviceSpaceGap)) / 30.0d; dMarkersCount = (dMarkersCount > 10.0d) ? (10.0d) : (dMarkersCount); double dRulerValueGap = (overallFuncMax - overallFuncMin) / (double)dMarkersCount; //dRulerValueGap = (dRulerValueGap < 1.0d) ? (1.0d) : dRulerValueGap; int deciGap = Convert.ToInt32(Math.Truncate(Math.Log(dRulerValueGap, 2.0d))); double rulerValueGap = Math.Pow(2.0, (double)deciGap); double lowerMarkerValue = overallFuncMin - Math.IEEERemainder(overallFuncMin, rulerValueGap); lowerMarkerValue = (lowerMarkerValue < overallFuncMin) ? (lowerMarkerValue + rulerValueGap) : (lowerMarkerValue); double currentMarkerValue = lowerMarkerValue; double nextYPositionDouble = (1.0d - ((currentMarkerValue - overallFuncMin) / (overallFuncMax - overallFuncMin))) * (double)(pictureHeight - 2 * serviceSpaceGap) + serviceSpaceGap; while (nextYPositionDouble > serviceSpaceGap) { double yPositionDouble = (1.0d - ((currentMarkerValue - overallFuncMin) / (overallFuncMax - overallFuncMin))) * (double)(pictureHeight - 2 * serviceSpaceGap) + serviceSpaceGap; int yPosition = Convert.ToInt32(Math.Round(yPositionDouble)); LineSegment2D theLine = new LineSegment2D(new Point(serviceSpaceGap, yPosition), new Point(serviceSpaceGap - 5, yPosition)); Bgr markerColor = colorBlack; theImage.Draw(theLine, markerColor, 2); String message = currentMarkerValue.ToString(); //theImage.Draw(message, new Point(2, yPosition), Emgu.CV.CvEnum.FontFace.HersheyPlain, 1.0d, markerColor); theImage.Draw(message, ref theFont, new Point(2, yPosition), markerColor); currentMarkerValue += rulerValueGap; nextYPositionDouble = (1.0d - ((currentMarkerValue - overallFuncMin) / (overallFuncMax - overallFuncMin))) * (double)(pictureHeight - 2 * serviceSpaceGap) + serviceSpaceGap; } double dMarkersCountX = (double)(pictureWidth - (2 * serviceSpaceGap)) / 30.0d; dMarkersCountX = (dMarkersCountX > 10.0d) ? (10.0d) : (dMarkersCountX); double dRulerValueGapX = (xSpaceMax - xSpaceMin) / (double)dMarkersCountX; int deciGapX = Convert.ToInt32(Math.Truncate(Math.Log(dRulerValueGapX, 2.0d))); double rulerValueGapX = Math.Pow(2.0, (double)deciGapX); double lowerMarkerValueX = xSpaceMin - Math.IEEERemainder(xSpaceMin, rulerValueGapX); lowerMarkerValueX = (lowerMarkerValueX < xSpaceMin) ? (lowerMarkerValueX + rulerValueGapX) : (lowerMarkerValueX); double currentMarkerValueX = lowerMarkerValueX; double nextXPositionDouble = serviceSpaceGap + ((currentMarkerValueX - xSpaceMin) / (xSpaceMax - xSpaceMin)) * (double)(pictureWidth - 2 * serviceSpaceGap); while (nextXPositionDouble < pictureWidth - serviceSpaceGap) { double xPositionDouble = serviceSpaceGap + ((currentMarkerValueX - xSpaceMin) / (xSpaceMax - xSpaceMin)) * (double)(pictureWidth - 2 * serviceSpaceGap); int xPosition = Convert.ToInt32(Math.Round(xPositionDouble)); LineSegment2D theLine = new LineSegment2D(new Point(xPosition, pictureHeight - serviceSpaceGap), new Point(xPosition, pictureHeight - serviceSpaceGap + 5)); Bgr markerColor = colorBlack; theImage.Draw(theLine, markerColor, 2); String message = currentMarkerValueX.ToString(); theImage.Draw(message, ref theFont, new Point(xPosition, pictureHeight - 10), markerColor); // theImage.Draw(message, new Point(xPosition, pictureHeight - 10), Emgu.CV.CvEnum.FontFace.HersheyPlain, 1.0d, markerColor); currentMarkerValueX += rulerValueGapX; nextXPositionDouble = serviceSpaceGap + ((currentMarkerValueX - xSpaceMin) / (xSpaceMax - xSpaceMin)) * (double)(pictureWidth - 2 * serviceSpaceGap); } #endregion Прописываем текстовые маркеры double koeff = (pictureHeight - (2 * serviceSpaceGap)) / (overallFuncMax - overallFuncMin); for (int i = 0; i < theRepresentingFunctions.Count; i++) { Func <DenseVector, double, double> theRepresentingFunction = theRepresentingFunctions[i]; DenseVector currentParametersList = parameters[i]; double currFuncKoeff = koeff; if (scaleFunctionValuesToMax[i]) { DenseVector dvCurrFuncValues = DenseVector.Create(xValuesCount, j => theRepresentingFunction(currentParametersList, dvXSpaceValues[j])); double currFuncMax = dvCurrFuncValues.Max(); double currFuncMin = dvCurrFuncValues.Min(); currFuncKoeff = (pictureHeight - (2 * serviceSpaceGap)) / (currFuncMax - currFuncMin); } //DenseVector dvXSpaceValues = DenseVector.Create(xValuesCount, new Func<int, double>(i => xSpaceMin + ((double)i / ((double)xValuesCount - 1.0d)) * (xSpaceMax - xSpaceMin))); parametersList = null; DenseVector dvFuncValues = DenseVector.Create(xValuesCount, new Func <int, double>(j => theRepresentingFunction(currentParametersList, dvXSpaceValues[j]))); Bgr currentLineColor = lineColors[i]; DenseVector xCoordinates = DenseVector.Create(xValuesCount, new Func <int, double>(j => ((double)serviceSpaceGap + j))); DenseVector yCoordinates = DenseVector.Create(xValuesCount, new Func <int, double>(j => { double pixValue = currFuncKoeff * (dvFuncValues[j] - overallFuncMin); return(pictureHeight - serviceSpaceGap - pixValue); })); List <Point> funcRepresentationPoints = new List <Point>(); for (int j = 0; j < xValuesCount; j++) { if (double.IsNaN(yCoordinates[j])) { continue; } funcRepresentationPoints.Add(new Point(Convert.ToInt32(xCoordinates[j]), Convert.ToInt32(yCoordinates[j]))); } theImage.DrawPolyline(funcRepresentationPoints.ToArray(), false, currentLineColor, 2); } ThreadSafeOperations.UpdatePictureBox(pbFunctionRepresentation, theImage.Bitmap, false); }
public void Represent() { if (histToRepresent.IsEmpty()) { return; } ThreadSafeOperations.SetTextTB(tbStats, "", false); double maxHistProbValue = histToRepresent.dvProbDens.Values.Max(); double ySpaceGap = 0.2d * maxHistProbValue; overallProbMax = maxHistProbValue + ySpaceGap; double maxHistValues = histToRepresent.dvData.Values.Max(); double minHistValues = histToRepresent.dvData.Values.Min(); double xSpaceGap = 0.2d * (maxHistValues - minHistValues); xSpaceMin = ((minHistValues - xSpaceGap) < xSpaceMin) ? (minHistValues - xSpaceGap) : (xSpaceMin); xSpaceMax = ((maxHistValues + xSpaceGap) > xSpaceMax) ? (maxHistValues + xSpaceGap) : (xSpaceMax); pictureWidth = pbHistRepresentation.Width; pictureHeight = pbHistRepresentation.Height; serviceSpaceGap = Convert.ToInt32(0.05d * Math.Min(pictureHeight, pictureWidth)); theImage = new Image <Bgr, Byte>(pictureWidth, pictureHeight, new Bgr(255, 255, 255)); List <Point> rulerVertices = new List <Point>(); rulerVertices.Add(new Point(serviceSpaceGap, pictureHeight - serviceSpaceGap)); rulerVertices.Add(new Point(pictureWidth - serviceSpaceGap, pictureHeight - serviceSpaceGap)); rulerVertices.Add(new Point(pictureWidth - serviceSpaceGap, serviceSpaceGap)); rulerVertices.Add(new Point(serviceSpaceGap, serviceSpaceGap)); theImage.DrawPolyline(rulerVertices.ToArray(), true, colorBlack, 2); koeffY = ((double)pictureHeight - 2.0d * (double)serviceSpaceGap) / (overallProbMax); koeffX = ((double)pictureWidth - 2.0d * (double)serviceSpaceGap) / (xSpaceMax - xSpaceMin); #region Прописываем текстовые маркеры double dMarkersCount = (double)(pictureHeight - (2 * serviceSpaceGap)) / 30.0d; dMarkersCount = (dMarkersCount > 10.0d) ? (10.0d) : (dMarkersCount); double dRulerValueGap = (overallProbMax) / (double)dMarkersCount; int deciGap = Convert.ToInt32(Math.Truncate(Math.Log(dRulerValueGap, 2.0d))); double rulerValueGap = Math.Pow(2.0, (double)deciGap); double lowerMarkerValue = 0.0d; double currentMarkerValue = lowerMarkerValue; double nextYPositionDouble = (1.0d - ((currentMarkerValue) / overallProbMax)) * (double)(pictureHeight - 2 * serviceSpaceGap) + serviceSpaceGap; while (nextYPositionDouble > serviceSpaceGap) { double yPositionDouble = (1.0d - ((currentMarkerValue) / overallProbMax)) * (double)(pictureHeight - 2 * serviceSpaceGap) + serviceSpaceGap; int yPosition = Convert.ToInt32(Math.Round(yPositionDouble)); LineSegment2D theLine = new LineSegment2D(new Point(serviceSpaceGap, yPosition), new Point(serviceSpaceGap - 5, yPosition)); Bgr markerColor = colorBlack; theImage.Draw(theLine, markerColor, 2); String message = Math.Round(currentMarkerValue, 2).ToString(); theImage.Draw(message, ref theFont, new Point(2, yPosition), markerColor); // theImage.Draw(message, new Point(2, yPosition), FontFace.HersheyPlain, 1.0d, markerColor); currentMarkerValue += rulerValueGap; nextYPositionDouble = (1.0d - ((currentMarkerValue) / overallProbMax)) * (double)(pictureHeight - 2 * serviceSpaceGap) + serviceSpaceGap; } double dMarkersCountX = (double)(pictureWidth - (2 * serviceSpaceGap)) / 30.0d; dMarkersCountX = (dMarkersCountX > 10.0d) ? (10.0d) : (dMarkersCountX); double dRulerValueGapX = (xSpaceMax - xSpaceMin) / (double)dMarkersCountX; int deciGapX = Convert.ToInt32(Math.Truncate(Math.Log(dRulerValueGapX, 2.0d))); double rulerValueGapX = Math.Pow(2.0, (double)deciGapX); double lowerMarkerValueX = xSpaceMin - Math.IEEERemainder(xSpaceMin, rulerValueGapX); lowerMarkerValueX = (lowerMarkerValueX < xSpaceMin) ? (lowerMarkerValueX + rulerValueGapX) : (lowerMarkerValueX); double currentMarkerValueX = lowerMarkerValueX; double nextXPositionDouble = serviceSpaceGap + ((currentMarkerValueX - xSpaceMin) / (xSpaceMax - xSpaceMin)) * (double)(pictureWidth - 2 * serviceSpaceGap); while (nextXPositionDouble < pictureWidth - serviceSpaceGap) { double xPositionDouble = serviceSpaceGap + ((currentMarkerValueX - xSpaceMin) / (xSpaceMax - xSpaceMin)) * (double)(pictureWidth - 2 * serviceSpaceGap); int xPosition = Convert.ToInt32(Math.Round(xPositionDouble)); LineSegment2D theLine = new LineSegment2D(new Point(xPosition, pictureHeight - serviceSpaceGap), new Point(xPosition, pictureHeight - serviceSpaceGap + 5)); Bgr markerColor = colorBlack; theImage.Draw(theLine, markerColor, 2); String message = Math.Round(currentMarkerValueX, 2).ToString(); theImage.Draw(message, ref theFont, new Point(xPosition, pictureHeight - 10), markerColor); // theImage.Draw(message, new Point(xPosition, pictureHeight - 10), FontFace.HersheyPlain, 1.0d, markerColor); currentMarkerValueX += rulerValueGapX; nextXPositionDouble = serviceSpaceGap + ((currentMarkerValueX - xSpaceMin) / (xSpaceMax - xSpaceMin)) * (double)(pictureWidth - 2 * serviceSpaceGap); } #endregion Прописываем текстовые маркеры #region проставляем квантили, если надо if (cbShowQuantiles.Checked) { for (int i = 0; i < histToRepresent.quantilesList.Count; i++) { double binCenter = histToRepresent.quantilesList[i]; int xCoordinateBinCenter = Convert.ToInt32(serviceSpaceGap + (binCenter - xSpaceMin) * koeffX); Point ptTop = new Point(xCoordinateBinCenter, pictureHeight - serviceSpaceGap); Point ptBottom = new Point(xCoordinateBinCenter, serviceSpaceGap); theImage.Draw(new LineSegment2D(ptTop, ptBottom), colorGreen, 2); } double medianCenter = histToRepresent.Median; int xCoordinateMedianCenter = Convert.ToInt32(serviceSpaceGap + (medianCenter - xSpaceMin) * koeffX); Point ptMedianTop = new Point(xCoordinateMedianCenter, pictureHeight - serviceSpaceGap); Point ptMedianBottom = new Point(xCoordinateMedianCenter, serviceSpaceGap); theImage.Draw(new LineSegment2D(ptMedianTop, ptMedianBottom), colorRed, 2); double perc5Center = histToRepresent.Perc5; int xCoordinateperc5Center = Convert.ToInt32(serviceSpaceGap + (perc5Center - xSpaceMin) * koeffX); Point ptPerc5Top = new Point(xCoordinateperc5Center, pictureHeight - serviceSpaceGap); Point ptPerc5Bottom = new Point(xCoordinateperc5Center, serviceSpaceGap); theImage.Draw(new LineSegment2D(ptPerc5Top, ptPerc5Bottom), colorRed, 2); } #endregion проставляем квантили, если надо if (rbtnShowAsBars.Checked) { double dBarWidth = (double)pictureWidth - 2.0d * (double)serviceSpaceGap; int barsCount = histToRepresent.BinsCount; dBarWidth = dBarWidth / (double)barsCount; dBarWidth = dBarWidth / 3.0d; barWidth = Convert.ToInt32(dBarWidth); barWidth = (barWidth < 1) ? (1) : (barWidth); int barWidthHalfed = Convert.ToInt32(dBarWidth / 2.0d); barWidthHalfed = (barWidthHalfed < 1) ? (1) : (barWidthHalfed); for (int i = 0; i < histToRepresent.BinsCount; i++) { double binCenter = histToRepresent.dvbinsCenters[i]; double probDens = histToRepresent.dvProbDens[i]; int xCoordinateBinCenter = Convert.ToInt32(serviceSpaceGap + (binCenter - xSpaceMin) * koeffX); int yCoordinateTop = Convert.ToInt32(pictureHeight - serviceSpaceGap - probDens * koeffY); yCoordinateTop = (yCoordinateTop == pictureHeight - serviceSpaceGap) ? (pictureHeight - serviceSpaceGap - 2) : (yCoordinateTop); Point ptUperLeft = new Point(xCoordinateBinCenter - barWidthHalfed, yCoordinateTop); Size barSize = new Size(barWidth, pictureHeight - serviceSpaceGap - yCoordinateTop); theImage.Draw(new Rectangle(ptUperLeft, barSize), new Bgr(histToRepresent.color), -1); } } else { for (int i = 0; i < histToRepresent.BinsCount; i++) { double binCenter = histToRepresent.dvbinsCenters[i]; double probDens = histToRepresent.dvProbDens[i]; int xCoordinateBinCenter = Convert.ToInt32(serviceSpaceGap + (binCenter - xSpaceMin) * koeffX); int yCoordinateTop = Convert.ToInt32(pictureHeight - serviceSpaceGap - probDens * koeffY); PointF ptToShow = new PointF((float)xCoordinateBinCenter, (float)yCoordinateTop); theImage.Draw(new CircleF(ptToShow, 4), new Bgr(histToRepresent.color), -1); } } string str2Show = "[" + histToRepresent.description + "]" + Environment.NewLine; //str2Show += "color: " + histToRepresent.color.ToString() + Environment.NewLine; str2Show += "perc5 = " + histToRepresent.Perc5.ToString("e") + Environment.NewLine; str2Show += "median = " + histToRepresent.Median.ToString("e") + Environment.NewLine; str2Show += "mean = " + histToRepresent.stats.Mean.ToString("e") + Environment.NewLine; str2Show += "stdDev = " + histToRepresent.stats.StandardDeviation.ToString("e") + Environment.NewLine; str2Show += "min value = " + histToRepresent.stats.Minimum.ToString("e") + Environment.NewLine; str2Show += "max value = " + histToRepresent.stats.Maximum.ToString("e") + Environment.NewLine; ThreadSafeOperations.SetTextTB(tbStats, str2Show, true); ThreadSafeOperations.UpdatePictureBox(pbHistRepresentation, theImage.Bitmap, false); }
private void HistogramCalcAndShowForm_Load(object sender, EventArgs e) { ThreadSafeOperations.SetText(lblTitle, currentDescription, false); }
public void RPNeval(bool forceUsingDistributedMatrixes = false) { dmRes = null; resValue = 0.0d; String input = exprString; //.Replace(" ", ""); if (!forceUsingDistributedMatrixes) { if (dmR == null) { dmR = ImageProcessing.DenseMatrixFromImage(imgR); } if (dmG == null) { dmG = ImageProcessing.DenseMatrixFromImage(imgG); } if (dmB == null) { dmB = ImageProcessing.DenseMatrixFromImage(imgB); } dmY = sRGBluminanceFrom_sRGB(dmR, dmG, dmB); } PostfixNotation rpn = new PostfixNotation(); string[] converted2RPN = rpn.ConvertToPostfixNotation(input); Stack <ImageOperationalValue> stack = new Stack <ImageOperationalValue>(); Queue <string> queue = new Queue <string>(converted2RPN); string str = queue.Dequeue(); while (queue.Count >= 0) { if (!rpn.operators.Contains(str)) { pushImageToStackByColorChar(stack, str); if (queue.Count > 0) { try { str = queue.Dequeue(); } catch (Exception) { break; } } else { break; } } else { ImageOperationalValue summ = null; try { switch (str) { case "+": { ImageOperationalValue a = stack.Pop(); ImageOperationalValue b = stack.Pop(); summ = ImageOperationalValueAdd(a, b); // b + a ServiceTools.FlushMemory(tbLog, ""); break; } case "-": { ImageOperationalValue a = stack.Pop(); ImageOperationalValue b = stack.Pop(); summ = ImageOperationalValueSubtract(a, b); // b - a ServiceTools.FlushMemory(tbLog, ""); break; } case "*": { ImageOperationalValue a = stack.Pop(); ImageOperationalValue b = stack.Pop(); summ = ImageOperationalValueMult(a, b); // b * a ServiceTools.FlushMemory(tbLog, ""); break; } case "/": { ImageOperationalValue a = stack.Pop(); ImageOperationalValue b = stack.Pop(); summ = ImageOperationalValueDivide(a, b); // b / a ServiceTools.FlushMemory(tbLog, ""); break; } case "^": { double a = stack.Pop().dNumber; ImageOperationalValue b = stack.Pop(); summ = ImageOperationalValuePow(b, a); // b ^ a ServiceTools.FlushMemory(tbLog, ""); break; } case "grad": { ImageOperationalValue a = stack.Pop(); summ = ImageOperationalValueGrad(a); // grad(a) ServiceTools.FlushMemory(tbLog, ""); break; } case "grad5p": { ImageOperationalValue a = stack.Pop(); summ = ImageOperationalValueGrad5p(a); // grad 5-point(a) ServiceTools.FlushMemory(tbLog, ""); break; } case "ddx": { ImageOperationalValue a = stack.Pop(); summ = ImageOperationalValueDDX(a); // d(a)/dx ServiceTools.FlushMemory(tbLog, ""); break; } case "ddy": { ImageOperationalValue a = stack.Pop(); summ = ImageOperationalValueDDY(a); // d(a)/dy ServiceTools.FlushMemory(tbLog, ""); break; } case "sqrt": { ImageOperationalValue a = stack.Pop(); summ = ImageOperationalValueSqrt(a); // grad(a) ServiceTools.FlushMemory(tbLog, ""); break; } case "mean": { ImageOperationalValue a = stack.Pop(); summ = ImageOperationalValueMean(a); // mean(a) ServiceTools.FlushMemory(tbLog, ""); break; } case "stddev": { ImageOperationalValue a = stack.Pop(); summ = ImageOperationalValueSigm(a); // mean(a) ServiceTools.FlushMemory(tbLog, ""); break; } case "abs": { ImageOperationalValue a = stack.Pop(); summ = ImageOperationalValueAbs(a); // abs(a) ServiceTools.FlushMemory(tbLog, ""); break; } case "%": { double a = stack.Pop().dNumber; ImageOperationalValue b = stack.Pop(); summ = ImageOperationalValueCut(b, a); // b cut a - cuts "b" matrix elements using "a"*sigma limit of distribution. remember 3-sigma rule? ServiceTools.FlushMemory(tbLog, ""); break; } case "smoothcos": { double a = stack.Pop().dNumber; ImageOperationalValue b = stack.Pop(); summ = ImageOperationalValueSmoothCos(b, a); // b cut a - cuts "b" matrix elements using "a"-nodes spreading cos-based kernel ServiceTools.FlushMemory(tbLog, ""); break; } default: break; } } catch (Exception ex) { ThreadSafeOperations.SetTextTB(tbLog, ex.Message, true); } stack.Push(summ); if (queue.Count > 0) { str = queue.Dequeue(); } else { break; } } } //return Convert.ToDecimal(stack.Pop()); ImageOperationalValue theResult = stack.Pop(); dmRes = theResult.DmImageComponent; resValue = theResult.dNumber; lDMRes = theResult.lDMOtherComponents; if (dmRes != null) { minValue = dmRes.Values.Min(); maxValue = dmRes.Values.Max(); } else { minValue = resValue; maxValue = resValue; } ThreadSafeOperations.SetTextTB(tbLog, Environment.NewLine + "min value: " + Math.Round(minValue, 2).ToString(), false); ThreadSafeOperations.SetTextTB(tbLog, "max value: " + Math.Round(maxValue, 2).ToString(), true); ServiceTools.FlushMemory(tbLog, ""); }
public void UpdateIndicator(ProgressVisualizationStruct theIndicator, double ratio = 0.0d) { int perc = Convert.ToInt32(ratio * 100.0d); ThreadSafeOperations.UpdateProgressBar(theIndicator.pbHandle, perc); }
public static void AddDataMatrixToFile(DenseMatrix dmData, string fileName, TextBox tbLog, bool absolutePath = false, string varName = "dataMatrix") { string baseDir = "G:\\_gulevlab\\SkyIndexAnalyzerSolo_appData\\_dataDirectory\\"; string connectionString = "msds:nc?file="; if (absolutePath) { if (!ServiceTools.CheckIfDirectoryExists(fileName)) { return; } connectionString += fileName; } else { if (!ServiceTools.CheckIfDirectoryExists(baseDir + fileName)) { return; } connectionString += baseDir + fileName; } NetCDFDataSet ds = null; try { ds = new NetCDFDataSet(connectionString, ResourceOpenMode.OpenOrCreate); } catch (Exception ex) { if (tbLog != null) { ThreadSafeOperations.SetTextTB(tbLog, "Не получилось :( " + Environment.NewLine + ex.Message, true); } else { throw ex; } } Variable <double> thDataVar; if (!ds.Variables.Contains(varName)) { thDataVar = ds.AddVariable <double>(varName, dmData.ToArray(), "y", "x"); } else { thDataVar = (Variable <double>)ds.Variables[varName]; thDataVar.Append(dmData.ToArray()); } try { ds.TryCommit(); } catch (Exception ex) { if (tbLog != null) { ThreadSafeOperations.SetTextTB(tbLog, "Не получилось :( " + Environment.NewLine + ex.Message, true); } else { throw ex; } } ds.Dispose(); }
public Field4Drepresentation( DenseMatrix dmListOfData, Dictionary <string, object> properties, Dictionary <string, int> valuesColumnsIndeces = null, SlicingVariable varSliceBy = SlicingVariable.z, string description = "") { InitializeComponent(); variableSliceBy = varSliceBy; if (valuesColumnsIndeces == null) { valuesColumnsIndeces = new Dictionary <string, int>(); valuesColumnsIndeces.Add("x", 0); valuesColumnsIndeces.Add("y", 1); valuesColumnsIndeces.Add("z", 2); valuesColumnsIndeces.Add("values", 3); } strDataDescription = description; ThreadSafeOperations.SetText(lblDescription, strDataDescription, false); defaultProperties = properties; strOutputDirectory = (string)defaultProperties["DefaultDataFilesLocation"]; if (!ServiceTools.CheckIfDirectoryExists(strOutputDirectory)) { strOutputDirectory = ""; } dmDataList = dmListOfData.Copy(); double dataMaxVal = dmDataList.Column(3).Max(); double dataMinVal = dmDataList.Column(3).Min(); ILScene scene = new ILScene(); currSurfPlotCube = new ILPlotCube(); currSurfPlotCube.TwoDMode = false; List <List <DenseMatrix> > lDataMatricesForSurfices = ReshapeDataToMatrices(dmDataList, variableSliceBy); foreach (List <DenseMatrix> currSurfMatricesList in lDataMatricesForSurfices) { ILInArray <double> ilaXvalues = currSurfMatricesList[0].ToArray(); ILInArray <double> ilaYvalues = currSurfMatricesList[1].ToArray(); ILInArray <double> ilaZvalues = currSurfMatricesList[2].ToArray(); MathNet.Numerics.LinearAlgebra.Single.DenseMatrix floatDMcolors = MathNet.Numerics.LinearAlgebra.Single.DenseMatrix.Create(currSurfMatricesList[0].RowCount, currSurfMatricesList[0].ColumnCount, 0.0f); currSurfMatricesList[3].MapConvert <Single>(dval => Convert.ToSingle(dval), floatDMcolors, MathNet.Numerics.LinearAlgebra.Zeros.Include); ILInArray <float> ilaForColorValues = floatDMcolors.ToArray(); ILSurface currSurf = new ILSurface(ilaZvalues, ilaXvalues, ilaYvalues); currSurf.ColorMode = ILSurface.ColorModes.RBGA; ColorScheme newCS = new ColorScheme(""); //ColorSchemeRuler newCSR = new ColorSchemeRuler(newCS, dataMinVal, dataMaxVal); double[,] dmRvalues = DenseMatrix.Create(floatDMcolors.RowCount, floatDMcolors.ColumnCount, (r, c) => { Bgr currColor = newCS.GetColorByValueAndRange(currSurfMatricesList[3][r, c], dataMinVal, dataMaxVal); return(currColor.Red / 255.0d); }).ToArray(); double[,] dmGvalues = DenseMatrix.Create(floatDMcolors.RowCount, floatDMcolors.ColumnCount, (r, c) => { Bgr currColor = newCS.GetColorByValueAndRange(currSurfMatricesList[3][r, c], dataMinVal, dataMaxVal); return(currColor.Green / 255.0d); }).ToArray(); double[,] dmBvalues = DenseMatrix.Create(floatDMcolors.RowCount, floatDMcolors.ColumnCount, (r, c) => { Bgr currColor = newCS.GetColorByValueAndRange(currSurfMatricesList[3][r, c], dataMinVal, dataMaxVal); return(currColor.Blue / 255.0d); }).ToArray(); float[, ,] rgbaArrData = new float[4, dmRvalues.GetLength(0), dmRvalues.GetLength(1)]; for (int i = 0; i < dmRvalues.GetLength(0); i++) { for (int j = 0; j < dmRvalues.GetLength(1); j++) { rgbaArrData[0, i, j] = Convert.ToSingle(dmRvalues[i, j]); rgbaArrData[1, i, j] = Convert.ToSingle(dmGvalues[i, j]); rgbaArrData[2, i, j] = Convert.ToSingle(dmBvalues[i, j]); rgbaArrData[3, i, j] = 0.3f; } } currSurf.UpdateRGBA(null, rgbaArrData); currSurf.UseLighting = true; currSurfPlotCube.Children.Add(currSurf); //if (currSurfPlotCube.Children.Count() > 4) //{ // currSurfPlotCube.Children.Add(new ILColorbar()); //} //if (currSurfPlotCube.Children.Count() > 4) //{ // break; //} } // surf.Children.Add(new ILColorbar()); //currSurfPlotCube.Children.Add(new ILColorbar()); //currSurfPlotCube.Rotation = Matrix4.Rotation(new Vector3(1, 0, 0), 1.2f) * // Matrix4.Rotation(new Vector3(0, 0, 1), Math.PI); currSurfPlotCube.Projection = Projection.Orthographic; currSurfPlotCube.Plots.Reset(); scene.Add(currSurfPlotCube); ilPanel1.Scene = scene; }
private void PlotByIsolines( DenseMatrix dmListOfData, Dictionary <string, object> properties, string description = "") { strDataDescription = description; ThreadSafeOperations.SetText(lblDescription, strDataDescription, false); defaultProperties = properties; strOutputDirectory = (string)defaultProperties["DefaultDataFilesLocation"]; if (!ServiceTools.CheckIfDirectoryExists(strOutputDirectory)) { strOutputDirectory = ""; } dmDataList = dmListOfData.Copy(); double dataMaxVal = dmDataList.Column(3).Max(); double dataMinVal = dmDataList.Column(3).Min(); ILScene scene = new ILScene(); currSurfPlotCube = new ILPlotCube(); currSurfPlotCube.TwoDMode = false; List <List <DenseMatrix> > llDataMatricesSlicedByZ = ReshapeDataToMatrices(dmDataList, SlicingVariable.z); DenseMatrix dmXvalues = llDataMatricesSlicedByZ[0][0].Copy(); DenseMatrix dmYvalues = llDataMatricesSlicedByZ[0][1].Copy(); List <List <DataValuesOver3DGrid> > lDataVectorsForSurfices = Group_DVOG_DataByValues(dmDataList); foreach (List <DataValuesOver3DGrid> currSurfVectorsList in lDataVectorsForSurfices) { //ILInArray<float> ilaXvalues = // currSurfVectorsList.ConvertAll<float>(dvog => Convert.ToSingle(dvog.x)).ToArray(); //ILInArray<float> ilaYvalues = // currSurfVectorsList.ConvertAll<float>(dvog => Convert.ToSingle(dvog.y)).ToArray(); //ILInArray<float> ilaZvalues = // currSurfVectorsList.ConvertAll<float>(dvog => Convert.ToSingle(dvog.z)).ToArray(); //ILSurface currSurf = new ILSurface(ilaZvalues, ilaXvalues, ilaYvalues); // не катит - надо, чтобы сетка z была m*n, сетка x = m*[1|n], сетка y - [1|m]*n // поэтому просто список точек, которые должны составить поверхность, - не катят // => или отрисовывать множества точек, без привязки именно к понятию поверхности. Это пока не получилось // => или переформировать список точек так, чтобы они составили m*n поверхность // скомпоновать матрицу значений Z, соответствующих значениям x и y DenseMatrix dmZvalues = DenseMatrix.Create(dmXvalues.RowCount, dmXvalues.ColumnCount, (r, c) => { double x = dmXvalues[r, c]; double y = dmYvalues[r, c]; int idx = currSurfVectorsList.FindIndex(dvog => ((dvog.x == x) && (dvog.y == y))); if (idx == -1) // ничего нужного нет { return(double.NaN); } else { return(currSurfVectorsList[idx].z); } }); ILArray <double> arrXvalues = (ILArray <double>)(dmXvalues.ToArray()); ILArray <double> arrYvalues = (ILArray <double>)(dmYvalues.ToArray()); ILArray <double> arrZvalues = (ILArray <double>)(dmZvalues.ToArray()); // сформируем colors array ColorScheme newCS = new ColorScheme(""); DenseMatrix dmValues = DenseMatrix.Create(dmXvalues.RowCount, dmXvalues.ColumnCount, (r, c) => { double x = dmXvalues[r, c]; double y = dmYvalues[r, c]; int idx = currSurfVectorsList.FindIndex(dvog => ((dvog.x == x) && (dvog.y == y))); if (idx == -1) // ничего нужного нет { return(double.NaN); } else { return(currSurfVectorsList[idx].values[0]); } }); double[,] dmRvalues = DenseMatrix.Create(dmValues.RowCount, dmValues.ColumnCount, (r, c) => { Bgr currColor = newCS.GetColorByValueAndRange(dmValues[r, c], dataMinVal, dataMaxVal); return(currColor.Red / 255.0d); }).ToArray(); double[,] dmGvalues = DenseMatrix.Create(dmValues.RowCount, dmValues.ColumnCount, (r, c) => { Bgr currColor = newCS.GetColorByValueAndRange(dmValues[r, c], dataMinVal, dataMaxVal); return(currColor.Green / 255.0d); }).ToArray(); double[,] dmBvalues = DenseMatrix.Create(dmValues.RowCount, dmValues.ColumnCount, (r, c) => { Bgr currColor = newCS.GetColorByValueAndRange(dmValues[r, c], dataMinVal, dataMaxVal); return(currColor.Blue / 255.0d); }).ToArray(); float[, ,] rgbaArrData = new float[4, dmRvalues.GetLength(0), dmRvalues.GetLength(1)]; for (int i = 0; i < dmRvalues.GetLength(0); i++) { for (int j = 0; j < dmRvalues.GetLength(1); j++) { rgbaArrData[0, i, j] = Convert.ToSingle(dmRvalues[i, j]); rgbaArrData[1, i, j] = Convert.ToSingle(dmGvalues[i, j]); rgbaArrData[2, i, j] = Convert.ToSingle(dmBvalues[i, j]); rgbaArrData[3, i, j] = 0.3f; } } ILSurface currSurf = new ILSurface(ILMath.convert <double, float>(arrZvalues), ILMath.convert <double, float>(arrXvalues), ILMath.convert <double, float>(arrYvalues), rgbaArrData); currSurf.UseLighting = true; currSurfPlotCube.Children.Add(currSurf); } currSurfPlotCube.Projection = Projection.Orthographic; currSurfPlotCube.Plots.Reset(); scene.Add(currSurfPlotCube); ilPanel1.Scene = scene; }
public void ImageConditionAndDataRepresentingForm_Paint(object sender, PaintEventArgs e) { ThreadSafeOperations.UpdatePictureBox(pbRes, imgData.dataRepresentingImageColored(), true); ThreadSafeOperations.UpdatePictureBox(pbScale, imgData.currentColorSchemeRuler.RulerBitmap(pbScale.Width, pbScale.Height), false); }