using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.IO; using System.Collections; using System.Text.RegularExpressions; using KDCS.Utils; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Plumbing; namespace KMBIM { public partial class Form_Steam : System.Windows.Forms.Form { public List m_ArrValue = new List(); public List m_ArrHdValue = new List(); public double[] dlst; // 관경의 목록을 저장 public int listboxcnt = -1; public double mainHeaderDia; public List m_ArrDia = new List(); string m_strpath = string.Empty; public int m_nMode = -1; public double m_HeadHgt = 0; public string m_Globepath = null, m_Safepath = null; public double m_ValHgt = 0; public List HeaderSysTypeLst = new List(); public PipingSystemType HeaderSysType = null; public List SelectedSysTypeNameLst = new List(); public Document doc = null; //메인 헤더 높이 public double HeadHeight { get { return m_HeadHgt; } set { m_HeadHgt = value; } } //글로브 밸브 경로 public string GlobevalvePath { get { return m_Globepath; } set { m_Globepath = value; } } //안전 밸브 경로 public string SafevalvePath { get { return m_Safepath; } set { m_Safepath = value; } } public Form_Steam() { InitializeComponent(); //string Tmp = System.Reflection.Assembly.GetExecutingAssembly().Location; // //m_strpath = Tmp.Replace("\\KMBIM2019.dll", ""); m_strpath = Util.GetKMBIMLibraryFolder("Libraries\\Header"); } private void init() { string s, sql; //m_strPath.Format(_T("%s"),m_pDraw->m_strPath); //////////yong////////////////// ///////////////0311파일 존재 유무 체크 //if(!IsExistFile(m_strPath)){ // AfxMessageBox(_T("파일이 존재 하지 않습니다")); // SelData(); // return; //} /////////////////////////// m_ArrValue.Clear(); m_ArrHdValue.Clear(); GetDia("STEAM.csv"); for (int i = 0; i < m_ArrDia.Count; i++) { s = m_ArrDia[i]; s = s.Replace("D", ""); cmb_pipedia.Items.Add(s); } s = m_ArrDia[0]; s = s.Replace("D", ""); cmb_pipedia.Text = s; //////// //헤더 지름별 사양...입력 부분.... GetHDValue("HDDIA.csv"); // m_hd = m_HdFirst;//"200"; //if (m_hd = _T("")) m_hd = _T("200"); /* buttonDisable(); UpdateData(FALSE); m_PipeDia.SetCurSel(0);*/ } private void GetDia(string filename) { try { long id; FileStream fs = null; string csFileName, csRecord; string strPath; bool res = false; //m_strpath = m_strpath.Replace("\\KMBIM2019.dll", ""); //csFileName = m_strpath + "\\data\\Header\\" + filename; csFileName = Path.Combine(Util.GetKMBIMLibraryFolder("Libraries\\Header\\"), filename); FileInfo _finfo = new FileInfo(csFileName); bool sw = _finfo.Exists; if (sw == false) { // 파일 존재 유무 조사 string strMsg; strMsg = System.String.Format("파일{0}을 찾을 수 없습니다.", csFileName); MessageBox.Show(strMsg); return; } fs = new FileStream(csFileName, FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default); if (fs == null) { string strMsg; strMsg = System.String.Format("파일({0})을 열 수 없습니다.", csFileName); MessageBox.Show(strMsg); return; } int ic = 0; HeValue val; double zero, one; zero = 0.0f; ArrayList csaFieldNames = new ArrayList(); int iInside = 0, iPipeName = 0; while (sr.Peek() > -1) { //ArxUtils::SeparateString(csRecord, csaFields, _T(",\t\n")); string str = sr.ReadLine(); string[] arr = Regex.Split(str, ",\t"); if (arr.Length <= 0) break; // 이 문 없으면 죽는다. if (ic == 0) { // 필드레코드 ic++; for (int j = 0; j < arr.Length; j++) { csaFieldNames.Add(arr[j]); } continue; } ic++; m_ArrDia.Add(arr[0]); for (int j = 1; j < arr.Length; j++) { val.val = arr[j].ToString(); one = Convert.ToDouble(val.val); if ((val.val != string.Empty) && ((one > 0.0f))) { val.he = csaFieldNames[j].ToString(); val.we = arr[0].ToString(); val.he = val.he.Replace("D", ""); val.we = val.we.Replace("D", ""); m_ArrValue.Add(val); } } }//end-while fs.Close(); } catch (FieldAccessException ex) { //pEx->ReportError(); } } private void GetHDValue(string lpszCSV) { // Clear the contents of the Array m_ArrDia.Clear(); list_Sup.Items.Clear(); try { long id; FileStream fs = null; string csFileName, csRecord; string strPath; bool res = false; //m_strpath = m_strpath.Replace("\\KMBIM2019.dll", ""); // MessageBox.Show(m_strpath); csFileName = Path.Combine(Util.GetKMBIMLibraryFolder("Libraries\\Header\\"), lpszCSV); //MessageBox.Show(csFileName); FileInfo _finfo = new FileInfo(csFileName); bool sw = _finfo.Exists; if (sw == false) { // 파일 존재 유무 조사 string strMsg; strMsg = System.String.Format("파일{0}을 찾을 수 없습니다.", csFileName); MessageBox.Show(strMsg); return; } fs = new FileStream(csFileName, FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default); if (fs == null) { string strMsg; strMsg = System.String.Format("파일({0})을 열 수 없습니다.", csFileName); MessageBox.Show(strMsg); return; } int ic = 0; HdValue val; double zero, one; zero = 0.0f; ArrayList csaFieldNames = new ArrayList(); int iInside = 0, iPipeName = 0; while (sr.Peek() > -1) { //ArxUtils::SeparateString(csRecord, csaFields, _T(",\t\n")); string str = sr.ReadLine(); string[] arr = Regex.Split(str, ",\t"); if (arr.Length <= 0) break; // 이 문 없으면 죽는다. if (ic == 0) { // 필드레코드 ic++; for (int j = 0; j < arr.Length; j++) { csaFieldNames.Add(arr[j]); } continue; } ic++; string sHDDIA, sBLTSIZE, sBLTBORE, sBLTNO, sFLGID, sBLTCENDST, sFLGOD; sHDDIA = arr[0]; sBLTSIZE = arr[1]; sBLTBORE = arr[2]; sBLTNO = arr[3]; sFLGID = arr[4]; sBLTCENDST = arr[5]; sFLGOD = arr[6]; if ((sHDDIA != string.Empty) && (sBLTSIZE != string.Empty) && (sBLTBORE != string.Empty) && (sBLTNO != string.Empty) && (sFLGID != string.Empty) && (sBLTCENDST != string.Empty) && (sFLGOD != string.Empty)) { //int n=sHDDIA.get.GetLength(); cmb_headdia.Items.Add(sHDDIA); val.HDDIA = sHDDIA; val.FLGOD = sFLGOD; val.FLGID = sFLGID; sBLTSIZE = sBLTSIZE.Replace("M", ""); val.BLTSIZE = sBLTSIZE; val.BLTNO = sBLTNO; val.BLTCENDST = sBLTCENDST; val.BLTBORE = sBLTBORE; m_ArrHdValue.Add(val); } }//end-while cmb_headdia.SelectedIndex = 0; fs.Close(); } catch (FieldAccessException ex) { } } private void Form_Steam_Load(object sender, EventArgs e) { this.KeyPreview = true; init(); string versionNumber = doc.Application.VersionNumber.ToString(); //txt_headhgt.Text = "1000"; //패밀리 기본값. //string Tmp = System.Reflection.Assembly.GetExecutingAssembly().Location; //Tmp = Tmp.Replace("\\KMBIM2019.dll", ""); string Tmp = Util.GetKMBIMLibraryFolder("Libraries\\Header"); m_Globepath = Tmp + "\\family\\"+versionNumber+"\\PV_Globe Valve - 40-200mm-Flanged.rfa"; m_Safepath = Tmp + "\\family\\"+versionNumber+"\\YSF-3(25-50).rfa"; txt_path1.Text = Path.GetFileName(m_Globepath); txt_path2.Text = Path.GetFileName(m_Safepath); //메인 헤더 높이 if (Reg.getReg("steam_headHgt") == "") { m_HeadHgt = Math.Round(m_HeadHgt, 3); txt_headhgt.Text = m_HeadHgt.ToString(); Reg.setReg("steam_headHgt", m_HeadHgt.ToString()); } else { string str_headHgt = Reg.getReg("steam_headHgt"); txt_headhgt.Text = str_headHgt; } //조작밸브 높이 if (Reg.getReg("steam_valveHgt") == "") { m_ValHgt = Math.Round(m_ValHgt, 3); txt_valveHgt.Text = m_ValHgt.ToString(); Reg.setReg("steam_valveHgt", m_ValHgt.ToString()); } else { string str_ValHgt = Reg.getReg("steam_valveHgt"); txt_valveHgt.Text = str_ValHgt; } //코일 시스템 유형 foreach (string str in HeaderSysTypeLst) { combo_SteamSysType.Items.Add(str); } //코일 시스템유형 없으면 기본값 지정 X if (combo_SteamSysType.Items.Count != 0) { if (Reg.getReg("combo_SteamSysType_Idx") == "") { combo_SteamSysType.SelectedIndex = 0; Reg.setReg("combo_SteamSysType_Idx", "0"); } else { string Str_combo_SupSysType = Reg.getReg("combo_SteamSysType_Idx"); //만약 저장된 레지스트리 인덱스값이 없으면 디폴트값으로 if (combo_SteamSysType.Items.Count - 1 >= Convert.ToInt32(Str_combo_SupSysType)) { combo_SteamSysType.SelectedIndex = Convert.ToInt32(Str_combo_SupSysType); } else { combo_SteamSysType.SelectedIndex = 0; Reg.setReg("combo_SteamSysType_Idx", "0"); } } } } private void btn_add_Click(object sender, EventArgs e) { if (cmb_pipedia.Text != "") list_Sup.Items.Add(cmb_pipedia.Text); SelectedSysTypeNameLst.Add(HeaderSysType); } private void btn_itemedit_Click(object sender, EventArgs e) { int index = list_Sup.SelectedIndex; list_Sup.Items[index] = cmb_pipedia.Text; } private void btn_itemadd_Click(object sender, EventArgs e) { if (cmb_pipedia.Text != "") list_Sup.Items.Add(cmb_pipedia.Text); SelectedSysTypeNameLst.Add(HeaderSysType); } private void btn_itemdel_Click(object sender, EventArgs e) { int index = list_Sup.SelectedIndex; list_Sup.Items.RemoveAt(index); SelectedSysTypeNameLst.RemoveAt(index); } private void button5_Click(object sender, EventArgs e) { int count = list_Sup.Items.Count; listboxcnt = count; dlst = new double[count]; if (count > 0) { for (int i = 0; i < count; i++) { object Tmp = list_Sup.Items[i]; dlst[i] = Convert.ToDouble(Tmp.ToString()); } } mainHeaderDia = Convert.ToDouble(cmb_headdia.Text); } private void Form_Steam_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { //this.Close(); this.DialogResult = DialogResult.Cancel; } else if (e.KeyCode == Keys.Enter) { this.DialogResult = DialogResult.OK; } } //메인 헤더 높이 private void txt_headhgt_TextChanged(object sender, EventArgs e) { if (txt_headhgt.Text == "") return; if (txt_headhgt.Text != "-") { m_HeadHgt = double.Parse(txt_headhgt.Text); Reg.setReg("steam_headHgt", txt_headhgt.Text); } } //조작 밸브 높이 private void txt_valveHgt_TextChanged(object sender, EventArgs e) { if (txt_valveHgt.Text == "") return; if (txt_valveHgt.Text != "-") { m_ValHgt = double.Parse(txt_valveHgt.Text); Reg.setReg("steam_valveHgt", txt_valveHgt.Text); } } private void txt_headhgt_KeyPress(object sender, KeyPressEventArgs e) { int keyCode = (int)e.KeyChar; if ((keyCode < 48 || keyCode > 57) && keyCode != 8 && keyCode != 46 && keyCode != 45) e.Handled = true; if (keyCode == 46) { if (string.IsNullOrEmpty(txt_headhgt.Text) || txt_headhgt.Text.Contains('.') == true) e.Handled = true; } } //글로브 밸브 대화상자 버튼 private void btn_path1_Click(object sender, EventArgs e) { string versionNumber = doc.Application.VersionNumber.ToString(); m_Globepath = GetFamilyPath(); if (m_Globepath != null) txt_path1.Text = Path.GetFileName(m_Globepath); else { //string Tmp = System.Reflection.Assembly.GetExecutingAssembly().Location; //Tmp = Tmp.Replace("\\KMBIM2019.dll", ""); string Tmp = Util.GetKMBIMLibraryFolder("Libraries\\Header"); m_Globepath = Tmp + "\\family\\" + versionNumber + "\\PV_Globe Valve - 40-200mm-Flanged.rfa"; txt_path1.Text = Path.GetFileName(m_Globepath); } } //안전 밸브 대화상자 버튼 private void btn_path2_Click(object sender, EventArgs e) { string versionNumber = doc.Application.VersionNumber.ToString(); m_Safepath = GetFamilyPath(); if (m_Safepath != null) txt_path2.Text = Path.GetFileName(m_Safepath); else { //string Tmp = System.Reflection.Assembly.GetExecutingAssembly().Location; //Tmp = Tmp.Replace("\\KMBIM2019.dll", ""); string Tmp = Util.GetKMBIMLibraryFolder("Libraries\\Header"); m_Safepath = Tmp + "\\family\\"+versionNumber+"\\YSF-3(25-50).rfa"; txt_path2.Text = Path.GetFileName(m_Safepath); } } private void combo_SteamSysType_SelectedIndexChanged(object sender, EventArgs e) { ICollection pipeSysTypes = new FilteredElementCollector(doc).OfClass(typeof(PipingSystemType)).ToElements(); foreach (Element elem in pipeSysTypes) { if (elem is PipingSystemType) { PipingSystemType pipeSysType = elem as PipingSystemType; //파이프 유형이름이 다르면 loop if (pipeSysType.Name != combo_SteamSysType.SelectedItem.ToString()) continue; //작도에 쓰일 pipetype Element HeaderSysType = pipeSysType; if (HeaderSysType != null) break; } } Reg.setReg("combo_SteamSysType_Idx", combo_SteamSysType.SelectedIndex.ToString()); } public string GetFamilyPath() { string versionNumber = doc.Application.VersionNumber.ToString(); string path = null; OpenFileDialog FileDlg = new OpenFileDialog(); FileDlg.InitialDirectory = "C:\\ProgramData\\DCS.CO.KR\\KMBIM\\Libraries\\Header\family\\"+versionNumber+"\\"; FileDlg.Filter = "rfa Files(*.rfa)|*.rfa|All Files(*.*)|*.*"; FileDlg.FilterIndex = 2; FileDlg.RestoreDirectory = true; if (FileDlg.ShowDialog() == DialogResult.OK) { if (FileDlg.FileName != null) { //확장자가 rfa가 아닐 경우 if (Path.GetExtension(FileDlg.FileName) != ".rfa") { MessageBox.Show("rfa 파일이 아닙니다."); } else { path = FileDlg.FileName; } } } return path; } } }