Client/Desktop/KMBIM3.0/23.10.16/Cmd/Calculation_pad/Form_Calpad.cs

2420 lines
82 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Autodesk.Revit.UI;
using System.IO;
using System.Collections;
using System.Text.RegularExpressions;
using Autodesk;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Plumbing;
using KDCS.Utils;
namespace KMBIM.Revit.Tools.Cmd.Calculation_pad
{
public partial class Form_Calpad : System.Windows.Forms.Form
{
public Autodesk.Revit.UI.UIApplication app;
List<long> m_ids = new List<long>();
List<double> m_cvalues = new List<double>();
//위생기구
List<string> m_strArrayName = new List<string>(); // 위생기구명
List<int> m_intName1 = new List<int>(); // 위생기구 색인
List<string> m_strArrayClass = new List<string>(); // 구분
List<string> m_strArrayCode = new List<string>(); // 단축명
List<double> m_dblArrayBore1 = new List<double>(); // 기구접속관경(급수)
List<double> m_dblArrayBore2 = new List<double>(); // 기구접속관경(급탕)
List<double> m_dblArrayBore3 = new List<double>(); // 기구접속관경(오배수)
List<double> m_dblArrayUse1 = new List<double>(); // 동시사용률(15파이관 상당수)
List<double> m_dblArrayUse2 = new List<double>(); // 동시사용률
List<double> m_dblArrayEql1 = new List<double>(); // 균등표(관경)
List<double> m_dblArrayEql2 = new List<double>(); // 균등표(15파이관 상당수)
List<double> m_dblArraySyncHall = new List<double>(); // 동시개구수(극장,체육관,집회장)
List<double> m_dblArraySyncOffice = new List<double>(); // 동시개구수(사무실,일반건물)
List<double> m_dblArraySyncBore = new List<double>(); // 상당수
List<double> m_dblArrayHWReturn = new List<double>(); // 환탕지관경
List<double> m_dblArrayHWSupply = new List<double>(); // 급탕지관경
List<double> m_dblArrayFU = new List<double>(); // 환탕지관경
List<double> m_dblArrayFUD = new List<double>(); // 급탕지관경
//급수급탕횡주관 및 입상관경표
List<double> m_dblArrayColBore = new List<double>(); // 관경
List<double> m_dblArrayColCWSupply = new List<double>(); // 급수관경
List<double> m_dblArrayColHWSupply = new List<double>(); // 급탕관경
// 오배수관의 횡지관경 선정표
List<double> m_dblArrayRowBore1 = new List<double>(); // 관경
List<double> m_dblArrayRowfuD1 = new List<double>(); // 기구배수부하단위
// 오배수관의 횡주관경 선정표
List<double> m_dblArrayRowBore2 = new List<double>(); // 관경
List<double> m_dblArrayRowfuD2 = new List<double>(); // 기구배수부하단위
// 오배수관의 입상관경 선정표
List<double> m_dblArrayRowBore3 = new List<double>(); // 관경
List<double> m_dblArrayRowfuD3 = new List<double>(); // 기구배수부하단위
// 급수지관
List<string> m_strArrayOfficeBore1 = new List<string>(); // 사무실 관경
List<string> m_strArrayHallBore1 = new List<string>(); // 극장 관경
// 급탕지관
List<string> m_strArrayOfficeBore2 = new List<string>(); // 사무실 관경
List<string> m_strArrayHallBore2 = new List<string>(); // 극장 관경
// 환탕지관의 관경선정표
List<string> m_strArrayOfficeBore3 = new List<string>(); // 사무실 관경
List<string> m_strArrayHallBore3 = new List<string>(); // 극장 관경
// 급수,급탕 횡주관 및 입상관경
List<string> m_strArrayColCWSupply = new List<string>(); // 사무실 관경
List<string> m_strArrayColHWSupply = new List<string>(); // 사무실 관경
// 오배수관의 횡지관경 선정표
List<string> m_strArrayRowfuD1 = new List<string>(); // 기구배수부하단위
// 오배수관의 횡주관경 선정표
List<string> m_strArrayRowfuD2 = new List<string>(); // 기구배수부하단위
// 오배수관의 입상관경 선정표
List<string> m_strArrayRowfuD3 = new List<string>(); // 기구배수부하단위
// 급수
double m_dblEqlNo1; // 균등수
double m_dblSyncUseRate1; // 동시사용률
double m_dblSyncOpenNo1; // 동시개구수
// 급탕
double m_dblEqlNo2; // 균등수
double m_dblSyncUseRate2; // 동시사용률
double m_dblSyncOpenNo2; // 동시개구수
// 오배수
double m_dblEqlNo3; // 균등수
double m_dblSyncUseRate3; // 동시사용률
double m_dblSyncOpenNo3; // 동시개구수
double m_dblFUCS; // 급수부하단위
double m_dblFUHS; // 급탕부하단위
double m_dblFUD; // 배수부하단위
int m_iCnt1; // 급수기구 갯수
int m_iCnt2; // 급탕기구 갯수
int m_iCnt3; // 오배수기구 갯수
int m_setDataInx;
int m_iBldType;
int m_iPipeType;
string m_strpath;
public int m_iCalmethoid = 0; // 계산 방법 1 이면 등속법 2이면 정압법
int m_inx1;
int m_inx2;
int inxKind;
public double DuctDia { get; set; }
public Form_Calpad()
{
InitializeComponent();
string Tmp = System.Reflection.Assembly.GetExecutingAssembly().Location;
m_strpath = Util.GetKMBIMLibraryFolder("\\Libraries\\CalPad\\MST");
//m_strpath = Tmp.Replace("\\KMBIM2019.dll", "");
m_inx1 = m_inx2 = inxKind = 0;
//덕트초기화
txt_aspect.Text = "1.5";
txt_width.Text = "0.0";
txt_height.Text = "0.0";
txt_vol.Text = "700";
txt_limit.Text = "500";
m_iCalmethoid = 2;
label3.Text = "풍속 :";
label4.Text = "m/sec";
tabControl1_SelectedIndexChanged(null, null);
btn_Continuous_velocity_Click(null, null);
// 파이프 초기화
txt_c.Text = "100";
txt_d.Text = "0.0";
txt_dd.Text = "0.0";
txt_i.Text = "20.0";
txt_q.Text = "100.0";
txt_s.Text = "";
SetPipeKind();
// 소방 초기화
txt_up.Text = "0";
txt_down.Text = "0";
txt_updown.Text = "0";
// 위생 초기화
//CreatePlbExcel();
GetExlData();
m_iBldType = 0;
m_iPipeType = 0;
cmb_bldtype.SelectedIndex = 0;
cmb_pipetype.SelectedIndex = 0;
m_setDataInx = 0;
m_iCnt1 = 0;
m_iCnt2 = 0;
m_iCnt3 = 0;
m_dblFUCS = 0;
m_dblFUHS = 0;
m_dblFUD = 0;
}
public void GetExlData()
{
//CDatabase database;
string strQuery;
string strFld, strPlbName, strClass, strCode;
string sDriver;
string sDsn;
// CDBVariant vVal;
listBox_name.Items.Clear();
m_strArrayName.Clear(); // 위생기구명
m_strArrayClass.Clear(); // 구분
m_strArrayCode.Clear(); // 단축명
m_dblArrayBore1.Clear(); // 기구접속관경(급수)
m_dblArrayBore2.Clear(); // 기구접속관경(급탕)
m_dblArrayBore3.Clear(); // 기구접속관경(오배수)
m_dblArrayUse1.Clear(); // 동시사용률(15파이관 상당수)
m_dblArrayUse2.Clear(); // 동시사용률
m_dblArrayEql1.Clear(); // 균등표(관경)
m_dblArrayEql2.Clear(); // 균등표(15파이관 상당수)
m_dblArraySyncHall.Clear(); // 동시개구수(극장,체육관,집회장)
m_dblArraySyncOffice.Clear(); // 동시개구수(사무실,일반건물)
m_dblArraySyncBore.Clear(); // 상당수
m_dblArrayHWReturn.Clear(); // 환탕지관경
m_dblArrayHWSupply.Clear(); // 급탕지관경
m_dblArrayFU.Clear(); // 기구급수부하단위
m_dblArrayFUD.Clear(); // 기구배수부하단위
//급수급탕횡주관 및 입상관경표
m_dblArrayColBore.Clear(); // 관경
m_dblArrayColCWSupply.Clear(); // 급수관경
m_dblArrayColHWSupply.Clear(); // 급탕관경
string strCSV;
string strCSVFile;
string s;
double dblVal;
//-------------------------------------------------------------------------------
strCSV = System.String.Format("\\plb_{0}.csv", "위생기구일람표");
strCSVFile = m_strpath + strCSV;
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
bool res = false;
csFileName = strCSVFile;
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 i = 0;
int iCnt = 0;
ArrayList csaFieldNames = new ArrayList();
// 위생기구명 구분 단축명 급수 급탕 오배수 상당관수 fu fuD
int[] nInx = new int[9];
while (sr.Peek() > -1)
{
string str = sr.ReadLine();
string[] arr = Regex.Split(str, ",\t");
if (arr.Length <= 0) break; // 이 문 없으면 죽는다.
if (i == 0)
{ // 필드레코드
i++;
for (int j = 0; j < arr.Length; j++)
{
csaFieldNames.Add(arr[j]);
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "위생기구명") == 0) nInx[0] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "구분") == 0) nInx[1] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "단축명") == 0) nInx[2] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "급수") == 0) nInx[3] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "급탕") == 0) nInx[4] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "오배수") == 0) nInx[5] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "상당관수") == 0) nInx[6] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "fu") == 0) nInx[7] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "fuD") == 0) nInx[8] = j;
}
continue;
}
i++;
// 각 해당 필드 데이타 출력
//0, 위생기구명
strPlbName = arr[0];
m_strArrayName.Add(strPlbName);
//1, 구분
strClass = arr[1];
iCnt += 1;
s = System.String.Format("{0},{1}({2})", iCnt, strPlbName, strClass);
listBox_name.Items.Add(s);
//2, 단축명
strCode = arr[2];
if (strCode == "-") strCode = "";
m_strArrayCode.Add(strCode);
//3, 급수
s = arr[3];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayBore1.Add(dblVal);
//4, 급탕
s = arr[4];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayBore2.Add(dblVal);
//5, 오배수
s = arr[5];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayBore3.Add(dblVal);
//6, 상당관수
//s=csaFields[4];
//if(s==_T("-")) dblVal=0.0;
//else dblVal=_wtof(s);
//7, fu
s = arr[7];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayFU.Add(dblVal);
//8, fuD
s = arr[8];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayFUD.Add(dblVal);
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
//pEx->ReportError();
MessageBox.Show(ex.Message);
}
// 동시사용률
//-------------------------------------------------------------------------------
strCSV = System.String.Format("\\plb_{0}.csv", "동시사용률");
strCSVFile = m_strpath + strCSV;
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
bool res = false;
csFileName = strCSVFile;
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 i = 0;
int iCnt = 0;
ArrayList csaFieldNames = new ArrayList();
// 상당수, 동시사용률
int[] nInx = new int[9];
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 (i == 0)
{ // 필드레코드
i++;
for (int j = 0; j < arr.Length; j++)
{
csaFieldNames.Add(arr[j]);
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "상당수") == 0) nInx[0] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "동시사용률") == 0) nInx[1] = j;
}
continue;
}
i++;
//0, 상당수
s = arr[0];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayUse1.Add(dblVal);
//1, 동시사용률
s = arr[1];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayUse2.Add(dblVal);
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
MessageBox.Show(ex.Message);
}
// 균등표
//-------------------------------------------------------------------------------
strCSV = System.String.Format("\\plb_{0}.csv", "균등표");
strCSVFile = m_strpath + strCSV;
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
bool res = false;
csFileName = strCSVFile;
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 i = 0;
int iCnt = 0;
ArrayList csaFieldNames = new ArrayList();
// 관경, 상당수
int[] nInx = new int[9];
while (sr.Peek() > -1)
{
string str = sr.ReadLine();
string[] arr = Regex.Split(str, ",\t");
if (arr.Length <= 0) break; // 이 문 없으면 죽는다.
if (i == 0)
{ // 필드레코드
i++;
for (int j = 0; j < arr.Length; j++)
{
csaFieldNames.Add(arr[j]);
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "관경") == 0) nInx[0] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "상당수") == 0) nInx[1] = j;
}
continue;
}
i++;
//0, 관경
s = arr[0];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayEql1.Add(dblVal);
//1, 상당수
s = arr[1];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayEql2.Add(dblVal);
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
MessageBox.Show(ex.Message);
}
//*************************************************************
// 급수급탕지관의관경선정표
//-------------------------------------------------------------------------------
strCSV = System.String.Format("\\plb_{0}.csv", "급수급탕지관의관경선정표");
strCSVFile = m_strpath + strCSV;
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
bool res = false;
csFileName = strCSVFile;
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 i = 0;
int iCnt = 0;
ArrayList csaFieldNames = new ArrayList();
// 상당수, 사무실, 극장
int[] nInx = new int[9];
while (sr.Peek() > -1)
{
string str = sr.ReadLine();
string[] arr = Regex.Split(str, ",\t");
if (arr.Length <= 0) break; // 이 문 없으면 죽는다.
if (i == 0)
{ // 필드레코드
i++;
for (int j = 0; j < arr.Length; j++)
{
csaFieldNames.Add(arr[j]);
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "상당수") == 0) nInx[0] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "사무실") == 0) nInx[1] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "극장") == 0) nInx[2] = j;
}
continue;
}
i++;
//0, 상당수
s = arr[0];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArraySyncBore.Add(dblVal);
//1, 사무실
s = arr[1];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArraySyncOffice.Add(dblVal);
//2, 극장
s = arr[2];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArraySyncHall.Add(dblVal);
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
MessageBox.Show(ex.Message);
}
//*************************************************************
// 환탕지관의 관경 선정표
//-------------------------------------------------------------------------------
strCSV = System.String.Format("\\plb_{0}.csv", "환탕지관의관경선정표");
strCSVFile = m_strpath + strCSV;
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
csFileName = strCSVFile;
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 i = 0;
int iCnt = 0;
ArrayList csaFieldNames = new ArrayList();
// 환탕지관경, 급탕지관경, 극장
int[] nInx = new int[9];
while (sr.Peek() > -1)
{
string str = sr.ReadLine();
string[] arr = Regex.Split(str, ",\t");
if (arr.Length <= 0) break; // 이 문 없으면 죽는다.
if (i == 0)
{ // 필드레코드
i++;
for (int j = 0; j < arr.Length; j++)
{
csaFieldNames.Add(arr[j]);
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "환탕지관경") == 0) nInx[0] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "급탕지관경") == 0) nInx[1] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "극장") == 0) nInx[2] = j;
}
continue;
}
i++;
//0, 환탕지관경
s = arr[0];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayHWReturn.Add(dblVal);
//1, 급탕지관경
s = arr[1];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayHWSupply.Add(dblVal);
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
MessageBox.Show(ex.Message);
}
//*************************************************************
// 급수급탕횡주관및입상관경표
//([관경],[부하급수],[부하급탕],[유량급수],[유량급탕],[유속급수],[유속급탕])
//-------------------------------------------------------------------------------
strCSV = System.String.Format("\\plb_{0}.csv", "급수급탕횡주관및입상관경표");
strCSVFile = m_strpath + strCSV;
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
csFileName = strCSVFile;
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 i = 0;
int iCnt = 0;
ArrayList csaFieldNames = new ArrayList();
// 관경, 부하급수, 부하급탕, 유량급수, 유량급탕, 유속급수, 유속급탕
int[] nInx = new int[9];
while (sr.Peek() > -1)
{
string str = sr.ReadLine();
string[] arr = Regex.Split(str, ",\t");
if (arr.Length <= 0) break; // 이 문 없으면 죽는다.
if (i == 0)
{ // 필드레코드
i++;
for (int j = 0; j < arr.Length; j++)
{
csaFieldNames.Add(arr[j]);
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "관경") == 0) nInx[0] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "부하급수") == 0) nInx[1] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "부하급탕") == 0) nInx[2] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "유량급수") == 0) nInx[3] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "유량급탕") == 0) nInx[4] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "유속급수") == 0) nInx[5] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "유속급탕") == 0) nInx[6] = j;
}
continue;
}
i++;
//0, 관경
s = arr[0];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayColBore.Add(dblVal);
//1, 부하급수
s = arr[1];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayColCWSupply.Add(dblVal);
//1, 부하급탕
s = arr[2];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayColHWSupply.Add(dblVal);
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
MessageBox.Show(ex.Message);
}
//*************************************************************
//strSheetName=_T("오배수관의횡지관경선정표");
//([관경],[fuD])
//-------------------------------------------------------------------------------
strCSV = System.String.Format("\\plb_{0}.csv", "오배수관의횡지관경선정표");
strCSVFile = m_strpath + strCSV;
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
csFileName = strCSVFile;
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 i = 0;
int iCnt = 0;
ArrayList csaFieldNames = new ArrayList();
// 관경, 부하급수, 부하급탕, 유량급수, 유량급탕, 유속급수, 유속급탕
int[] nInx = new int[9];
while (sr.Peek() > -1)
{
string str = sr.ReadLine();
string[] arr = Regex.Split(str, ",\t");
if (arr.Length <= 0) break; // 이 문 없으면 죽는다.
if (i == 0)
{ // 필드레코드
i++;
for (int j = 0; j < arr.Length; j++)
{
csaFieldNames.Add(arr[j]);
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "관경") == 0) nInx[0] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "fuD") == 0) nInx[1] = j;
}
continue;
}
i++;
//0, 관경
s = arr[0];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayRowBore1.Add(dblVal);
//1, fuD
s = arr[1];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayRowfuD1.Add(dblVal);
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
MessageBox.Show(ex.Message);
}
//*************************************************************
//strSheetName=_T("오배수관의횡주관경선정표");
//([관경],[fuD])
//-------------------------------------------------------------------------------
strCSV = System.String.Format("\\plb_{0}.csv", "오배수관의횡주관경선정표");
strCSVFile = m_strpath + strCSV;
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
csFileName = strCSVFile;
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 i = 0;
int iCnt = 0;
ArrayList csaFieldNames = new ArrayList();
// 관경, 부하급수, 부하급탕, 유량급수, 유량급탕, 유속급수, 유속급탕
int[] nInx = new int[9];
while (sr.Peek() > -1)
{
string str = sr.ReadLine();
string[] arr = Regex.Split(str, ",\t");
if (arr.Length <= 0) break; // 이 문 없으면 죽는다.
if (i == 0)
{ // 필드레코드
i++;
for (int j = 0; j < arr.Length; j++)
{
csaFieldNames.Add(arr[j]);
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "관경") == 0) nInx[0] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "fuD") == 0) nInx[1] = j;
}
continue;
}
i++;
//0, 관경
s = arr[0];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayRowBore2.Add(dblVal);
//1, fuD
s = arr[1];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayRowfuD2.Add(dblVal);
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
MessageBox.Show(ex.Message);
}
//*************************************************************
//strSheetName=_T("오배수관의입상관경선정표");
//([관경],[fuD])
//-------------------------------------------------------------------------------
strCSV = System.String.Format("\\plb_{0}.csv", "오배수관의입상관경선정표");
strCSVFile = m_strpath + strCSV;
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
csFileName = strCSVFile;
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 i = 0;
int iCnt = 0;
ArrayList csaFieldNames = new ArrayList();
// 관경, 부하급수, 부하급탕, 유량급수, 유량급탕, 유속급수, 유속급탕
int[] nInx = new int[9];
while (sr.Peek() > -1)
{
string str = sr.ReadLine();
string[] arr = Regex.Split(str, ",\t");
if (arr.Length <= 0) break; // 이 문 없으면 죽는다.
if (i == 0)
{ // 필드레코드
i++;
for (int j = 0; j < arr.Length; j++)
{
csaFieldNames.Add(arr[j]);
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "관경") == 0) nInx[0] = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "fuD") == 0) nInx[1] = j;
}
continue;
}
i++;
//0, 관경
s = arr[0];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayRowBore3.Add(dblVal);
//1, fuD
s = arr[1];
if (s == "-") dblVal = 0.0;
else dblVal = Convert.ToDouble(s);
m_dblArrayRowfuD3.Add(dblVal);
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
MessageBox.Show(ex.Message);
}
}
//전체 탭
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
if (tabControl1.SelectedIndex == 0)
{
radioButton1.Checked = true;
}
}
//////////////////////////////덕트///////////////////////////////////////
//덕트사이즈
private void DuctSize()
{
// UpdateData(TRUE);
double t, width, height, area, dia, aspect;
t = width = height = area = dia = aspect = 0.0;
bool flg = false;
aspect = txt_aspect.Text == "" ? 0 : Convert.ToDouble(txt_aspect.Text);
double loss = cmb_loss.Text == "" ? 0 : Convert.ToDouble(cmb_loss.Text);
double vol = txt_vol.Text == "" ? 0 : Convert.ToDouble(txt_vol.Text);
if (aspect <= 0 || loss <= 0 || vol <= 0) return;
// 원형덕트의 직경을 구한다.
if (m_iCalmethoid == 1)
{ // 등속법
dia = System.Math.Sqrt(vol / (3600.0 * loss * 3.14159)) * 2.0; // 풍속
dia = dia * 1000;
}
else if (m_iCalmethoid == 2)
{ // 정압법
dia = dia4rduct(vol, loss);
}//end-else
DuctDia = Math.Round(dia,0);
textBoxDe.Text = string.Format("{0}", DuctDia);
double m_dblWidth = 0.0;
double m_dblHeight = 0.0;
if (radioButton2.Checked == true)
{
m_dblWidth = normal(dia);
m_dblHeight = 0;
txt_width.Text = m_dblWidth.ToString();
txt_height.Text = m_dblHeight.ToString();
return;
}//end-if
// ********************************************************************
// 각형덕트의 폭과 높이를 구한다.
// ********************************************************************
do
{
t = System.Math.Pow(System.Math.Pow(aspect, 5.0) / System.Math.Pow(1.0 + aspect, 2.0), 1.0 / 8.0); // 상당직경
height = dia / (1.3 * t);
width = height * aspect;
area = height * width;
width = normal(width);
height = normal(area / width);
if (height > Convert.ToDouble(txt_limit.Text)) { aspect += 0.1; flg = true; } // Overflow limit(height)
else flg = false;
} while (flg);
m_dblWidth = width; // WIDTH
m_dblHeight = height; // HEIGHT
// 덕트높이가 폭보가 클 경우 교환
if (m_dblHeight > m_dblWidth)
{
width = m_dblWidth;
m_dblWidth = m_dblHeight;
m_dblHeight = width;
}//end-if
txt_width.Text = m_dblWidth.ToString();
txt_height.Text = m_dblHeight.ToString();
//OnCheckSetsize();
}
private double dia4rduct(double vol, double loss)
{
double a, b, dia;
//****************************************************************
// << Get a Dimeater of ROUND DUCT >>
// diameter unit : m
// vol (CMH) / 3,600 -> CMS */
// 1996. 2. 19 Modified & Fixed by Kwang-Sik Lee
//****************************************************************
a = 0.0019 * System.Math.Pow(vol / 3600.0, 1.90) / loss;
b = System.Math.Log10(a) / 5.03;
dia = System.Math.Pow(10.0, b) * 1000.0; // Unit: mm
return (dia);
}
private double normal(double val)
{
double add, quot, rem;
quot = System.Math.Floor(val / 100.0);
rem = val - quot * 100.0;
if (val > 100.0 && val < 150.0) val = 125.0;
else
{
if (rem >= 20 && rem < 70) add = 50;
else if (rem >= 70) add = 100;
else add = 0;
val = quot * 100 + add;
}//end-if-else
return val;
}
private void PipeSize()
{
double insDia = 0.0, dia = 0.0;
if (m_ids.Count() <= 0) return;
//UpdateData(TRUE);
double c, i, t, d, q;
q = txt_q.Text == "" ? 0 : Convert.ToDouble(txt_q.Text); // 유량(l/min)
i = txt_i.Text == "" ? 0 : Convert.ToDouble(txt_i.Text) / 1000; // 관장 1m당 마찰손실(mmAq/m) / 1000 -> mAq/m
c = txt_c.Text == "" ? 0 : Convert.ToDouble(txt_c.Text); // 유속계수
t = q / (1.67 * c * System.Math.Pow(i, 0.54) * 10000.0);
d = System.Math.Pow(10.0, System.Math.Log10(t) / 2.63); // 관의 안지름(m)
// 유속
double v, r, a;
r = d * 0.5;
a = (3.141592 * d * d) / 4.0; // 면적 m2
//a=3.141592*r*r; // 면적 m2
v = (q * 0.001 / a) / 60.0; // 1m3 --> 1000L
d = d * 1000.0; // m->mm
txt_s.Text = txt_c.Text == "0" ? "0" : System.String.Format("{0:F2}", v);
txt_pipedia.Text = txt_c.Text == "0" ? "1" : System.String.Format("{0:F0}", d);
string strCSV;
strCSV = System.String.Format("\\pipe_{0:D2}.csv", m_ids[inxKind]);
string strCSVFile = m_strpath + strCSV;
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
bool res = false;
csFileName = strCSVFile;
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;
ArrayList csaFieldNames = new ArrayList();
int iInside = 0, iPipeName = 0;
while (sr.Peek() > -1)
{
ArrayList csaFields = new ArrayList();
//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]);
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "INSIDE") == 0) iInside = j;
if (System.StringComparer.OrdinalIgnoreCase.Compare(arr[j], "PIPENAME") == 0) iPipeName = j;
}
continue;
}
ic++;
// 각 해당 필드 데이타 출력
insDia = Convert.ToDouble(arr[iInside]); // 내경
if (d <= insDia)
{
//AfxMessageBox(csaFields[iPipeName]);
dia = Convert.ToDouble(arr[iPipeName]); // 호칭경
break;
};
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
//pEx->ReportError();
}
txt_d.Text = insDia.ToString();
txt_dd.Text = dia.ToString();
}
private void SetPipeKind()
{
cmb_pipekind.Items.Clear();
try
{
long id;
FileStream fs = null;
string csFileName, csRecord;
string strPath;
bool res = false;
csFileName = m_strpath + "\\PipeCValue.csv";
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 i = 0;
ArrayList csaFieldNames = new ArrayList();
int iName = 0, iId = 0, iCValue = 0;
while (sr.Peek() > -1)
{
ArrayList csaFields = new ArrayList();
//SeparateString(csRecord, ref csaFields, ",\t\n");
string str = sr.ReadLine();
string[] arr = Regex.Split(str, ",\t");
if (arr.Length <= 0) break; // 이 문 없으면 죽는다.
if (i == 0)
{ // 필드레코드
i++;
for (int j = 0; j < arr.Length; j++)
{
csaFieldNames.Add(arr[j]);
if (arr[j].CompareTo("NAME") == 0) iName = j;
if (arr[j].CompareTo("ID") == 0) iId = j;
if (arr[j].CompareTo("CVALUE") == 0) iCValue = j;
}
continue;
}
i++;
// 각 해당 필드 데이타 출력
cmb_pipekind.Items.Add(arr[iName]);
id = Convert.ToInt64(arr[iId].ToString());
m_ids.Add(id);
double dVal = Convert.ToDouble(arr[iCValue]);
m_cvalues.Add(dVal);
}//end-while
fs.Close();
}
catch (FieldAccessException ex)
{
//ex.ReportError();
}
inxKind = 0;
cmb_pipekind.SelectedIndex = inxKind;
}
//등속법
private void btn_Continuous_velocity_Click(object sender, EventArgs e)
{
btn_Continuous_velocity.BackColor = System.Drawing.Color.Aqua;
btn_2.BackColor = System.Drawing.Color.White;
m_iCalmethoid = 1;
cmb_loss.Items.Clear();
cmb_loss.Items.Add("4");
cmb_loss.Items.Add("5");
cmb_loss.Items.Add("15");
cmb_loss.Items.Add("20");
cmb_loss.Items.Add("25");
cmb_loss.SelectedIndex = m_inx1;
label3.Text = "풍속:";
label4.Text = "m/sec";
DuctSize();
}
//정압법
private void btn_2_Click(object sender, EventArgs e)
{
btn_Continuous_velocity.BackColor = System.Drawing.Color.White;
btn_2.BackColor = System.Drawing.Color.Aqua;
m_iCalmethoid = 2;
cmb_loss.Items.Clear();
cmb_loss.Items.Add("0.07");
cmb_loss.Items.Add("0.1");
cmb_loss.Items.Add("0.15");
cmb_loss.SelectedIndex = m_inx2;
label3.Text = "마찰손실";
label4.Text = "mmAq/m";
DuctSize();
}
//각형
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
DuctSize();
}
//원형
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
DuctSize();
}
//풍량
private void txt_vol_TextChanged(object sender, EventArgs e)
{
if (txt_vol.Text == "") txt_vol.Text = "0";
DuctSize();
}
private void txt_vol_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back) || (e.KeyChar == '.')))
{
e.Handled = true;
}
}
//마찰손실
private void cmb_loss_SelectedIndexChanged(object sender, EventArgs e)
{
if (m_iCalmethoid == 0)
{
m_inx1 = cmb_loss.SelectedIndex;
}
else m_inx2 = cmb_loss.SelectedIndex;
DuctSize();
}
private void cmb_loss_TextChanged(object sender, EventArgs e)
{
if (cmb_loss.Text == "") cmb_loss.Text = "0";
DuctSize();
}
//종횡비
private void txt_aspect_TextChanged(object sender, EventArgs e)
{
if (txt_aspect.Text == "") txt_aspect.Text = "0";
DuctSize();
}
//최대 높이
private void txt_limit_TextChanged(object sender, EventArgs e)
{
if (txt_limit.Text == "") txt_limit.Text = "0";
DuctSize();
}
//////////////////////////////파이프///////////////////////////////////////
//관종
private void cmb_pipekind_SelectedIndexChanged(object sender, EventArgs e)
{
inxKind = cmb_pipekind.SelectedIndex;
txt_c.Text = m_cvalues[inxKind].ToString(); // 조도계수
PipeSize();
}
//유량
private void txt_q_TextChanged(object sender, EventArgs e)
{
if (txt_q.Text == "") txt_q.Text = "0";
PipeSize();
}
//마찰손실
private void txt_i_TextChanged(object sender, EventArgs e)
{
if (txt_i.Text == "") txt_i.Text = "0";
PipeSize();
}
//유속계수
private void txt_c_TextChanged(object sender, EventArgs e)
{
if (txt_c.Text == "") txt_c.Text = "0";
PipeSize();
}
//////////////////////////////소방///////////////////////////////////////
private void CalBore()
{
int up, dn, ud, hd_num;
up = txt_up.Text == "" ? 0 : Convert.ToInt32(txt_up.Text);
dn = txt_down.Text == "" ? 0 : Convert.ToInt32(txt_down.Text);
ud = txt_updown.Text == "" ? 0 : Convert.ToInt32(txt_updown.Text);
hd_num = up + dn + ud;
txt_bore.Text = "0";
if ((up > 0 && dn == 0 && ud == 0) || (dn > 0 && up == 0 && ud == 0))
{ // A
if (hd_num <= 2) txt_bore.Text = "25";
else if (hd_num <= 3) txt_bore.Text = "32";
else if (hd_num <= 5) txt_bore.Text = "40";
else if (hd_num <= 10) txt_bore.Text = "50";
else if (hd_num <= 30) txt_bore.Text = "65";
else if (hd_num <= 60) txt_bore.Text = "80";
else if (hd_num <= 80) txt_bore.Text = "90";
else if (hd_num <= 100) txt_bore.Text = "100";
else if (hd_num <= 160) txt_bore.Text = "125";
else txt_bore.Text = "150";
}
else if (ud > 0 || (ud > 0 && (up > 0 || dn > 0)))
{ // B
if (hd_num <= 2) txt_bore.Text = "25";
else if (hd_num <= 4) txt_bore.Text = "32";
else if (hd_num <= 7) txt_bore.Text = "40";
else if (hd_num <= 15) txt_bore.Text = "50";
else if (hd_num <= 30) txt_bore.Text = "65";
else if (hd_num <= 60) txt_bore.Text = "80";
else if (hd_num <= 65) txt_bore.Text = "90";
else if (hd_num <= 100) txt_bore.Text = "100";
else if (hd_num <= 160) txt_bore.Text = "125";
else txt_bore.Text = "150";
}
}
//상향
private void txt_up_TextChanged(object sender, EventArgs e)
{
if (txt_up.Text == "") txt_up.Text = "0";
CalBore();
}
//하향
private void txt_down_TextChanged(object sender, EventArgs e)
{
if (txt_updown.Text == "") txt_updown.Text = "0";
CalBore();
}
private void txt_updown_TextChanged(object sender, EventArgs e)
{
if (txt_updown.Text == "") txt_updown.Text = "0";
CalBore();
}
//////////////////////////////위생///////////////////////////////////////
// 선형보간법
private double Interpolation(double nCnt1, double syncUseRate1, double nCnt2, double syncUseRate2, double nCnt)
{
double dVal = syncUseRate1 + (syncUseRate2 - syncUseRate1) / (nCnt2 - nCnt1) * (nCnt - nCnt1);
return dVal;
}
private void AddPlbName(int inx)
{
string strName = System.String.Empty;
string s = String.Empty;
strName = System.String.Format("{0}", inx + 1);
m_intName1.Add(inx);
listBox_name1.Items.Add(strName);
//***************************************
// 급수관경 계산
//***************************************
// 배관용 탄소관 강관의 균등표
int iDur = 0;
int iInx = -1;
int iSize = m_dblArrayEql1.Count();
double dblBore = m_dblArrayBore1[inx];
if (dblBore > 0)
{
m_iCnt1 += 1;
m_dblFUCS += m_dblArrayFU[inx]; //급수용(fu)
int l;
l = m_dblArrayColCWSupply.Count();
for (int j = 0; j < l; j++)
{
if (m_dblFUCS < m_dblArrayColCWSupply[j])
{
s = String.Format("{0}", m_dblArrayColBore[j]);
m_strArrayColCWSupply.Add(s);
break;
}//end-if
}//end-for
}
else
{
s = "";
m_strArrayColCWSupply.Add(s);
}//end-if
for (iDur = 0; iDur < iSize; iDur++)
{
if (dblBore <= m_dblArrayEql1[iDur])
{
iInx = iDur;
break;
}//end-if
}//end-for
if (iInx > -1) m_dblEqlNo1 += m_dblArrayEql2[iInx]; //균등수
// 동시사용률
iInx = -1;
iSize = m_dblArrayUse1.Count();
for (iDur = 0; iDur < iSize; iDur++)
{
if (m_iCnt1 <= m_dblArrayUse1[iDur])
{
iInx = iDur;
break;
}//end-if
}//end-for
if (iInx > -1)
{
double n1, n2; // 상당수
m_dblSyncUseRate1 = m_dblArrayUse2[iInx];
if (iInx > 0)
{
n1 = m_dblArrayUse1[iInx - 1];
n2 = m_dblArrayUse1[iInx];
if (Math.Abs(n2 - n1) > 1)
{
m_dblSyncUseRate1 = Interpolation(n1, m_dblArrayUse2[iInx - 1], n2, m_dblArrayUse2[iInx], m_iCnt1);
}//end-if
}//end-if
}//end-if
// 동시개구수 = 균등수*동시사용률
m_dblSyncOpenNo1 = m_dblEqlNo1 * m_dblSyncUseRate1 / 100.0;
//ads_printf(_T("급수관 접속관경:%g, 균등수(%g)*동시사용률(%g)=동시개구수:%g\n"),dblBore,m_dblEqlNo1,m_dblSyncUseRate1,m_dblSyncOpenNo1);
// 관경 산정
string strBore = String.Empty;
string strBore1 = String.Empty;
iSize = m_dblArraySyncBore.Count();
for (iDur = 0; iDur < iSize; iDur++)
{
if (m_dblSyncOpenNo1 <= m_dblArraySyncOffice[iDur])
{
if (dblBore > 0) strBore = String.Format("{0}", m_dblArraySyncBore[iDur]);
else strBore = "";
m_strArrayOfficeBore1.Add(strBore);
break;
}//end-if
}//end-for
if (m_iBldType == 0) listBox_bore1.Items.Add(strBore);
// 체육관 극장
for (iDur = 0; iDur < iSize; iDur++)
{
if (m_dblSyncOpenNo1 <= m_dblArraySyncHall[iDur])
{
if (dblBore > 0) strBore = System.String.Format("{0}", m_dblArraySyncBore[iDur]);
else strBore = "";
m_strArrayHallBore1.Add(strBore);
break;
}//end-if
}//end-for
if (m_iBldType == 1) listBox_bore1.Items.Add(strBore);
//***************************************
// 급탕 관경 계산
//***************************************
// 배관용 탄소관 강관의 균등표
iDur = 0;
iInx = -1;
iSize = m_dblArrayEql1.Count();
dblBore = m_dblArrayBore2[inx];
if (dblBore > 0)
{
m_iCnt2 += 1;
m_dblFUCS += m_dblArrayFU[inx]; // 급탕용(fu)
for (iDur = 0; iDur < iSize; iDur++)
{
if (dblBore <= m_dblArrayEql1[iDur])
{
iInx = iDur;
break;
}//end-if
}//end-for
int l;
l = m_dblArrayColHWSupply.Count();
for (int j = 0; j < l; j++)
{
if (m_dblFUCS < m_dblArrayColHWSupply[j])
{
s = String.Format("{0}", m_dblArrayColBore[j]);
m_strArrayColHWSupply.Add(s);
break;
}//end-if
}//end-for
}
else
{
s = "";
m_strArrayColHWSupply.Add(s);
}//end-if-else
if (iInx > -1) m_dblEqlNo2 += m_dblArrayEql2[iInx]; //균등수
// 동시사용률
iInx = -1;
iSize = m_dblArrayUse1.Count();
for (iDur = 0; iDur < iSize; iDur++)
{
if (m_iCnt1 <= m_dblArrayUse1[iDur])
{
iInx = iDur;
break;
}//end-if
}//end-for
if (iInx > -1) m_dblSyncUseRate2 = m_dblArrayUse2[iInx];
// 동시개구수 = 균등수*동시사용률
m_dblSyncOpenNo2 = m_dblEqlNo2 * m_dblSyncUseRate2 / 100.0;
//ads_printf(_T("급탕관 접속관경:%g, 균등수(%g)*동시사용률(%g)=동시개구수:%g\n"),dblBore, m_dblEqlNo2,m_dblSyncUseRate2,m_dblSyncOpenNo2);
// 관경 산정
int iSize1;
iSize = m_dblArraySyncBore.Count();
//사무실 및 일반건물
for (iDur = 0; iDur < iSize; iDur++)
{
if (m_dblSyncOpenNo2 <= m_dblArraySyncOffice[iDur])
{
if (m_dblSyncOpenNo2 > 0 && dblBore > 0)
{
strBore = String.Format("{0}", m_dblArraySyncBore[iDur]);
// 환탕지관경
iSize1 = m_dblArrayHWSupply.Count();
for (int j = 0; j < iSize1; j++)
{
if (m_dblArraySyncBore[iDur] <= m_dblArrayHWSupply[j])
{
strBore1 = String.Format("{0}", m_dblArrayHWReturn[j]);
break;
}//end-if
}//end-for
}
else
{
strBore = "";
strBore1 = "";
}//end-if-else
m_strArrayOfficeBore2.Add(strBore);
m_strArrayOfficeBore3.Add(strBore1);
break;
}//end-if
}//end-for
if (m_iBldType == 0) listBox_bore2.Items.Add(strBore);
// 체육관,극장
iSize = m_dblArraySyncBore.Count();
for (iDur = 0; iDur < iSize; iDur++)
{
if (m_dblSyncOpenNo2 <= m_dblArraySyncHall[iDur])
{
if (m_dblSyncOpenNo2 > 0 && dblBore > 0)
{
strBore = String.Format("{0}", m_dblArraySyncBore[iDur]);
// 환탕지관경
iSize1 = m_dblArrayHWSupply.Count();
for (int j = 0; j < iSize1; j++)
{
if (m_dblArraySyncBore[iDur] <= m_dblArrayHWSupply[j])
{
strBore1 = String.Format("{0}", m_dblArrayHWReturn[j]);
break;
}//end-if
}//end-for
}
else
{
strBore = "";
strBore1 = "";
}//end-if-else
m_strArrayHallBore2.Add(strBore);
m_strArrayHallBore3.Add(strBore1);
break;
}//end-if
}//end-for
if (m_iBldType == 1) listBox_bore2.Items.Add(strBore);
//***************************************
// 오배수관 관경 계산
//***************************************
iDur = 0;
iInx = -1;
//iSize=m_dblArrayEql1.GetSize();
dblBore = m_dblArrayBore3[inx];
int i;
if (dblBore > 0)
{
m_dblFUD += m_dblArrayFUD[inx]; // 배수용(fuD)
iSize = m_dblArrayRowfuD1.Count();
for (i = 0; i < iSize; i++)
{
if (m_dblFUD <= m_dblArrayRowfuD1[i])
{
strBore = String.Format("{0}", m_dblArrayRowBore1[i]);
m_strArrayRowfuD1.Add(strBore);
break;
}//end-if
}//end-for
iSize = m_dblArrayRowfuD2.Count();
for (i = 0; i < iSize; i++)
{
if (m_dblFUD <= m_dblArrayRowfuD2[i])
{
strBore = String.Format("{0}", m_dblArrayRowBore2[i]);
m_strArrayRowfuD2.Add(strBore);
break;
}//end-if
}//end-for
iSize = m_dblArrayRowfuD3.Count();
for (i = 0; i < iSize; i++)
{
if (m_dblFUD <= m_dblArrayRowfuD3[i])
{
strBore = String.Format("{0}", m_dblArrayRowBore3[i]);
m_strArrayRowfuD3.Add(strBore);
break;
}//end-if
}//end-for
}
else
{
strBore = "";
m_strArrayRowfuD1.Add(strBore);
m_strArrayRowfuD2.Add(strBore);
m_strArrayRowfuD3.Add(strBore);
}//end-if
}
private void button2_Click(object sender, EventArgs e)
{
string[] strList = { "위생기구일람표", "동시사용률", "균등표", "급수급탕지관의관경선정표",
"환탕지관의관경선정표", "급수급탕횡주관및입상관경표", "오배수관의입상관경선정표",
"오배수관의횡주관경선정표", "오배수관의횡지관경선정표" };
string strCSV = System.String.Format("\\plb_{0}.csv", "위생기구일람표");
string strCSVFile = m_strpath + strCSV;
Form_SanitaryPipe dlg = new Form_SanitaryPipe();
dlg.ShowDialog();
}
private void listBox_name_MouseDoubleClick(object sender, MouseEventArgs e)
{
int inx = listBox_name.SelectedIndex;
AddPlbName(inx);
}
//콤보박스1
private void cmb_bldtype_SelectedIndexChanged(object sender, EventArgs e)
{
m_iBldType = cmb_bldtype.SelectedIndex;
OnSelchangeComboPipetype(null, null);
}
//콤보박스2
private void OnSelchangeComboPipetype(object sender, EventArgs e)
{
m_iPipeType = cmb_pipetype.SelectedIndex;
/*
급수,급탕지관
환탕지관
급수,급탕 횡주관/입상관
오배수관의 횡지관
오배수관의 횡주관
오배수관의 입상관
*/
listBox_bore1.Items.Clear();
listBox_bore2.Items.Clear();
int iSize, i;
switch (m_iPipeType)
{
case 0:
listBox_bore2.Show();
if (m_iBldType == 0)
{ // 사무실 및 일반건물
iSize = m_strArrayOfficeBore1.Count();
for (i = 0; i < iSize; i++)
{
listBox_bore1.Items.Add(m_strArrayOfficeBore1[i]);
}//end-for
iSize = m_strArrayOfficeBore2.Count();
for (i = 0; i < iSize; i++)
{
listBox_bore2.Items.Add(m_strArrayOfficeBore2[i]);
}//end-for
}
else
{ //체육관,극장,집회장
iSize = m_strArrayHallBore1.Count();
for (i = 0; i < iSize; i++)
{
listBox_bore1.Items.Add(m_strArrayHallBore1[i]);
}//end-for
iSize = m_strArrayHallBore2.Count();
for (i = 0; i < iSize; i++)
{
listBox_bore2.Items.Add(m_strArrayHallBore2[i]);
}//end-for
}
break;
case 1:
listBox_bore2.Hide();
if (m_iBldType == 0)
{
iSize = m_strArrayOfficeBore3.Count();
for (i = 0; i < iSize; i++)
{
listBox_bore1.Items.Add(m_strArrayOfficeBore3[i]);
}//end-for
}
else
{
iSize = m_strArrayHallBore3.Count();
for (i = 0; i < iSize; i++)
{
listBox_bore1.Items.Add(m_strArrayHallBore3[i]);
}//end-for
}//end-if-else
break;
case 2:
listBox_bore2.Show();
iSize = m_strArrayColCWSupply.Count();
for (i = 0; i < iSize; i++)
{
listBox_bore1.Items.Add(m_strArrayColCWSupply[i]);
listBox_bore2.Items.Add(m_strArrayColHWSupply[i]);
}//end-for
break;
case 3:
listBox_bore2.Hide();
iSize = m_strArrayRowfuD1.Count();
for (i = 0; i < iSize; i++)
{
listBox_bore1.Items.Add(m_strArrayRowfuD1[i]);
}//end-for
break;
case 4:
listBox_bore2.Hide();
iSize = m_strArrayRowfuD2.Count();
for (i = 0; i < iSize; i++)
{
listBox_bore1.Items.Add(m_strArrayRowfuD2[i]);
}//end-for
break;
case 5:
listBox_bore2.Hide();
iSize = m_strArrayRowfuD3.Count();
for (i = 0; i < iSize; i++)
{
listBox_bore1.Items.Add(m_strArrayRowfuD3[i]);
}//end-for
break;
}//end-switch
}
//Del 버튼
private void button3_Click(object sender, EventArgs e)
{
int inx = listBox_name1.SelectedIndex;
if (inx < 0) return;
m_intName1.RemoveAt(inx);
int len = m_intName1.Count();
string s;
List<int> Tmp = new List<int>();
for (int i = 0; i < len; i++)
{
Tmp.Add(m_intName1[i]);
}//end-for
OnButtonReset();
for (int i = 0; i < len; i++)
{
AddPlbName(Tmp[i]);
}//end-for
}
//Reset 버튼
private void button4_Click(object sender, EventArgs e)
{
OnButtonReset();
}
private void OnButtonReset()
{
// TODO: Add your control notification handler code here
listBox_name1.Items.Clear();
m_intName1.Clear();
// m_intName1.
listBox_bore1.Items.Clear();
listBox_bore2.Items.Clear();
// 급수
m_dblEqlNo1 = 0;
m_dblSyncUseRate1 = 0;
m_dblSyncOpenNo1 = 0;
m_iCnt1 = 0;
// 급탕
m_dblEqlNo2 = 0;
m_dblSyncUseRate2 = 0;
m_dblSyncOpenNo2 = 0;
m_iCnt2 = 0;
// 오배수
m_dblEqlNo2 = 0;
m_dblSyncUseRate3 = 0;
m_dblSyncOpenNo3 = 0;
m_iCnt3 = 0;
m_dblFUCS = 0; // 기구급수부하단위
m_dblFUHS = 0; // 기구급탕부하단위
m_dblFUD = 0; // 기구배수부하단위
// 급수지관
m_strArrayOfficeBore1.Clear(); // 사무실 관경
m_strArrayHallBore1.Clear(); // 극장 관경
// 급탕지관
m_strArrayOfficeBore2.Clear(); // 사무실 관경
m_strArrayHallBore2.Clear(); // 극장 관경
// 환탕지관
m_strArrayOfficeBore3.Clear(); // 사무실 관경
m_strArrayHallBore3.Clear(); // 극장 관경
// 급수,급탕 횡주관 및 입상관경
m_strArrayColCWSupply.Clear(); // 급수 관경
m_strArrayColHWSupply.Clear(); // 급탕 관경
//openDwg();
}
private void cmb_loss_DrawItem(object sender, DrawItemEventArgs e)
{
System.Windows.Forms.ComboBox cbx = sender as System.Windows.Forms.ComboBox;
if (cbx != null)
{
e.DrawBackground();
if (e.Index >= 0)
{
StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Near;
Brush brush = new SolidBrush(cbx.ForeColor);
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
brush = SystemBrushes.HighlightText;
e.Graphics.DrawString(cbx.Items[e.Index].ToString(), cbx.Font, brush, e.Bounds, sf);
}
}
}
private void cmb_loss_DrawItem_1(object sender, DrawItemEventArgs e)
{
System.Windows.Forms.ComboBox cbx = sender as System.Windows.Forms.ComboBox;
if (cbx != null)
{
// Always draw the background
e.DrawBackground();
// Drawing one of the items?
if (e.Index >= 0)
{
// Set the string alignment. Choices are Center, Near and Far
StringFormat sf = new StringFormat();
sf.LineAlignment = StringAlignment.Center;
sf.Alignment = StringAlignment.Far;
// Set the Brush to ComboBox ForeColor to maintain any ComboBox color settings
// Assumes Brush is solid
Brush brush = new SolidBrush(cbx.ForeColor);
// If drawing highlighted selection, change brush
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
brush = SystemBrushes.HighlightText;
// Draw the string
e.Graphics.DrawString(cbx.Items[e.Index].ToString(), cbx.Font, brush, e.Bounds, sf);
}
}
}
private void txt_width_TextChanged(object sender, EventArgs e)
{
double w = 0d;
double h = 0d;
double dia = 0d;
if (CalSize(ref w, ref h, ref dia))
{
DuctDia = Math.Round(dia, 0);
textBoxDe.Text = string.Format("{0}", Math.Round(dia, 0));
}
}
private void txt_height_TextChanged(object sender, EventArgs e)
{
double w = 0d;
double h = 0d;
double dia = 0d;
if (CalSize(ref w, ref h, ref dia))
{
DuctDia = Math.Round(dia, 0);
textBoxDe.Text = string.Format("{0}", Math.Round(dia, 0));
}
}
private bool CalSize(ref double w, ref double h, ref double dia)
{
bool bRC = false;
if (double.TryParse(txt_width.Text, out w) && double.TryParse(txt_height.Text, out h))
{
dia = 1.3 * (Math.Pow(w * h, 0.625) / Math.Pow(w + h, 0.25));
bRC = true;
}
return bRC;
}
private void textBoxDe_TextChanged(object sender, EventArgs e)
{
double dia = 0d;
if (double.TryParse(textBoxDe.Text, out dia))
{
DuctDia = Math.Round(dia,0);
}
}
private void label26_Click(object sender, EventArgs e)
{
}
private void txt_width1_TextChanged(object sender, EventArgs e)
{
double w = 0d;
double h = 0d;
double dia = 0d;
double dd = 0d;
double dia1 = 0d;
double minVal = double.MaxValue;
double dia_prev = 0d;
if (double.TryParse(txt_width1.Text, out w))
{
this.txt_height1.TextChanged -= txt_height1_TextChanged;
for (double h1 = 50d; h1 < 2050d; h1 += 50d)
{
dia = Math.Round(1.3 * (Math.Pow(w * h1, 0.625) / Math.Pow(w + h1, 0.25)), 0);
if (DuctDia >= dia_prev && DuctDia <= dia)
{
h = h1;
break;
}
dia_prev = dia + 1d;
}
this.txt_height1.Text = string.Format("{0}", h);
//textBoxAspectRatio1.Text = string.Format("{0}", Math.Round(w / h, 1));
this.txt_height1.TextChanged += txt_height1_TextChanged;
}
}
private void txt_height1_TextChanged(object sender, EventArgs e)
{
double w = 0d;
double h = 0d;
double dia = 0d;
double dd = 0d;
double dia1 = 0d;
double minVal = double.MaxValue;
double dia_prev = 0d;
if (double.TryParse(txt_height1.Text, out h))
{
this.txt_width1.TextChanged -= txt_width1_TextChanged;
for (double w1 = 50d; w1 < 2050d; w1 += 50d)
{
dia = Math.Round(1.3 * (Math.Pow(w1 * h, 0.625) / Math.Pow(w1 + h, 0.25)), 0);
if (DuctDia >= dia_prev && DuctDia <= dia)
{
w = w1;
break;
}
dia_prev = dia + 1d;
}
this.txt_width1.Text = string.Format("{0}", w);
//textBoxAspectRatio1.Text = string.Format("{0}", Math.Round(w / h, 1));
this.txt_width1.TextChanged += txt_width1_TextChanged;
}
}
private void Form_Calpad_Load(object sender, EventArgs e)
{
this.KeyPreview = true;
}
private void Form_Calpad_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.DialogResult = DialogResult.Cancel;
}
else if (e.KeyCode == Keys.Enter)
{
this.DialogResult = DialogResult.OK;
}
}
}
}