using System; using System.IO; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.ComponentModel; using System.Linq; using System.Windows.Forms; using System.Threading; using Treko3D; using Projects; using Data.BusinessService; using Data.DataModel; using Frames; using ClassLibrary; namespace ControlLibrary { public partial class Treko3DControl : UserControl { #region Local Variables Project _projectObj; Layer _layerObj; ColorProfileControl _colorProfileControl; ColorProfile _colorProfileObj; private ILayerService layerService; private LayerModel layerModel; private ColorProfileModel _colorProfileModel; private ColorProfileService colorProfileService; private ProgressModel progressModel1; private ProgressModel progressModel2; private Treko3D.Treko3D _treko3D; Frames.FrameGroup[,] _frameGroups; private string[] _rakurseFiles; private bool _editMode; private int _arcWidth; private Bitmap _thumbnail; #endregion /// /// Variable to store error message /// private string _errorMessage; // Delegate declaration public delegate void OkClicked(Treko3DControl sender, EventArgs e); public event OkClicked OnOkClicked; public delegate void PreviewClicked(Treko3DControl sender, EventArgs e); public event PreviewClicked OnPreviewClicked; public delegate void ColorProfileClicked(Treko3DControl sender, EventArgs e); public event ColorProfileClicked OnColorProfileClicked; #region Get/Set // Control opened for Edit Treko or Create Treko public bool EditMode { get { return _editMode; } set { _editMode = value; } } public string LayerName { get { return txtLayerName.Text; } set { txtLayerName.Text = value; } } public string OpticalSchema { get { return "Sp0"; } } public int ProjectId { get; set; } public string TechnologyName { get; set; } public string SourceFilePath { get { return txtSourceFilePath.Text; } set { txtSourceFilePath.Text = value; } } public string SourceFileSelected { get { return txtNFilesSelected.Text; } set { txtNFilesSelected.Text = value; } } public double LayerLeft { get { return (double)numUpDownLayerLeft.Value; } set { numUpDownLayerLeft.Value = (decimal)value; } } public double LayerTop { get { return (double)numUpDownLayerTop.Value; } set { numUpDownLayerTop.Value = (decimal)value; } } public double LayerWidth { get { return (double)numUpDownLayerW.Value; } set { numUpDownLayerW.Value = (decimal)value; } } public double LayerHeight { get { return (double)numUpDownLayerH.Value; } set { numUpDownLayerH.Value = (decimal)value; } } public double Step { get { return (double)numUpDownStep.Value; } set { numUpDownStep.Value = (decimal)value; } } public double RadiusMax { get { return (double)numUpDownRadius.Value; } set { numUpDownRadius.Value = (decimal)value; } } public int ArcWidth { get { return _arcWidth; } set { _arcWidth = value; } } public Project ProjectObj { get { return _projectObj; } set { _projectObj = value; } } public Layer LayerObj { get { return _layerObj; } set { _layerObj = value; } } public ColorProfile ColorProfileObj { get { return _colorProfileObj; } set { _colorProfileObj = value; } } public ColorProfileModel ColorProfileModel { get { return _colorProfileModel; } set { _colorProfileModel = value; } } public ColorProfileControl ColorProfileControl { get { return _colorProfileControl; } set { _colorProfileControl = value; } } public string Resolution { set { this.lblResolution.Text = value; } } public Treko3D.Treko3D Treko3D { get { return _treko3D; } set { _treko3D = value; } } public PictureBox pbxSourceImage { get { Control[] cnt = this.ParentForm.Controls.Find("picBoxSourceImage", true); return (PictureBox)cnt[0]; } } public Treko3D.Treko3D treko3DObj { get { return _treko3D; } } public ProjectControl newProjectControl { get { Control[] cnt = this.ParentForm.Controls.Find("newProjectControl1", true); return (ProjectControl)cnt[0]; } } //public ColorProfileControl newColorProfileControl //{ // get // { // return ((frmChildColorProfile)this.ParentForm).colorProfileControl; // //return (ColorProfileControl)cnt[0]; // } //} public string[] RakurseFiles { get { return _rakurseFiles; } } public int FrameGroupWidth { get { return (int)numFrameGroupWidth.Value; } set { numFrameGroupWidth.Value = value; } } public int FrameGroupHeight { get { return (int)numFrameGroupHeight.Value; } set { numFrameGroupHeight.Value = value; } } public int RowStart { get { return (int)numRowStart.Value; } set { numRowStart.Value = value; } } public int RowEnd { get { return (int)numRowEnd.Value; } set { numRowEnd.Value = value; } } public Bitmap Thumbnail { get { return _thumbnail; } set { _thumbnail = value; } } #endregion public Treko3DControl() { InitializeComponent(); UpdateBtnOk(); UpdateBtnCancel(); UpdateBtnReset(); UpdateBtnSaveAsDefault(); _treko3D = new Treko3D.Treko3D(); this.layerService = new LayerService(); this.colorProfileService = new ColorProfileService(); this.progressModel1 = new ProgressModel(); this.progressModel2 = new ProgressModel(); numUpDownRadius.Value = (decimal)_treko3D.RadiusMax; //numUpDownTrekWidth.Value = (decimal)_treko3D.ArcWidth; numUpDownStep.Value = (decimal)_treko3D.Step; this.LoadTreko3DByNameDefault(); this._layerObj = new Layer(layerModel); this.LoadColorProfile(_layerObj.Id); string path = txtSourceFilePath.Text; _rakurseFiles = Helper.LoadRakurseFiles(path); if (_rakurseFiles != null) txtNFilesSelected.Text = _rakurseFiles.Length.ToString(); } public void RefreshControl(Layer layerObj) { clearProgressInfo(); _layerObj = layerObj; LayerName = _layerObj.LayerName = layerObj.LayerName; //OpticalSchema = layerObj.OpticalSchema; ProjectId = layerObj.ProjectId; TechnologyName = layerObj.TechnologyName; LayerLeft = layerObj.LayerLeft; LayerTop = layerObj.LayerTop; LayerWidth = layerObj.LayerWidth; LayerHeight = layerObj.LayerHeight; ArcWidth = layerObj.ArcWidth; RadiusMax = layerObj.RadiusMax; Step = layerObj.Step; SourceFilePath = layerObj.SourceFilePath; //LoadRakurseFiles(); string path = txtSourceFilePath.Text; _rakurseFiles = Helper.LoadRakurseFiles(path); if (_rakurseFiles != null) txtNFilesSelected.Text = _rakurseFiles.Length.ToString(); FrameGroupHeight = 1; FrameGroupWidth = 1; RowStart = 0; RowEnd = Convert.ToInt16(ProjectObj.HologramHeight / ProjectObj.FrameHeight); int imgWidth = 50; int imgHeight = 50; if (_rakurseFiles != null) { _thumbnail = ImageProcessing.CreateThumbnail(_rakurseFiles[0], imgWidth, imgHeight); } else { _thumbnail = null; } picBoxThumbnail.BackgroundImage = _thumbnail; picBoxThumbnail.Invalidate(); Visible = true; } private void UpdateBtnOk() { Point[] pts = { new Point(-1, -1), new Point(88, -1), new Point(59, 40), new Point(-1, 40), new Point(-1, -1) }; // Make the GraphicsPath. GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding); polygon_path.AddPolygon(pts); // Convert the GraphicsPath into a Region. Region polygon_region = new Region(polygon_path); btnOk.Region = polygon_region; // Make the button big enough to hold the whole region. btnOk.SetBounds( btnOk.Location.X, btnOk.Location.Y, 89, 41); } private void UpdateBtnCancel() { Point[] pts = { new Point(0, -1), new Point(89, -1), new Point(89, 41), new Point(29, 41), new Point(0, -1) }; // Make the GraphicsPath. GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding); polygon_path.AddPolygon(pts); // Convert the GraphicsPath into a Region. Region polygon_region = new Region(polygon_path); //fineprint //stereograd btnCancel.Region = polygon_region; // Make the button big enough to hold the whole region. btnCancel.SetBounds( btnCancel.Location.X, btnCancel.Location.Y, 89, 41); } private void UpdateBtnReset() { Point[] pts = { new Point(29, -1), new Point(79, -1), new Point(79, 41), new Point(0, 41), new Point(29, -1) }; // Make the GraphicsPath. GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding); polygon_path.AddPolygon(pts); // Convert the GraphicsPath into a Region. Region polygon_region = new Region(polygon_path); //fineprint //stereograd btnRun.Region = polygon_region; // Make the button big enough to hold the whole region. btnRun.SetBounds( btnRun.Location.X, btnRun.Location.Y, 89, 41); } private void UpdateBtnSaveAsDefault() { Point[] pts = { new Point(0, -1), new Point(49, -1), new Point(79, 41), new Point(0, 41), new Point(0, -1) }; // Make the GraphicsPath. GraphicsPath polygon_path = new GraphicsPath(FillMode.Winding); polygon_path.AddPolygon(pts); // Convert the GraphicsPath into a Region. Region polygon_region = new Region(polygon_path); //fineprint //stereograd btnSaveAsDefault.Region = polygon_region; // Make the button big enough to hold the whole region. btnSaveAsDefault.SetBounds( btnSaveAsDefault.Location.X, btnSaveAsDefault.Location.Y, 79, 41); } /// /// Method to show general error message on any system level exception /// private void ShowErrorMessage(Exception ex) { MessageBox.Show( ex.Message, //Resources.System_Error_Message, Resources.System_Error_Message_Title, MessageBoxButtons.OK, MessageBoxIcon.Error); } /// /// Validates registration input /// /// true or false private bool ValidateRegistration() { if (_projectObj == null) { MessageBox.Show( Resources.Registration_Missing_Project_Error_Message, Resources.Registration_Error_Message_Title, MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } return true; // this.errorMessage != string.Empty ? false : true; } public bool RegisterNewTreko3DLayer() { var success = false; try { // Check if the validation passes if (this.ValidateRegistration()) { //Treko.Treko trekoObj = trekoControl1.trekoObj; //Project projectObj = projectControl.Project; // Create Layer and add to Project layerModel.LayerName = LayerName; layerModel.OpticalSchema = OpticalSchema; layerModel.TechnologyName = "Treko3D"; layerModel.ProjectId = _projectObj.ProjectId; layerModel.Order = layerService.GetCountOfLayers(_projectObj.ProjectId); // Set as last layer layerModel.LayerLeft = LayerLeft; layerModel.LayerTop = LayerTop; layerModel.LayerWidth = LayerWidth; layerModel.LayerHeight = LayerHeight; layerModel.ArcWidth = ArcWidth; layerModel.RadiusMax = RadiusMax; layerModel.Step = Step; layerModel.SourceFilePath = SourceFilePath; layerModel.AnglesFilePath = ""; success = layerService.RegisterLayer(layerModel); //projectControl.LoadProject(projectObj.ProjectId); //_projectObj = projectControl.Project; // if status of success variable is true then display a information else display the error message if (success) { _layerObj = new Layer(layerModel); //this.ProjectId = projectModel.Id; // display the message box //MessageBox.Show( // Resources.Registration_Layer_Successful_Message, // Resources.Registration_Successful_Message_Title, // MessageBoxButtons.OK, // MessageBoxIcon.Information); // Reset the screen //this.ResetRegistration(); } else { // display the error messge MessageBox.Show( Resources.Registration_Error_Message, Resources.Registration_Error_Message_Title, MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { // Display the validation failed message // MessageBox.Show( // this.errorMessage, // Resources.Registration_Error_Message_Title, // MessageBoxButtons.OK, // MessageBoxIcon.Error); } } catch (Exception ex) { this.ShowErrorMessage(ex); } return success; } /// /// Validates update data /// /// true or false private bool ValidateUpdate() { //this._errorMessage = string.Empty; //if (txt2Name.Text.Trim() == string.Empty) //{ // this.AddErrorMessage(Resources.Registration_Name_Required_Text); //} //if (cmb2Occupation.SelectedIndex == -1) //{ // this.AddErrorMessage(Resources.Registration_Occupation_Select_Text); //} //if (cmb2MaritalStatus.SelectedIndex == -1) //{ // this.AddErrorMessage(Resources.Registration_MaritalStatus_Select_Text); //} //if (cmb2HealthStatus.SelectedIndex == -1) //{ // this.AddErrorMessage(Resources.Registration_HealthStatus_Select_Text); //} //return this._errorMessage != string.Empty ? false : true; return true; } public bool UpdateTreko3DLayer() { var success = false; try { if (this.ValidateUpdate()) { LayerModel layerModel = new LayerModel() { Id = _layerObj.Id, LayerName = this.LayerName, OpticalSchema = this.OpticalSchema, TechnologyName = "Treko3D", ProjectId = this.ProjectId, TraceProfile = _layerObj.TraceProfile, Order = _layerObj.Order, // layerService.GetCountOfLayers(ProjectId), // Set as last layer LayerLeft = this.LayerLeft, LayerTop = this.LayerTop, LayerWidth = this.LayerWidth, LayerHeight = this.LayerHeight, ArcWidth = this.ArcWidth, RadiusMax = this.RadiusMax, Step = this.Step, SourceFilePath = this.SourceFilePath, AnglesFilePath = "", }; success = this.layerService.UpdateLayer(layerModel); } else { MessageBox.Show( this._errorMessage, Resources.Registration_Error_Message_Title, MessageBoxButtons.OK, MessageBoxIcon.Error); } } catch (Exception ex) { this.ShowErrorMessage(ex); } return success; } public bool RegisterNewColorProfileDefault() { var success = false; try { // Check if the validation passes if (this.ValidateRegistration()) { // Assign the values to the model //this._colorProfileModel = new ColorProfileModel() //{ // Id = 0, // ProfileName = "Gauss", // KeyPointsString = @"{X=0, Y=27},{X=32, Y=36},{X=64, Y=45},{X=96, Y=128},{X=128, Y=182},{X=160, Y=128},{X=192, Y=45},{X=224, Y=36},{X=255, Y=27}", // TraceProfileString = @"58,59,60,60,61,61,62,63,63,64,65,66,66,67,68,69,70,71,72,73,74,75,76,77,78,80,81,82,84,85,86,88,89,91,93,94,96,98,99,101,103,105,107,109,111,113,115,117,119,121,123,125,127,130,132,134,136,139,141,143,146,148,150,153,155,157,160,162,165,167,169,172,174,176,179,181,183,186,188,190,193,195,197,199,201,204,206,208,210,212,214,216,218,220,222,223,225,227,229,230,232,233,235,236,238,239,240,242,243,244,245,246,247,248,249,250,251,251,252,253,253,253,254,254,255,255,255,255,255,255,255,255,255,254,254,253,253,253,252,251,251,250,249,248,247,246,245,244,243,242,240,239,238,236,235,233,232,230,229,227,225,223,222,220,218,216,214,212,210,208,206,204,201,199,197,195,193,190,188,186,183,181,179,176,174,172,169,167,165,162,160,157,155,153,150,148,146,143,141,139,136,134,132,130,127,125,123,121,119,117,115,113,111,109,107,105,103,101,99,98,96,94,93,91,89,88,86,85,84,82,81,80,78,77,76,75,74,73,72,71,70,69,68,67,66,66,65,64,63,63,62,61,61,60,60,0", // ArcWidth = layerModel.ArcWidth, // LayerId = layerModel.Id, //}; this._colorProfileModel.Id = 0; this._colorProfileModel.LayerId = LayerObj.Id; // Call the service method and assign the return status to variable success = this.colorProfileService.RegisterColorProfile(_colorProfileModel); // if status of success variable is true then display a information else display the error message if (success) { // display the message box //MessageBox.Show( // Resources.Registration_Color_Profile_Successful_Message, // Resources.Registration_Successful_Message_Title, // MessageBoxButtons.OK, // MessageBoxIcon.Information); // Reset the screen //this.ResetRegistration(); } else { // display the error messge MessageBox.Show( Resources.Registration_Error_Message, Resources.Registration_Error_Message_Title, MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { // Display the validation failed message // MessageBox.Show( // this.errorMessage, // Resources.Registration_Error_Message_Title, // MessageBoxButtons.OK, // MessageBoxIcon.Error); } } catch (Exception ex) { this.ShowErrorMessage(ex); } return success; } private void BtnOk_Click(object sender, EventArgs e) { clearProgressInfo(); System.ComponentModel.CancelEventArgs ee = null; clearErrors(); txtLayerName_Validating(this, ee); if (errorProvider1.GetError(txtLayerName) != "") return; txtSourceFilePath_Validating(this, ee); if (errorProvider1.GetError(txtSourceFilePath) != "") return; numUpDownStep_Validating(this, ee); if (errorProvider1.GetError(numUpDownStep) != "") return; numUpDownRadius_Validating(this, ee); if (errorProvider1.GetError(numUpDownRadius) != "") return; txtFullMask_Validating(this, ee); if (errorProvider1.GetError(txtFullMask) != "") return; //txtTileMask_Validating(this, ee); //if (errorProvider1.GetError(txtTileMask) != "") // return; _treko3D.VoxelWidthPix = 32; // Voxel size is variable. Depends on size of arcs. _treko3D.VoxelHeightPix = 32; _treko3D.RakurseFiles = RakurseFiles; // Array of names of rakurse files if (RakurseFiles == null) _treko3D.NRakurses = 0; else _treko3D.NRakurses = RakurseFiles.Length; this.Visible = false; OnOkClicked?.Invoke(this, EventArgs.Empty); } private void BtnCancel_Click(object sender, EventArgs e) { Control[] cnt = this.ParentForm.Controls.Find("splitContainer1", true); SplitContainer splitContainer = (SplitContainer)cnt[0]; if (splitContainer.Panel1Collapsed == true) splitContainer.Panel1Collapsed = false; else splitContainer.Panel1Collapsed = true; backgroundWorker1.CancelAsync(); //backgroundWorker2.CancelAsync(); this.Visible = false; } public void WriteIniFile(StreamWriter sw, string sLine) { try { sw.WriteLine(sLine); } catch (Exception e) { } finally { } } //public void generateFrameGroups() //{ // int nFramesHor = Convert.ToInt32(_projectObj.HologramWidth / _projectObj.FrameWidth); // int nFramesVert = Convert.ToInt32(_projectObj.HologramHeight / _projectObj.FrameHeight); // _frameGroups = new FrameGroup[nFramesHor, nFramesVert]; // //this.progressModel1.MaxValue = _frameGroups.GetLength(0); // //this.progressModel1.MinValue = 0; // //this.progressModel2.MaxValue = _frameGroups.GetLength(1); // //this.progressModel2.MinValue = 0; // for (int j = 0; j < _frameGroups.GetLength(1); j++) // { // for (int i = 0; i < _frameGroups.GetLength(0); i++) // { // // in group only one frame for now // _frameGroups[i, j] = new FrameGroup(_projectObj.ResolutionX, _projectObj.ResolutionY, _projectObj.FrameWidth, _projectObj.FrameHeight, 1, 1, i, j); // _frameGroups[i, j].FillByIntersectVoxelArcs(_treko3D.Strips); // this.progressModel1.CurValue = i; // } // this.progressModel2.CurValue = j; // } //} //public void SaveFramesToFiles() //{ // string outDirName = _projectObj.OutPath; // dirName + "\\TEST\\"; // int n = 1; // string labelInd = "Save Frames " + Convert.ToString(_frameGroups.GetLength(0)) + "x" + Convert.ToString(_frameGroups.GetLength(1)); // progressBar3.Maximum = _frameGroups.GetLength(0); // progressBar4.Maximum = _frameGroups.GetLength(1); // for (int j = 0; j < _frameGroups.GetLength(1); j++) // { // for (int i = 0; i < _frameGroups.GetLength(0); i++) // { // FrameGroup fg = _frameGroups[i, j]; // // in group only one frame for now // if (fg.IntersectRakurseArcs != null && fg.IntersectRakurseArcs.Count > 0) // { // fg.DrawBitmapByRakurseArcs(_layerObj.TraceProfile); // //fg.SaveGroupToFiles(_outDirName, n, i, j); // fg.SaveGroupToFiles(outDirName, n); // fg.FrameGroupBmp.Dispose(); // } // n++; // progressBar3.Value = i; // lblSaveFrames.Text = labelInd + " - " + Convert.ToString(i) + "x" + Convert.ToString(j); // lblSaveFrames.Refresh(); // } // progressBar4.Value = j; // } //} private Frame GetFrame(int nCol, int nRow, int nFramesHor, int nFramesVert) { //int nFramesHor = _frameGroups[0, 0].NFramesHor; //int nFramesVert = _frameGroups[0, 0].NFramesVert; int iGroup = nCol / nFramesHor; int jGroup = nRow / nFramesVert; int i = nCol % nFramesHor; int j = nRow % nFramesVert; FrameGroup fg = _frameGroups[iGroup, jGroup]; if (fg == null) // is case when we generate frame groups in limited lines (for ex from 0 to 1) { Frame fr1 = new Frame(0, 0, 0, 0); fr1.IsBlack = true; return fr1; } Frame fr = fg.FrameMap[i, j]; if (fg.IsBlack) fr.IsBlack = true; return fr; } public void GenerateIniFile() { string outDirName = _projectObj.OutPath; // dirName + "\\TEST\\"; string sLine = ""; int eCount = 0; int zCount = 0; StreamWriter sw = new StreamWriter(outDirName + "\\exp.ini"); int nGroupCols = _frameGroups.GetLength(0); int nGroupRows = _frameGroups.GetLength(1); FrameGroup notNullFg = null; foreach (FrameGroup fg in _frameGroups) { if (fg != null) { notNullFg = fg; break; } } int nCols = nGroupCols * notNullFg.NFramesHor; int nRows = nGroupRows * notNullFg.NFramesVert; sLine = nCols.ToString(); WriteIniFile(sw, sLine); sLine = nCols.ToString(); WriteIniFile(sw, sLine); sLine = nRows.ToString(); WriteIniFile(sw, sLine); sLine = ""; int n = 0; // for debug number of frame files for (int j = 0; j < nRows; j++) { for (int i = 0; i < nCols; i++) { Frame fr = GetFrame(i, j, notNullFg.NFramesHor, notNullFg.NFramesVert); //FrameGroup fg = _frameGroups[i, j]; if (fr.IsBlack == false) { checkZcount(ref zCount, ref sLine); eCount++; } else { checkEcount(ref eCount, ref n, ref sLine); zCount++; } //// in group only one frame for now //if (fg.IntersectRakurseArcs != null && fg.IntersectRakurseArcs.Count > 0) //{ // checkZcount(ref zCount, ref sLine); // eCount++; //} //else //{ // checkEcount(ref eCount, ref n, ref sLine); // zCount++; //} } checkEcount(ref eCount, ref n, ref sLine); checkZcount(ref zCount, ref sLine); WriteIniFile(sw, sLine); sLine = ""; } WriteIniFile(sw, "Number of files:" + n); sw.Close(); } void checkEcount(ref int eCount, ref int n, ref string sLine) { if (eCount > 0) { n += eCount; sLine = sLine + eCount + "e"; eCount = 0; } } void checkZcount(ref int zCount, ref string sLine) { if (zCount > 0) { sLine = sLine + zCount + "z"; zCount = 0; } } public void LoadColorProfile(int layerId) { DataRow dataRow = this.colorProfileService.GetLayerColorProfile(layerId); if (dataRow != null) { // Assign the values to the model this._colorProfileModel = new ColorProfileModel() { Id = Convert.ToInt16(dataRow["Id"]), ProfileName = dataRow["ProfileName"].ToString(), //Author = this.textBoxAuthor.Text.Trim(), ArcWidth = Convert.ToInt16(dataRow["ArcWidth"]), TraceProfileString = dataRow["TraceProfile"].ToString(), KeyPointsString = dataRow["KeyPoints"].ToString(), LayerId = Convert.ToInt16(dataRow["LayerId"]), }; _colorProfileModel.KeyPoints = _colorProfileModel.KeyPointsString.Replace("},{X=", ";").Replace("{X=", string.Empty).Replace("}", string.Empty).Replace(" Y=", string.Empty).Split(';').Select(x => x.Split(',')).Select(y => new PointF(int.Parse(y[0]), int.Parse(y[1]))).ToArray(); _colorProfileModel.TraceProfile = _colorProfileModel.TraceProfileString.Split(',').Select(int.Parse).ToArray(); this._colorProfileObj = new ColorProfile(_colorProfileModel); } } public void LoadColorProfileDefault() { string default_layer_name = Resources.Default_Layer_Name; string technologyName = "Treko3D"; DataRow dataRow = this.colorProfileService.GetColorProfileByLayerNameTechnology(default_layer_name, technologyName); if (dataRow != null) { // Assign the values to the model this._colorProfileModel = new ColorProfileModel() { Id = Convert.ToInt16(dataRow["Id"]), ProfileName = dataRow["ProfileName"].ToString(), //Author = this.textBoxAuthor.Text.Trim(), ArcWidth = Convert.ToInt16(dataRow["ArcWidth"]), TraceProfileString = dataRow["TraceProfile"].ToString(), KeyPointsString = dataRow["KeyPoints"].ToString(), LayerId = Convert.ToInt16(dataRow["LayerId"]), }; _colorProfileModel.KeyPoints = _colorProfileModel.KeyPointsString.Replace("},{X=", ";").Replace("{X=", string.Empty).Replace("}", string.Empty).Replace(" Y=", string.Empty).Split(';').Select(x => x.Split(',')).Select(y => new PointF(int.Parse(y[0]), int.Parse(y[1]))).ToArray(); _colorProfileModel.TraceProfile = _colorProfileModel.TraceProfileString.Split(',').Select(int.Parse).ToArray(); this._colorProfileObj = new ColorProfile(_colorProfileModel); } } public void LoadTreko3DByNameDefault() { string layerName = Resources.Default_Layer_Name; string technologyName = "Treko3D"; DataRow dataRow = this.layerService.GetLayerByNameTechnology(layerName, technologyName); // Assign the values to the model this.layerModel = new LayerModel() { Id = Convert.ToInt16(dataRow["Id"]), Order = Convert.ToInt16(dataRow["Order"]), LayerName = dataRow["LayerName"].ToString(), OpticalSchema = dataRow["OpticalSchema"].ToString(), ProjectId = Convert.ToInt16(dataRow["ProjectId"]), TechnologyName = dataRow["TechnologyName"].ToString(), SourceFilePath = dataRow["SourceFilePath"].ToString(), AnglesFilePath = dataRow["AnglesFilePath"].ToString(), LayerLeft = Convert.ToSingle(dataRow["LayerLeft"]), LayerTop = Convert.ToSingle(dataRow["LayerTop"]), LayerWidth = Convert.ToSingle(dataRow["LayerWidth"]), LayerHeight = Convert.ToSingle(dataRow["LayerHeight"]), RadiusMax = Convert.ToSingle(dataRow["RadiusMax"]), ArcWidth = Convert.ToInt16(dataRow["ArcWidth"]), Step = Convert.ToSingle(dataRow["Step"]), }; txtLayerName.Text = ""; numUpDownStep.Value = Convert.ToDecimal(layerModel.Step); numUpDownRadius.Value = Convert.ToDecimal(layerModel.RadiusMax); //numUpDownTrekWidth.Value = Convert.ToDecimal(layerModel.ArcWidth); txtSourceFilePath.Text = layerModel.SourceFilePath.ToString(); string path = txtSourceFilePath.Text; _rakurseFiles = Helper.LoadRakurseFiles(path); if (_rakurseFiles != null) txtNFilesSelected.Text = _rakurseFiles.Length.ToString(); //LoadRakurseFiles(); } private bool UpdateTreko3DDefault(LayerModel layerModel) { var success = false; //string layerName = "dddeeefffaaauuulllttt"; try { if (this.ValidateUpdate()) { //cmbResolution_SelectedIndexChanged(this, EventArgs.Empty); //DataRow dataRow = this.layerService.GetLayerByNameTechnology(layerName, "Treko3D"); //LayerModel layerModel = new LayerModel() //{ // Id = Convert.ToInt16(dataRow["Id"]), // Order = Convert.ToInt16(dataRow["Order"]), // LayerName = dataRow["LayerName"].ToString(), // OpticalSchema = dataRow["OpticalSchema"].ToString(), // ProjectId = Convert.ToInt16(dataRow["ProjectId"]), // TechnologyName = dataRow["TechnologyName"].ToString(), // RadiusMax = Convert.ToSingle(dataRow["RadiusMax"]), // ArcWidth = Convert.ToInt16(dataRow["ArcWidth"]), // Step = Convert.ToSingle(dataRow["Step"]), //}; var flag = this.layerService.UpdateLayer(layerModel); //if (flag) //{ // DataTable data = this.layerService..GetAllLayers(); // //this.LoadDataGridView(data); // //MessageBox.Show( // // Resources.Update_Successful_Message, // // Resources.Update_Successful_Message_Title, // // MessageBoxButtons.OK, // // MessageBoxIcon.Information); // success = true; //} } else { MessageBox.Show( this._errorMessage, Resources.Registration_Error_Message_Title, MessageBoxButtons.OK, MessageBoxIcon.Error); } } catch (Exception ex) { this.ShowErrorMessage(ex); } return success; } private void clearErrors() { errorProvider1.SetError(txtLayerName, ""); errorProvider1.SetError(txtSourceFilePath, ""); errorProvider1.SetError(numUpDownStep, ""); errorProvider1.SetError(numUpDownRadius, ""); errorProvider1.SetError(txtFullMask, ""); //errorProvider1.SetError(txtTileMask, ""); } private void btnSaveAsDefault_Click(object sender, EventArgs e) { clearProgressInfo(); System.ComponentModel.CancelEventArgs ee = null; clearErrors(); //txtLayerName_Validating(this, ee); //if (errorProvider1.GetError(txtLayerName) != "") // return; //txtSourceFilePath_Validating(this, ee); //if (errorProvider1.GetError(txtSourceFilePath) != "") // return; numUpDownStep_Validating(this, ee); if (errorProvider1.GetError(numUpDownStep) != "") return; numUpDownRadius_Validating(this, ee); if (errorProvider1.GetError(numUpDownRadius) != "") return; //txtFullMask_Validating(this, ee); //if (errorProvider1.GetError(txtFullMask) != "") // return; //txtTileMask_Validating(this, ee); //if (errorProvider1.GetError(txtTileMask) != "") // return; string layerName = Resources.Default_Layer_Name; try { DataRow dataRow = this.layerService.GetLayerByNameTechnology(layerName, "Treko3D"); LayerModel layerModel = new LayerModel() { Id = Convert.ToInt16(dataRow["Id"]), Order = 0, LayerName = layerName, OpticalSchema = this.OpticalSchema, ProjectId = Convert.ToInt16(dataRow["ProjectId"]), TechnologyName = "Treko3D", LayerLeft = this.LayerLeft, LayerTop = this.LayerTop, LayerWidth = this.LayerWidth, LayerHeight = this.LayerHeight, RadiusMax = this.RadiusMax, ArcWidth = this.ArcWidth, Step = this.Step, SourceFilePath = this.SourceFilePath, AnglesFilePath = "", }; UpdateTreko3DDefault(layerModel); } catch (Exception ex) { this.ShowErrorMessage(ex); } //this.Visible = false; //OnOkClicked?.Invoke(this, EventArgs.Empty); } //private string FoundPicExt(string[] filesname) //{ // string ext = ""; // for (int i = 0; i < filesname.Length; i++) // { // if (Path.GetExtension(filesname[i]) == ".bmp" || Path.GetExtension(filesname[i]) == ".png" || Path.GetExtension(filesname[i]) == ".jpg" || Path.GetExtension(filesname[i]) == ".tif") // { // ext = Path.GetExtension(filesname[i]); // return ext; // } // } // return ext; //} //private void LoadRakurseFiles() //{ // string path = txtSourceFilePath.Text; // _rakurseFiles = null; // try // { // // get the file attributes for file or directory // FileAttributes attr = File.GetAttributes(path); // if (attr.HasFlag(FileAttributes.Directory)) // { // string[] filesname = Directory.GetFiles(path); //!!!!Nick // string ext = FoundPicExt(filesname); //!!!!Nick // ext = "*" + ext; //Path.GetExtension(filesname[2]); //!!!!Nick // var files = Directory.GetFiles(path, ext).ToList(); //!!!!Nick // //var files = Directory.GetFiles(path, "*.tif").ToList(); //.OrderBy(f => f.CreationTime); // files.Sort(); // txtNFilesSelected.Text = files.Count.ToString(); // _rakurseFiles = new string[files.Count]; // files.CopyTo(_rakurseFiles); // } // } // catch (Exception ex) // { // //this.ShowErrorMessage(ex); // } //} private string OpenDlg() { string selectedFolder = ""; using (var fbd = new FileFolderDialog()) { fbd.Dialog.Title = "Open (Treko3D - layer)"; //!!!!Nick DialogResult result = fbd.ShowDialog(); if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath)) { string path = fbd.SelectedPath; // get the file attributes for file or directory FileAttributes attr = File.GetAttributes(path); if (attr.HasFlag(FileAttributes.Directory)) selectedFolder = fbd.SelectedPath; else selectedFolder = Path.GetDirectoryName(path); string[] filesname = Directory.GetFiles(selectedFolder); //!!!!Nick string ext = Helper.FoundPicExt(filesname); //!!!!Nick ext = "*" + ext; //!!!!Nick var files = Directory.GetFiles(selectedFolder, ext).ToList(); //!!!!Nick //var files = Directory.GetFiles(selectedFolder, "*.tif").ToList(); //.OrderBy(f => f.CreationTime); //var files = Directory.GetFiles(selectedFolder, "*.*").Where(str => str.EndsWith(".tif") || str.EndsWith(".png")).ToList(); files.Sort(); fbd.Dispose(); txtNFilesSelected.Text = files.Count.ToString(); _rakurseFiles = new string[files.Count]; files.CopyTo(_rakurseFiles); } } return selectedFolder; } private void btnOpenImage_Click(object sender, EventArgs e) { string folderPath = OpenDlg(); txtSourceFilePath.Text = folderPath; System.ComponentModel.CancelEventArgs ea = null; txtSourceFilePath_Validating(this, ea); int imgWidth = 50; int imgHeight = 50; _thumbnail = ImageProcessing.CreateThumbnail(_rakurseFiles[0], imgWidth, imgHeight); picBoxThumbnail.BackgroundImage = _thumbnail; picBoxThumbnail.Invalidate(); //OpenFileDialog open_dialog = new OpenFileDialog(); //создание диалогового окна для выбора файла //open_dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*"; //форматы загружаемых файлов //Control[] cnt = this.ParentForm.Controls.Find("picBoxSourceImage", true); //PictureBox pbx = (PictureBox)cnt[0]; //if (open_dialog.ShowDialog() == DialogResult.OK) //Кнопка "ОК" //{ // try // { // var image = new Bitmap(open_dialog.FileName); // pbx.Size = image.Size; // pbx.Image = image; // //ImageConverter cnv = new ImageConverter(); // //var myArray = (byte[])new ImageConverter().ConvertTo(image, typeof(byte[])); // //MemoryStream ms = new MemoryStream(); // treko3D.Pixels = new int[image.Height, image.Width]; // for (int y = 0; y < image.Height; y++) // for (int x = 0; x < image.Width; x++) // { // treko3D.Pixels[y, x] = (int)(image.GetPixel(x, y).ToArgb()); // //pixel[y, x] = (UInt32)(image.GetPixel(x, y).ToArgb()); // } // //LayerH = LayerW * image.Height / image.Width; // treko3D.SourceImage = image; // treko3D.DefPicSize(); // txtSourceFilePath.Text = open_dialog.FileName; // pbx.Invalidate(); // } // catch (Exception d) // { // DialogResult rezult = MessageBox.Show(d.Message, // "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); // } //} } private void btnDetalizationPreview_Click(object sender, EventArgs e) { _treko3D.VoxelWidthPix = 32; // Voxel size is variable. Depends on size of arcs. _treko3D.VoxelHeightPix = 32; _treko3D.RadiusMax = (float)numUpDownRadius.Value; // Given from Control's text box _treko3D.Step = (float)numUpDownStep.Value; // Width of Hologram in mm / Width of Hologram in pixels (30mm/200pxs=0.15mm) _treko3D.RakurseFiles = RakurseFiles; // Array of names of rakurse files _treko3D.NRakurses = RakurseFiles.Length; System.ComponentModel.CancelEventArgs ea = null; txtSourceFilePath_Validating(this, ea); if (errorProvider1.GetError(txtSourceFilePath) != "") return; OnPreviewClicked?.Invoke(this, EventArgs.Empty); } private void BtnTraceProfile_Click(object sender, EventArgs e) { OnColorProfileClicked?.Invoke(this, EventArgs.Empty); } private void btnClearSourceFilePath_Click(object sender, EventArgs e) { SourceFilePath = ""; SourceFileSelected = ""; } private void clearProgressInfo() { lblGenFrames.Text = ""; //lblSaveFrames.Text = ""; progressBar1.Value = 0; progressBar2.Value = 0; //progressBar3.Value = 0; //progressBar4.Value = 0; } private bool btnRunValidating() { bool success = true; clearErrors(); System.ComponentModel.CancelEventArgs ee = null; txtLayerName_Validating(this, ee); if (errorProvider1.GetError(txtLayerName) != "") success = false; txtSourceFilePath_Validating(this, ee); if (errorProvider1.GetError(txtSourceFilePath) != "") success = false; numUpDownStep_Validating(this, ee); if (errorProvider1.GetError(numUpDownStep) != "") success = false; numUpDownRadius_Validating(this, ee); if (errorProvider1.GetError(numUpDownRadius) != "") success = false; txtFullMask_Validating(this, ee); if (errorProvider1.GetError(txtFullMask) != "") success = false; //txtTileMask_Validating(this, ee); //if (errorProvider1.GetError(txtTileMask) != "") // success = false; numFrameGroupWidth_Validating(this, ee); numFrameGroupHeight_Validating(this, ee); numRowStart_Validating(this, ee); numRowEnd_Validating(this, ee); return success; } public void SaveData() { bool success = false; if (EditMode == true) //control for update project { success = UpdateTreko3DLayer(); } else { // We try to create new layer without project // So we need to create default project first if (_projectObj == null || _projectObj.ProjectName == "" || _projectObj.ProjectName == Resources.Default_Project_Name) { success = newProjectControl.RegisterDefaultProject(); _projectObj = newProjectControl.Project; ProjectObj = _projectObj; } success = RegisterNewTreko3DLayer(); } string dirName = this.SourceFilePath; string outDirName = _projectObj.OutPath; // dirName + "\\TEST\\"; if (outDirName == "" || !Directory.Exists(outDirName)) outDirName = Helper.CreateOutDir(dirName); if (outDirName == "") return; _treko3D.VoxelWidthPix = 32; // Voxel size is variable. Depends on size of arcs. _treko3D.VoxelHeightPix = 32; _treko3D.RakurseFiles = RakurseFiles; // Array of names of rakurse files if (RakurseFiles == null) _treko3D.NRakurses = 0; else _treko3D.NRakurses = RakurseFiles.Length; DataRow row = layerService.GetColorProfileByLayerId(_layerObj.Id); if (this.ColorProfileControl != null) { ColorProfileControl.LayerId = _layerObj.Id; if (row == null) { success = ColorProfileControl.RegisterNewColorProfile(); this.ColorProfileObj = ColorProfileControl.ColorProfileObj; } else { success = ColorProfileControl.UpdateColorProfile(); this.ColorProfileObj = ColorProfileControl.ColorProfileObj; } } else { if (row == null) { LoadColorProfileDefault(); // Color Profile record is mandatory for layer success = RegisterNewColorProfileDefault(); } else { LoadColorProfile(_layerObj.Id); } } _treko3D.RadiusMax = (float)numUpDownRadius.Value; // Given from Control's text box _treko3D.Step = (float)numUpDownStep.Value; // Width of Hologram in mm / Width of Hologram in pixels (30mm/200pxs=0.15mm) _treko3D.ArcWidth = _colorProfileObj.ArcWidth; _projectObj = newProjectControl.Project; treko3DObj.LoadRakurseFiles(); } private void launchBackgroundWorker() { if (backgroundWorker1.IsBusy != true) { int nFramesHor = Convert.ToInt32(_projectObj.HologramWidth / _projectObj.FrameWidth); int nFramesVert = Convert.ToInt32(_projectObj.HologramHeight / _projectObj.FrameHeight); // Number of frames in group int nFramesInGroupHor = FrameGroupWidth; int nFramesInGroupVert = FrameGroupHeight; // ini values in file this.progressModel1.MaxValue = nFramesHor / nFramesInGroupHor + 1; // horizontal length is bigger because of briks this.progressModel1.MinValue = 0; this.progressModel1.CurValue = 0; this.progressModel2.MaxValue = RowEnd + 1; // nFramesVert / nFramesInGroupVert; this.progressModel2.MinValue = RowStart; this.progressModel2.CurValue = RowStart; // Start the asynchronous operation. backgroundWorker1.RunWorkerAsync(); } } private void btnRun_Click(object sender, EventArgs e) { clearProgressInfo(); if (btnRunValidating() == false) return; SaveData(); launchBackgroundWorker(); //treko3DObj.GenerateAndSaveStrips(dirName, outDirName); //generateFrameGroups(); //SaveFramesToFiles(); //GenerateIniFile(); } public int ProgressPercentage(int value, int minval, int maxval) { return value * 100 / maxval; } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; while (progressModel2.CurValue < progressModel2.MaxValue) { if (worker.CancellationPending == true) { e.Cancel = true; break; } else { int nFramesHor = Convert.ToInt32(_projectObj.HologramWidth / _projectObj.FrameWidth); int nFramesVert = Convert.ToInt32(_projectObj.HologramHeight / _projectObj.FrameHeight); // Number of frames in group int nFramesInGroupHor = FrameGroupWidth; int nFramesInGroupVert = FrameGroupHeight; int nCols = (int)Math.Round((decimal)nFramesHor / nFramesInGroupHor, MidpointRounding.AwayFromZero) + 1; int nRows = (int)Math.Round((decimal)nFramesVert / nFramesInGroupVert, MidpointRounding.AwayFromZero) + 1; // add one more frame group for bricks construction _frameGroups = new FrameGroup[nCols, nRows]; // add one more frame group for bricks construction //_frameGroups = new FrameGroup[nFramesHor/nFramesInGroupHor + 1, nFramesVert/nFramesInGroupVert + 1]; string outDirName = _projectObj.OutPath; // dirName + "\\TEST\\"; Directory.CreateDirectory(outDirName + "\\TEST\\"); //!!!!Nick TraceTotalMemory.ClearTraceFile(outDirName + "\\TEST\\"); TraceTotalMemory.WriteTotalMemory(outDirName + "\\TEST\\", "Treko3DControl, before"); for (int j = (int)numRowStart.Value; j < nRows /*_frameGroups.GetLength(1)*/; j++) { for (int i = 0; i < nCols; i++) { // in group only one frame for now _frameGroups[i, j] = new FrameGroup(_projectObj.ResolutionX, _projectObj.ResolutionY, _projectObj.FrameWidth, _projectObj.FrameHeight, nFramesInGroupHor, nFramesInGroupVert, i, j); //TraceTotalMemory.WriteTotalMemory(outDirName, "Treko3DControl, step 1"); FrameGroup fg = _frameGroups[i, j]; //_frameGroups[i, j].FillByIntersectVoxelArcs(_treko3D.Strips); fg.FillByIntersectVoxelArcs(_treko3D); //TraceTotalMemory.WriteTotalMemory(outDirName, "Treko3DControl, step 2"); if (fg.IntersectRakurseArcs != null && fg.IntersectRakurseArcs.Count > 0) { fg.DrawBitmapByRakurseArcs(_layerObj.TraceProfile); //TraceTotalMemory.WriteTotalMemory(outDirName, "Treko3DControl, step 3"); fg.CropIntoImageArray(j); //TraceTotalMemory.WriteTotalMemory(outDirName, "Treko3DControl, step 4"); //fg.SaveGroupToFiles(_outDirName, n, i, j); fg.SaveGroupToFiles(outDirName, i, j, _frameGroups.GetLength(0), _frameGroups.GetLength(1)); //TraceTotalMemory.WriteTotalMemory(outDirName, "Treko3DControl, step 5"); fg.FrameGroupBmp.Dispose(); } else fg.MarkFrameGroupAsBlack(); fg.Dispose(); fg = null; this.progressModel1.CurValue = i; //this.progressModel1.CurValue = i + 1; //if (i == 27) // i = 27; int progress1 = ProgressPercentage(progressModel1.CurValue, progressModel1.MinValue, progressModel1.MaxValue); worker.ReportProgress(progress1); if (worker.CancellationPending == true) { e.Cancel = true; break; } // Perform a time consuming operation and report progress. Thread.Sleep(20); } this.progressModel2.CurValue = j + 1; int progress2 = ProgressPercentage(progressModel2.CurValue, progressModel2.MinValue, progressModel2.MaxValue); worker.ReportProgress(progress2); if (worker.CancellationPending == true) { e.Cancel = true; break; } if (j >= numRowEnd.Value) { e.Result = "Done"; break; } TraceTotalMemory.WriteTotalMemory(outDirName + "\\TEST\\", "Treko3DControl, j = " + j); // Perform a time consuming operation and report progress. Thread.Sleep(20); } } } } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { int nFramesHor = Convert.ToInt32(_projectObj.HologramWidth / _projectObj.FrameWidth); int nFramesVert = Convert.ToInt32(_projectObj.HologramHeight / _projectObj.FrameHeight); int progress1 = ProgressPercentage(progressModel1.CurValue, progressModel1.MinValue, progressModel1.MaxValue); int progress2 = ProgressPercentage(progressModel2.CurValue, progressModel2.MinValue, progressModel2.MaxValue); // Change the value of the ProgressBar to the BackgroundWorker progress. progressBar1.Value = progress1; // e.ProgressPercentage; progressBar1.Maximum = 100; progressBar1.Minimum = 0; progressBar2.Value = progress2; progressBar2.Maximum = 100; progressBar2.Minimum = 0; // Number of frames in group int nFramesInGroupHor = FrameGroupWidth; int nFramesInGroupVert = FrameGroupHeight; string labelInd = "Gen. Frames " + Convert.ToString(nFramesHor / nFramesInGroupHor + 1) + "x" + Convert.ToString(nFramesVert / nFramesInGroupVert); lblGenFrames.Text = labelInd + " - " + Convert.ToString(this.progressModel1.CurValue) + "x" + Convert.ToString(this.progressModel2.CurValue); lblGenFrames.Refresh(); // Set the text. //this.Text = e.ProgressPercentage.ToString(); } private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) { if (e.Cancelled == true) { lblGenFrames.Text = "Canceled!"; } else if (e.Error != null) { int nFramesHor = Convert.ToInt32(_projectObj.HologramWidth / _projectObj.FrameWidth); int nFramesVert = Convert.ToInt32(_projectObj.HologramHeight / _projectObj.FrameHeight); int nFramesInGroupHor = FrameGroupWidth; int nFramesInGroupVert = FrameGroupHeight; string labelInd = "Error: " + Convert.ToString(nFramesHor / nFramesInGroupHor + 1) + "x" + Convert.ToString(nFramesVert / nFramesInGroupVert); lblGenFrames.Text = labelInd + " - " + Convert.ToString(this.progressModel1.CurValue) + "x" + Convert.ToString(this.progressModel2.CurValue); lblGenFrames.Refresh(); //lblGenFrames.Text = "Error: " + e.Error.Message; } else { lblGenFrames.Text = "Done!"; GenerateIniFile(); //if (backgroundWorker2.IsBusy != true) //{ // // Number of frames in group // int nFramesInGroupHor = 2; // int nFramesInGroupVert = 2; // int nFramesHor = Convert.ToInt32(_projectObj.HologramWidth / _projectObj.FrameWidth) / nFramesInGroupHor; // int nFramesVert = Convert.ToInt32(_projectObj.HologramHeight / _projectObj.FrameHeight) / nFramesInGroupVert; // // ini values in file // this.progressModel1.MaxValue = nFramesHor + 1; // horizontal length is bigger because of briks // this.progressModel1.MinValue = 0; // this.progressModel1.CurValue = 0; // this.progressModel2.MaxValue = nFramesVert; // this.progressModel2.MinValue = 0; // this.progressModel2.CurValue = 0; // // Start the asynchronous operation. // backgroundWorker2.RunWorkerAsync(); //} } } //private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e) //{ // BackgroundWorker worker = sender as BackgroundWorker; // while (progressModel2.CurValue < progressModel2.MaxValue) // { // if (worker.CancellationPending == true) // { // e.Cancel = true; // break; // } // string outDirName = _projectObj.OutPath; // dirName + "\\TEST\\"; // for (int j = 0; j < _frameGroups.GetLength(1); j++) // { // for (int i = 0; i < _frameGroups.GetLength(0); i++) // { // FrameGroup fg = _frameGroups[i, j]; // // in group only one frame for now // if (fg.IntersectRakurseArcs != null && fg.IntersectRakurseArcs.Count > 0) // { // fg.DrawBitmapByRakurseArcs(_layerObj.TraceProfile); // fg.CropIntoImageArray(j); // //fg.SaveGroupToFiles(_outDirName, n, i, j); // fg.SaveGroupToFiles(outDirName, i, j, _frameGroups.GetLength(0), _frameGroups.GetLength(1)); // fg.FrameGroupBmp.Dispose(); // } // else // fg.MarkFrameGroupAsBlack(); // this.progressModel1.CurValue = i + 1; // int progress1 = ProgressPercentage(progressModel1.CurValue, progressModel1.MinValue, progressModel1.MaxValue); // worker.ReportProgress(progress1); // if (worker.CancellationPending == true) // { // e.Cancel = true; // break; // } // // Perform a time consuming operation and report progress. // Thread.Sleep(20); // } // this.progressModel2.CurValue = j + 1; // int progress2 = ProgressPercentage(progressModel2.CurValue, progressModel2.MinValue, progressModel2.MaxValue); // worker.ReportProgress(progress2); // if (worker.CancellationPending == true) // { // e.Cancel = true; // break; // } // Thread.Sleep(20); // } // } //} //private void backgroundWorker2_ProgressChanged(object sender, ProgressChangedEventArgs e) //{ // int nFramesHor = Convert.ToInt32(_projectObj.HologramWidth / _projectObj.FrameWidth); // int nFramesVert = Convert.ToInt32(_projectObj.HologramHeight / _projectObj.FrameHeight); // string labelInd = "Save Frames " + Convert.ToString(_frameGroups.GetLength(0)) + "x" + Convert.ToString(_frameGroups.GetLength(1)); // int progress1 = ProgressPercentage(progressModel1.CurValue, progressModel1.MinValue, progressModel1.MaxValue); // int progress2 = ProgressPercentage(progressModel2.CurValue, progressModel2.MinValue, progressModel2.MaxValue); // // Change the value of the ProgressBar to the BackgroundWorker progress. // progressBar3.Value = progress1; // e.ProgressPercentage; // progressBar3.Maximum = 100; // progressBar3.Minimum = 0; // progressBar4.Value = progress2; // progressBar4.Maximum = 100; // progressBar4.Minimum = 0; // lblSaveFrames.Text = labelInd + " - " + Convert.ToString(this.progressModel1.CurValue) + "x" + Convert.ToString(this.progressModel2.CurValue); // lblSaveFrames.Refresh(); //} //private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) //{ // if (e.Cancelled == true) // { // lblSaveFrames.Text = "Canceled!"; // } // else if (e.Error != null) // { // lblSaveFrames.Text = "Error: " + e.Error.Message; // } // else // { // lblSaveFrames.Text = "Done!"; // GenerateIniFile(); // } //} private void txtSourceFilePath_Validating(object sender, System.ComponentModel.CancelEventArgs e) { errorProvider1.SetError(txtSourceFilePath, ""); if (txtSourceFilePath.Text == "") { errorProvider1.SetError(txtSourceFilePath, "Source File Path must not be empty."); return; } if (Helper.IsValidPath(txtSourceFilePath.Text.Trim(), false) == false) errorProvider1.SetError(txtSourceFilePath, "Source File Path is incorrect."); //this.LoadRakurseFiles(); string path = txtSourceFilePath.Text; _rakurseFiles = Helper.LoadRakurseFiles(path); if (_rakurseFiles != null) txtNFilesSelected.Text = _rakurseFiles.Length.ToString(); if (_rakurseFiles == null || _rakurseFiles.Length == 0) errorProvider1.SetError(txtSourceFilePath, "Error Loading Source Files."); } private void txtLayerName_Validating(object sender, System.ComponentModel.CancelEventArgs e) { errorProvider1.SetError(txtLayerName, ""); if (txtLayerName.Text == "") errorProvider1.SetError(txtLayerName, "Layer Name must not be empty."); } private void numUpDownStep_Validating(object sender, CancelEventArgs e) { errorProvider1.SetError(numUpDownStep, ""); if (numUpDownStep.Text == "") errorProvider1.SetError(numUpDownStep, "Step must not be empty."); } private void numUpDownRadius_Validating(object sender, CancelEventArgs e) { errorProvider1.SetError(txtLayerName, ""); if (numUpDownRadius.Text == "") errorProvider1.SetError(numUpDownRadius, "Radius must not be empty."); } private void txtFullMask_Validating(object sender, CancelEventArgs e) { errorProvider1.SetError(txtFullMask, ""); } private void txtTileMask_Validating(object sender, CancelEventArgs e) { //errorProvider1.SetError(txtTileMask, ""); } private void numFrameGroupWidth_Validating(object sender, CancelEventArgs e) { if (numFrameGroupWidth.Value < 1) numFrameGroupWidth.Value = 1; if (numFrameGroupWidth.Value > 20) numFrameGroupWidth.Value = 20; } private void numFrameGroupHeight_Validating(object sender, CancelEventArgs e) { if (numFrameGroupHeight.Value < 1) numFrameGroupHeight.Value = 1; if (numFrameGroupHeight.Value > 20) numFrameGroupHeight.Value = 20; } private void numRowStart_Validating(object sender, CancelEventArgs e) { if (numRowStart.Value < 0) numRowStart.Value = 0; } private void numRowEnd_Validating(object sender, CancelEventArgs e) { if (numRowEnd.Value < 0) numRowEnd.Value = 0; int nRows = Convert.ToInt16(ProjectObj.HologramHeight / (ProjectObj.FrameHeight * FrameGroupHeight)); numRowEnd.Value = nRows; } private void numFrameGroupHeight_ValueChanged(object sender, EventArgs e) { CancelEventArgs ee = new CancelEventArgs(); numRowEnd_Validating(sender, ee); } private void numUpDownLayerW_Validating(object sender, CancelEventArgs e) { } private void numUpDownLayerH_Validating(object sender, CancelEventArgs e) { } private void numUpDownLayerLeft_Validating(object sender, CancelEventArgs e) { } private void numUpDownLayerTop_Validating(object sender, CancelEventArgs e) { } } }