// load nest task from task file. static public NestTaskEx LoadNestTask_from_taskFile(String strFilePath, List <KeyValuePair <long, string> > partDxfPath, List <KeyValuePair <long, string> > matDxfPath, Dictionary <long, int> partColorConfig, ImpDataListEx impDataList, ref int iNestingTime) { NestTaskEx nestTask = new NestTaskEx(); // load the task file. XmlDocument xmlDocument = new XmlDocument(); StreamReader reader = new StreamReader(strFilePath, Encoding.UTF8); xmlDocument.Load(reader); // the version. XmlNode taskNode = xmlDocument.SelectSingleNode("NestTask"); int iTaskVersion = Convert.ToInt32(taskNode.Attributes["taskVersion"].Value); if (iTaskVersion == TASK_VERSION_1) { // load param. XmlNode paramNode = taskNode.SelectSingleNode("Param"); NestParamEx nestParam = LoadNestParam_V1(paramNode, ref iNestingTime); nestTask.SetNestParam(nestParam); // load nest part info. XmlNode partListNode = taskNode.SelectSingleNode("PartList"); NestPartListEx nestParts = LoadNestParts_V1(strFilePath, partListNode, partDxfPath, impDataList, partColorConfig); nestTask.SetNestPartList(nestParts); // load material info. XmlNode matListNode = taskNode.SelectSingleNode("MaterialList"); MatListEx mats = LoadMats_V1(strFilePath, matListNode, matDxfPath, nestParam); nestTask.SetMatList(mats); } return(nestTask); }
private void loadTaskBtn_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Task Files|*.xml"; openFileDialog.RestoreDirectory = true; openFileDialog.FilterIndex = 1; if (openFileDialog.ShowDialog() == DialogResult.OK) { String strFilePath = openFileDialog.FileName; NestTaskEx nestTask = TaskStorage.LoadNestTask_from_taskFile(strFilePath, m_partDxfPath, m_matDxfPath, m_partColorConfig, m_impDataList, ref m_iNestingTime); m_nestParam = nestTask.GetNestParam(); // disable select-change event. m_bDisableSelChgEvent = true; // clean list. partListView.Items.Clear(); matListView.Items.Clear(); // init part list. { m_nestPartList = nestTask.GetNestPartList(); for (int i = 0; i < m_nestPartList.Size(); i++) { AddPart_to_listCtrl(m_nestPartList.GetNestPartByIndex(i), ""); } // select the last row. if (partListView.Items.Count > 0) { partListView.SelectedItems.Clear(); partListView.Items[partListView.Items.Count - 1].Selected = true; partListView.Items[partListView.Items.Count - 1].Focused = true; partListView.Items[partListView.Items.Count - 1].EnsureVisible(); } } // init material. { m_matList = nestTask.GetMatList(); for (int i = 0; i < m_matList.Size(); i++) { AddMat(m_matList.GetMatByIndex(i)); } } // enable select-change event. m_bDisableSelChgEvent = false; Preview_selected_part(); Preview_selected_material(); } }
static private void SaveMats(XmlDocument xmlDoc, XmlNode matListNode, MatListEx mats, List <KeyValuePair <long, string> > matDxfPath) { for (int i = 0; i < mats.Size(); i++) { MatEx mat = mats.GetMatByIndex(i); XmlElement materialNode = xmlDoc.CreateElement("Material"); matListNode.AppendChild(materialNode); bool bFromDxf = false; for (int j = 0; i < matDxfPath.Count; j++) { if (matDxfPath[j].Key == mat.GetID()) { XmlElement matPathNode = xmlDoc.CreateElement("MatPath"); matPathNode.InnerText = matDxfPath[j].Value; materialNode.AppendChild(matPathNode); // Count { XmlElement countNode = xmlDoc.CreateElement("Count"); countNode.InnerText = mat.GetCount().ToString(); materialNode.AppendChild(countNode); } bFromDxf = true; break; } } // material is not from dxf. if (!bFromDxf) { RectMatEx rectMat = (RectMatEx)(mat); // name { XmlElement nameNode = xmlDoc.CreateElement("Name"); nameNode.InnerText = mat.GetName(); materialNode.AppendChild(nameNode); } // Width { XmlElement widthNode = xmlDoc.CreateElement("Width"); widthNode.InnerText = rectMat.GetBoundaryRect().GetWidth().ToString("0.000000"); materialNode.AppendChild(widthNode); } // Height { XmlElement heightNode = xmlDoc.CreateElement("Height"); heightNode.InnerText = rectMat.GetBoundaryRect().GetHeight().ToString("0.000000"); materialNode.AppendChild(heightNode); } // Count { XmlElement countNode = xmlDoc.CreateElement("Count"); countNode.InnerText = rectMat.GetCount().ToString(); materialNode.AppendChild(countNode); } } } }
static private MatListEx LoadMats_V1(string strTaskFilePath, XmlNode matListNode, List <KeyValuePair <long, string> > matDxfPath, NestParamEx nestParam) { MatListEx mats = new MatListEx(); for (int i = 0; i < matListNode.ChildNodes.Count; i++) { XmlNode matNode = matListNode.ChildNodes.Item(i); // whether load material from file. XmlNode pathNode = matNode.SelectSingleNode("MatPath"); if (pathNode != null) { string strMaterialFileFullPath = pathNode.InnerText; if (!File.Exists(strMaterialFileFullPath)) { // the new file path. string strTaskFileFolder = strTaskFilePath.Substring(0, strTaskFilePath.LastIndexOf("\\")); string strMaterialFileName = strMaterialFileFullPath.Substring(strMaterialFileFullPath.LastIndexOf("\\") + 1, strMaterialFileFullPath.Length - strMaterialFileFullPath.LastIndexOf("\\") - 1); string strNewMaterialFileFullPath = strTaskFileFolder + "\\" + strMaterialFileName; // try again. if (!File.Exists(strNewMaterialFileFullPath)) { string strMessage = "Cannot find material file: "; MessageBox.Show(strMessage + strMaterialFileFullPath, "NestProfessor DEMO"); continue; } else { strMaterialFileFullPath = strNewMaterialFileFullPath; } } MatEx mat = NestHelper.LoadMatFromDxfdwg(strMaterialFileFullPath, nestParam); mats.AddMat(mat); matDxfPath.Add(new KeyValuePair <long, string>(mat.GetID(), strMaterialFileFullPath)); // count. mat.SetCount(Convert.ToInt32(matNode.SelectSingleNode("Count").InnerText)); } else { RectMatEx rectMat = new RectMatEx(); mats.AddMat(rectMat); // name rectMat.SetName(matNode.SelectSingleNode("Name").InnerText); // width. double dWidth = Convert.ToDouble(matNode.SelectSingleNode("Width").InnerText); // height. double dHeight = Convert.ToDouble(matNode.SelectSingleNode("Height").InnerText); // the material rect. Rect2DEx matRect = new Rect2DEx(0, dWidth, 0, dHeight); rectMat.SetMatRect(matRect); // count. rectMat.SetCount(Convert.ToInt32(matNode.SelectSingleNode("Count").InnerText)); } } return(mats); }
// display the nesting result. private void DisplayNestResult() { if (m_sheetList == null) { return; } m_bDisableEvent = true; // display detail info of each sheet. shtListView.Items.Clear(); for (int i = 0; i < m_sheetList.Size(); i++) { SheetEx sheet = m_sheetList.GetSheetByIndex(i); // insert a row. int iCount = shtListView.Items.Count + 1; ListViewItem item = shtListView.Items.Add(iCount.ToString()); // "name" column. item.SubItems.Add(sheet.GetName()); // "sheet count" column. item.SubItems.Add(sheet.GetCount().ToString()); // "material name" column. item.SubItems.Add(sheet.GetMat().GetName()); // hold the sheet ID. item.Tag = sheet.GetID(); } /************************************************************************/ // part group. NestPartListEx nestPartList = m_nestTask.GetNestPartList(); // submitted part count. int iSubmitPartCount = 0; for (int i = 0; i < nestPartList.Size(); i++) { iSubmitPartCount += nestPartList.GetNestPartByIndex(i).GetNestCount(); } subPartTextBox.Text = iSubmitPartCount.ToString(); // the count of the nested parts. int iNestedPartCount = m_sheetList.GetPartInstTotalCount(); nestPartTextBox.Text = iNestedPartCount.ToString(); // display detailed info of each part. partListView.Items.Clear(); for (int i = 0; i < nestPartList.Size(); i++) { NestPartEx nestPart = nestPartList.GetNestPartByIndex(i); PartEx part = nestPart.GetPart(); // insert a row. int iCount = partListView.Items.Count + 1; ListViewItem item = partListView.Items.Add(iCount.ToString()); // "name" column. item.SubItems.Add(part.GetName()); // "submitted count" column. item.SubItems.Add(nestPart.GetNestCount().ToString()); // "nested count" column. int iNestedCount = m_sheetList.GetPartInstCount(part.GetID()); item.SubItems.Add(iNestedCount.ToString()); } /************************************************************************/ /************************************************************************/ // material group. MatListEx matList = m_nestTask.GetMatList(); // the utilization of material. double dUtilization = NestHelper.CalcMatUtil(m_sheetList, m_nestTask.GetNestParam()); utilTextBox.Text = dUtilization.ToString("0.00"); matListView.Items.Clear(); for (int i = 0; i < matList.Size(); i++) { MatEx mat = matList.GetMatByIndex(i); // insert a row. int iCount = matListView.Items.Count + 1; ListViewItem item = matListView.Items.Add(iCount.ToString()); // "name" column. item.SubItems.Add(mat.GetName()); // "submitted count" column. item.SubItems.Add(mat.GetCount().ToString()); // "consumed count" column. int iConsumedCount = m_sheetList.GetSheetCount(mat.GetID()); item.SubItems.Add(iConsumedCount.ToString()); } /************************************************************************/ // preview the first sheet. if (shtListView.Items.Count > 0) { shtListView.Items[0].Selected = true; // get the select sheet. ListView.SelectedListViewItemCollection selItems = shtListView.SelectedItems; ListViewItem item = selItems[0]; long iSheetID = (long)item.Tag; SheetEx selectedSheet = m_sheetList.GetSheetByID(iSheetID); // fit the window. DrawHelper.FitWindow(selectedSheet.GetMat().GetBoundaryRect(), m_shtViewPort, shtPreViewWnd); PreviewSheet(); } m_bDisableEvent = false; }