1328 lines
57 KiB
C#
1328 lines
57 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using Autodesk.Revit.DB;
|
|
using Autodesk.Revit.DB.Plumbing;
|
|
using Autodesk.Revit.UI;
|
|
using KDCS.Utils;
|
|
using KMBIM.Revit.Tools.Cmd.Assembly;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
|
|
namespace KMBIM
|
|
{
|
|
public partial class Form_Assembly : System.Windows.Forms.Form
|
|
{
|
|
public UIDocument m_uidoc = null;
|
|
public Document m_doc = null;
|
|
public AssemTblDataStorage AssemData = new AssemTblDataStorage();
|
|
|
|
public string m_AssemStr = null;
|
|
public int m_TypeIdx = 0, m_PartsComboIdx = 0, m_ValpartsIdx = 0, m_AssemblyIdx, m_AttachComboIdx = 0;
|
|
public double PipeDist = 0, Main2SubDist = 0, m_MainTotalDist = 0, m_SubTotalDist = 0;
|
|
public string m_partsName, m_AttachName;
|
|
public List<string> m_NonSymbolLst = new List<string>();
|
|
public List<KMBIM.AssemblyMain.Info_ValveSymbol> info_ValSymLst = new List<KMBIM.AssemblyMain.Info_ValveSymbol>();
|
|
public List<KMBIM.AssemblyMain.Info_AttachSymbol> info_AttSymLst = new List<KMBIM.AssemblyMain.Info_AttachSymbol>();
|
|
public List<string> NonNomRadLst = new List<string>();
|
|
public List<AssemblyData> m_MainDataLst = new List<AssemblyData>();
|
|
public List<AssemblyData> m_SubDataLst = new List<AssemblyData>();
|
|
public Pipe mainPipe = null;
|
|
public double subDia = 0;
|
|
|
|
|
|
public Form_Assembly()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void Form_Assembly_Load(object sender, EventArgs e)
|
|
{
|
|
this.KeyPreview = true;
|
|
|
|
//유형 라디오
|
|
Rad_Assem_Type1.Checked = true;
|
|
//메인 어셈블리
|
|
rad_Assem_Main.Checked = true;
|
|
//밸브 콤보박스 라디오
|
|
Rad_Assem_parts.Checked = true;
|
|
|
|
//밸브 콤보박스 값 넣기
|
|
foreach (KMBIM.AssemblyMain.Info_ValveSymbol infor in info_ValSymLst)
|
|
Combo_Assem_parts.Items.Add(infor.m_SymFamilyName);
|
|
|
|
//부품 콤보박스 값 넣기
|
|
foreach (KMBIM.AssemblyMain.Info_AttachSymbol infor in info_AttSymLst)
|
|
Combo_Assem_Attach.Items.Add(infor.m_AttSymFamilyName);
|
|
|
|
//배관 세그먼트 관경 가져오기
|
|
List<double> segLst = Util.GetPipeSegmentSizes(m_doc, mainPipe.PipeType.Name);
|
|
//코일 유형 변경시 관경도 리셋해야 함.
|
|
combo_Assem_PipeDia.Items.Clear();
|
|
foreach (double seg in segLst)
|
|
{
|
|
double bb = Math.Round(seg, 2);
|
|
combo_Assem_PipeDia.Items.Add(Math.Round(seg, 2));
|
|
}
|
|
|
|
//관경이 없으면 기본값 지정 X
|
|
if (combo_Assem_PipeDia.Items.Count != 0)
|
|
{
|
|
bool b_contain = combo_Assem_PipeDia.Items.Contains(Math.Round(Unit.FeetToMM(mainPipe.Diameter), 2));
|
|
int mainDiaIdx = combo_Assem_PipeDia.Items.IndexOf(Math.Round(Unit.FeetToMM(mainPipe.Diameter), 2));
|
|
combo_Assem_PipeDia.SelectedIndex = mainDiaIdx;
|
|
}
|
|
|
|
|
|
txt_Assem_Main2SubDist.Text = "500";
|
|
txt_Assem_MainTotal.Text = "0";
|
|
txt_Assem_SubTotal.Text = "0";
|
|
|
|
}
|
|
|
|
//어셈블리 명칭
|
|
private void txt_Assem_Name_TextChanged(object sender, EventArgs e)
|
|
{
|
|
m_AssemStr = txt_Assem_Name.Text;
|
|
}
|
|
|
|
//라디오 유형 두줄
|
|
private void Rad_Assem_Type1_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
m_TypeIdx = 0;
|
|
if (Rad_Assem_Type1.Checked == true)
|
|
{
|
|
rad_Assem_Sub.Enabled = true;
|
|
list_Assem_Sub.Enabled = true;
|
|
txt_Assem_Main2SubDist.Enabled = true;
|
|
}
|
|
}
|
|
//픽쳐박스 유형 두줄
|
|
private void pic_Assem_Type1_Click(object sender, EventArgs e)
|
|
{
|
|
Rad_Assem_Type1.Checked = true;
|
|
}
|
|
|
|
|
|
//라디오 유형 한줄
|
|
private void Rad_Assem_Type2_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
m_TypeIdx = 1;
|
|
if (Rad_Assem_Type2.Checked == true)
|
|
{
|
|
rad_Assem_Sub.Enabled = false;
|
|
list_Assem_Sub.Enabled = false;
|
|
txt_Assem_Main2SubDist.Enabled = false;
|
|
|
|
if (rad_Assem_Sub.Checked == true)
|
|
{
|
|
rad_Assem_Main.Checked = true;
|
|
rad_Assem_Sub.Checked = false;
|
|
list_Assem_Main.Enabled = true;
|
|
list_Assem_Sub.Enabled = false;
|
|
list_Assem_Sub.ClearSelected();
|
|
}
|
|
}
|
|
}
|
|
|
|
//픽쳐박스 유형 한줄
|
|
private void pic_Assem_Type2_Click(object sender, EventArgs e)
|
|
{
|
|
Rad_Assem_Type2.Checked = true;
|
|
}
|
|
|
|
|
|
//배관길이
|
|
private void txt_Assem_PipeDist_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (txt_Assem_PipeDist.Text == "")
|
|
return;
|
|
else
|
|
{
|
|
PipeDist = double.Parse(txt_Assem_PipeDist.Text);
|
|
//Reg.setReg("Assem_PipeDist", PipeDist.ToString());
|
|
}
|
|
}
|
|
|
|
//밸브 라디오버튼
|
|
private void Rad_Assem_parts_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
m_ValpartsIdx = 0;
|
|
if (Rad_Assem_parts.Checked == true)
|
|
{
|
|
Combo_Assem_parts.Enabled = true;
|
|
Combo_Assem_Attach.Enabled = false;
|
|
}
|
|
}
|
|
|
|
//밸브 콤보박스
|
|
private void Combo_Assem_parts_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
m_PartsComboIdx = Combo_Assem_parts.SelectedIndex;
|
|
if (Combo_Assem_parts.SelectedItem != null)
|
|
m_partsName = Combo_Assem_parts.SelectedItem.ToString();
|
|
}
|
|
|
|
//부속 라디오버튼
|
|
private void Rad_Assem_Attach_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
m_ValpartsIdx = 1;
|
|
if (Rad_Assem_Attach.Checked == true)
|
|
{
|
|
Combo_Assem_Attach.Enabled = true;
|
|
Combo_Assem_parts.Enabled = false;
|
|
}
|
|
}
|
|
|
|
//부속 콤보박스
|
|
private void Combo_Assem_Attach_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
m_AttachComboIdx = Combo_Assem_Attach.SelectedIndex;
|
|
if (Combo_Assem_Attach.SelectedItem != null)
|
|
m_AttachName = Combo_Assem_Attach.SelectedItem.ToString();
|
|
}
|
|
|
|
//추가 버튼
|
|
private void btn_Assem_Add_Click(object sender, EventArgs e)
|
|
{
|
|
AssemblyData MainDistdata = new AssemblyData();
|
|
AssemblyData MainSymdata = new AssemblyData();
|
|
AssemblyData SubDistdata = new AssemblyData();
|
|
AssemblyData SubSymdata = new AssemblyData();
|
|
|
|
if (m_AssemblyIdx == 0)//메인 어셈블리 리스트
|
|
{
|
|
if (Rad_Assem_parts.Checked == true)
|
|
{
|
|
//길이 파츠 값이 같이 있으면 둘다 추가
|
|
if (txt_Assem_PipeDist.Text != "" && Combo_Assem_parts.Text != "")
|
|
{
|
|
MainDistdata.AssemFamSymFamName = "";
|
|
MainDistdata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
MainDistdata.IsSymbol = false;
|
|
m_MainDataLst.Add(MainDistdata);
|
|
//리스트에 길이 추가
|
|
list_Assem_Main.Items.Add(txt_Assem_PipeDist.Text);
|
|
|
|
if (Combo_Assem_parts.Items.Contains(Combo_Assem_parts.Text) == true)
|
|
{
|
|
MainSymdata.AssemPipeDist = "";
|
|
MainSymdata.AssemFamSymFamName = Combo_Assem_parts.Text;
|
|
MainSymdata.IsSymbol = true;
|
|
m_MainDataLst.Add(MainSymdata);
|
|
//리스트에 심볼 추가
|
|
list_Assem_Main.Items.Add(Combo_Assem_parts.Text);
|
|
|
|
//NomRad 매개변수가 없는 심볼이 추가되면 메시지 뿌려줌.
|
|
foreach(string str in NonNomRadLst)
|
|
{
|
|
if(str == Combo_Assem_parts.Text)
|
|
{
|
|
MessageBox.Show("밸브 패밀리에 매개변수 'NomRad'가 존재하지 않습니다." +
|
|
"\n어셈블리 목록에 보라색으로 표시됩니다." +
|
|
"\n패밀리 편집기에서 반경 매개변수를 'NomRad'로 정의해 주시기 바랍니다.", "패밀리 오류");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
double totalDist = ListBoxTotalDist(list_Assem_Main);
|
|
txt_Assem_MainTotal.Text = totalDist.ToString();
|
|
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
MainDistdata.AssemFamSymFamName = "";
|
|
MainDistdata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
MainDistdata.IsSymbol = false;
|
|
m_MainDataLst.Add(MainDistdata);
|
|
//리스트에 길이 추가
|
|
list_Assem_Main.Items.Add(txt_Assem_PipeDist.Text);
|
|
|
|
double totalDist = ListBoxTotalDist(list_Assem_Main);
|
|
txt_Assem_MainTotal.Text = totalDist.ToString();
|
|
}
|
|
else if (Combo_Assem_parts.Text != "")
|
|
{
|
|
MainSymdata.AssemPipeDist = "";
|
|
MainSymdata.AssemFamSymFamName = Combo_Assem_parts.Text;
|
|
MainSymdata.IsSymbol = true;
|
|
m_MainDataLst.Add(MainSymdata);
|
|
//리스트에 심볼 추가
|
|
list_Assem_Main.Items.Add(Combo_Assem_parts.Text);
|
|
|
|
//NomRad 매개변수가 없는 심볼이 추가되면 메시지 뿌려줌.
|
|
foreach (string str in NonNomRadLst)
|
|
{
|
|
if (str == Combo_Assem_parts.Text)
|
|
{
|
|
MessageBox.Show("밸브 패밀리에 매개변수 'NomRad'가 존재하지 않습니다." +
|
|
"\n어셈블리 목록에 보라색으로 표시됩니다.", "심볼오류");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//값 초기화
|
|
txt_Assem_PipeDist.Text = "";
|
|
Combo_Assem_parts.Text = "";
|
|
|
|
}
|
|
else if (Rad_Assem_Attach.Checked == true)
|
|
{
|
|
//길이 파츠 값이 같이 있으면 둘다 추가
|
|
if (txt_Assem_PipeDist.Text != "" && Combo_Assem_Attach.Text != "")
|
|
{
|
|
MainDistdata.AssemFamSymFamName = "";
|
|
MainDistdata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
MainDistdata.IsSymbol = false;
|
|
m_MainDataLst.Add(MainDistdata);
|
|
//리스트에 길이 추가
|
|
list_Assem_Main.Items.Add(txt_Assem_PipeDist.Text);
|
|
|
|
if (Combo_Assem_Attach.Items.Contains(Combo_Assem_Attach.Text) == true)
|
|
{
|
|
MainSymdata.AssemPipeDist = "";
|
|
MainSymdata.AssemFamSymFamName = Combo_Assem_Attach.Text;
|
|
MainSymdata.IsSymbol = true;
|
|
m_MainDataLst.Add(MainSymdata);
|
|
//리스트에 심볼 추가
|
|
list_Assem_Main.Items.Add(Combo_Assem_Attach.Text);
|
|
}
|
|
|
|
double totalDist = ListBoxTotalDist(list_Assem_Main);
|
|
txt_Assem_MainTotal.Text = totalDist.ToString();
|
|
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
MainDistdata.AssemFamSymFamName = "";
|
|
MainDistdata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
MainDistdata.IsSymbol = false;
|
|
m_MainDataLst.Add(MainDistdata);
|
|
//리스트에 길이 추가
|
|
list_Assem_Main.Items.Add(txt_Assem_PipeDist.Text);
|
|
|
|
double totalDist = ListBoxTotalDist(list_Assem_Main);
|
|
txt_Assem_MainTotal.Text = totalDist.ToString();
|
|
}
|
|
else if (Combo_Assem_Attach.Text != "")
|
|
{
|
|
MainSymdata.AssemPipeDist = "";
|
|
MainSymdata.AssemFamSymFamName = Combo_Assem_Attach.Text;
|
|
MainSymdata.IsSymbol = true;
|
|
m_MainDataLst.Add(MainSymdata);
|
|
//리스트에 심볼 추가
|
|
list_Assem_Main.Items.Add(Combo_Assem_Attach.Text);
|
|
}
|
|
|
|
//값 초기화
|
|
txt_Assem_PipeDist.Text = "";
|
|
Combo_Assem_Attach.Text = "";
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
else//서브 어셈블리 리스트
|
|
{
|
|
if (Rad_Assem_parts.Checked == true)
|
|
{
|
|
//길이 파츠 값이 같이 있으면 둘다 추가
|
|
if (txt_Assem_PipeDist.Text != "" && Combo_Assem_parts.Text != "")
|
|
{
|
|
SubDistdata.AssemFamSymFamName = "";
|
|
SubDistdata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
SubDistdata.IsSymbol = false;
|
|
m_SubDataLst.Add(SubDistdata);
|
|
//리스트에 길이 추가
|
|
list_Assem_Sub.Items.Add(txt_Assem_PipeDist.Text);
|
|
|
|
if (Combo_Assem_parts.Items.Contains(Combo_Assem_parts.Text) == true)
|
|
{
|
|
SubSymdata.AssemPipeDist = "";
|
|
SubSymdata.AssemFamSymFamName = Combo_Assem_parts.Text;
|
|
SubSymdata.IsSymbol = true;
|
|
m_SubDataLst.Add(SubSymdata);
|
|
//리스트에 심볼 추가
|
|
list_Assem_Sub.Items.Add(Combo_Assem_parts.Text);
|
|
|
|
//NomRad 매개변수가 없는 심볼이 추가되면 메시지 뿌려줌.
|
|
foreach (string str in NonNomRadLst)
|
|
{
|
|
if (str == Combo_Assem_parts.Text)
|
|
{
|
|
MessageBox.Show("밸브 패밀리에 매개변수 'NomRad'가 존재하지 않습니다." +
|
|
"\n어셈블리 목록에 보라색으로 표시됩니다.", "심볼오류");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
double totalDist = ListBoxTotalDist(list_Assem_Sub);
|
|
txt_Assem_SubTotal.Text = totalDist.ToString();
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
SubDistdata.AssemFamSymFamName = "";
|
|
SubDistdata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
SubDistdata.IsSymbol = false;
|
|
m_SubDataLst.Add(SubDistdata);
|
|
//리스트에 길이 추가
|
|
list_Assem_Sub.Items.Add(txt_Assem_PipeDist.Text);
|
|
|
|
double totalDist = ListBoxTotalDist(list_Assem_Sub);
|
|
txt_Assem_SubTotal.Text = totalDist.ToString();
|
|
}
|
|
else if (Combo_Assem_parts.Text != "")
|
|
{
|
|
SubSymdata.AssemPipeDist = "";
|
|
SubSymdata.AssemFamSymFamName = Combo_Assem_parts.Text;
|
|
SubSymdata.IsSymbol = true;
|
|
m_SubDataLst.Add(SubSymdata);
|
|
//리스트에 심볼 추가
|
|
list_Assem_Sub.Items.Add(Combo_Assem_parts.Text);
|
|
|
|
//NomRad 매개변수가 없는 심볼이 추가되면 메시지 뿌려줌.
|
|
foreach (string str in NonNomRadLst)
|
|
{
|
|
if (str == Combo_Assem_parts.Text)
|
|
{
|
|
MessageBox.Show("밸브 패밀리에 매개변수 'NomRad'가 존재하지 않습니다." +
|
|
"\n어셈블리 목록에 보라색으로 표시됩니다.", "심볼오류");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//값 초기화
|
|
txt_Assem_PipeDist.Text = "";
|
|
Combo_Assem_parts.Text = "";
|
|
}
|
|
else if (Rad_Assem_Attach.Checked == true)
|
|
{
|
|
//길이 파츠 값이 같이 있으면 둘다 추가
|
|
if (txt_Assem_PipeDist.Text != "" && Combo_Assem_Attach.Text != "")
|
|
{
|
|
SubDistdata.AssemFamSymFamName = "";
|
|
SubDistdata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
SubDistdata.IsSymbol = false;
|
|
m_SubDataLst.Add(SubDistdata);
|
|
//리스트에 길이 추가
|
|
list_Assem_Sub.Items.Add(txt_Assem_PipeDist.Text);
|
|
|
|
if (Combo_Assem_Attach.Items.Contains(Combo_Assem_Attach.Text) == true)
|
|
{
|
|
SubSymdata.AssemPipeDist = "";
|
|
SubSymdata.AssemFamSymFamName = Combo_Assem_Attach.Text;
|
|
SubSymdata.IsSymbol = true;
|
|
m_SubDataLst.Add(SubSymdata);
|
|
//리스트에 심볼 추가
|
|
list_Assem_Sub.Items.Add(Combo_Assem_Attach.Text);
|
|
}
|
|
|
|
double totalDist = ListBoxTotalDist(list_Assem_Sub);
|
|
txt_Assem_SubTotal.Text = totalDist.ToString();
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
SubDistdata.AssemFamSymFamName = "";
|
|
SubDistdata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
SubDistdata.IsSymbol = false;
|
|
m_SubDataLst.Add(SubDistdata);
|
|
//리스트에 길이 추가
|
|
list_Assem_Sub.Items.Add(txt_Assem_PipeDist.Text);
|
|
|
|
double totalDist = ListBoxTotalDist(list_Assem_Sub);
|
|
txt_Assem_SubTotal.Text = totalDist.ToString();
|
|
}
|
|
else if (Combo_Assem_Attach.Text != "")
|
|
{
|
|
SubSymdata.AssemPipeDist = "";
|
|
SubSymdata.AssemFamSymFamName = Combo_Assem_Attach.Text;
|
|
SubSymdata.IsSymbol = true;
|
|
m_SubDataLst.Add(SubSymdata);
|
|
//리스트에 심볼 추가
|
|
list_Assem_Sub.Items.Add(Combo_Assem_Attach.Text);
|
|
}
|
|
|
|
//값 초기화
|
|
txt_Assem_PipeDist.Text = "";
|
|
Combo_Assem_Attach.Text = "";
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//라디오 메인 어셈블리
|
|
private void rad_Assem_Main_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
m_AssemblyIdx = 0;
|
|
list_Assem_Main.Enabled = true;
|
|
list_Assem_Sub.Enabled = false;
|
|
list_Assem_Sub.ClearSelected();
|
|
}
|
|
//라디오 서브 어셈블리
|
|
private void rad_Assem_Sub_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
m_AssemblyIdx = 1;
|
|
list_Assem_Main.Enabled = false;
|
|
list_Assem_Sub.Enabled = true;
|
|
list_Assem_Main.ClearSelected();
|
|
}
|
|
|
|
//메인과 서브 사이 간격
|
|
private void txt_Assem_Main2SubDist_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (txt_Assem_Main2SubDist.Text == "")
|
|
return;
|
|
else
|
|
{
|
|
Main2SubDist = double.Parse(txt_Assem_Main2SubDist.Text);
|
|
Reg.setReg("Assem_Main2SubDist", Main2SubDist.ToString());
|
|
}
|
|
}
|
|
|
|
//편집 삭제
|
|
private void btm_Assem_Delete_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
//메인 어셈블리
|
|
if (m_AssemblyIdx == 0)
|
|
{
|
|
int m_selidx = list_Assem_Main.SelectedIndex;
|
|
list_Assem_Main.Items.RemoveAt(m_selidx);
|
|
m_MainDataLst.RemoveAt(m_selidx);
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Main);
|
|
txt_Assem_MainTotal.Text = totalDist.ToString();
|
|
}
|
|
else//서브 어셈블리
|
|
{
|
|
int m_selidx = list_Assem_Sub.SelectedIndex;
|
|
list_Assem_Sub.Items.RemoveAt(m_selidx);
|
|
m_SubDataLst.RemoveAt(m_selidx);
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Sub);
|
|
txt_Assem_SubTotal.Text = totalDist.ToString();
|
|
}
|
|
}
|
|
|
|
//편집 삽입
|
|
private void btm_Assem_Insert_Click(object sender, EventArgs e)
|
|
{
|
|
//메인 어셈블리
|
|
if (m_AssemblyIdx == 0)
|
|
{
|
|
int m_selidx = list_Assem_Main.SelectedIndex;
|
|
if (Rad_Assem_parts.Checked == true)//밸브 라디오 버튼일 때
|
|
{
|
|
//콤보박스와 거리 값 두개다 존재하고 수정하면 작동 안되도록
|
|
if (Combo_Assem_parts.Text != "" && txt_Assem_PipeDist.Text != "") { }
|
|
else
|
|
{
|
|
if (Combo_Assem_parts.Text != "")
|
|
{
|
|
list_Assem_Main.Items.Insert(m_selidx, Combo_Assem_parts.Text);
|
|
AssemblyData Maindata = new AssemblyData();
|
|
Maindata.AssemPipeDist = "";
|
|
Maindata.AssemFamSymFamName = Combo_Assem_parts.Text;
|
|
Maindata.IsSymbol = true;
|
|
m_MainDataLst.Insert(m_selidx, Maindata);
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
list_Assem_Main.Items.Insert(m_selidx, txt_Assem_PipeDist.Text);
|
|
AssemblyData Maindata = new AssemblyData();
|
|
Maindata.AssemFamSymFamName = "";
|
|
Maindata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
Maindata.IsSymbol = false;
|
|
m_MainDataLst.Insert(m_selidx, Maindata);
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Main);
|
|
txt_Assem_MainTotal.Text = totalDist.ToString();
|
|
}
|
|
|
|
}
|
|
}
|
|
else if (Rad_Assem_Attach.Checked == true)//부속 라디오 버튼일 때
|
|
{
|
|
//콤보박스와 거리 값 두개다 존재하고 수정하면 작동 안되도록
|
|
if (Combo_Assem_Attach.Text != "" && txt_Assem_PipeDist.Text != "") { }
|
|
else
|
|
{
|
|
if (Combo_Assem_Attach.Text != "")
|
|
{
|
|
list_Assem_Main.Items.Insert(m_selidx, Combo_Assem_Attach.Text);
|
|
AssemblyData Maindata = new AssemblyData();
|
|
Maindata.AssemPipeDist = "";
|
|
Maindata.AssemFamSymFamName = Combo_Assem_Attach.Text;
|
|
Maindata.IsSymbol = true;
|
|
m_MainDataLst.Insert(m_selidx, Maindata);
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
list_Assem_Main.Items.Insert(m_selidx, txt_Assem_PipeDist.Text);
|
|
AssemblyData Maindata = new AssemblyData();
|
|
Maindata.AssemFamSymFamName = "";
|
|
Maindata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
Maindata.IsSymbol = false;
|
|
m_MainDataLst.Insert(m_selidx, Maindata);
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Main);
|
|
txt_Assem_MainTotal.Text = totalDist.ToString();
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
else//서브 어셈블리
|
|
{
|
|
int m_selidx = list_Assem_Sub.SelectedIndex;
|
|
if (Rad_Assem_parts.Checked == true)//밸브 라디오 버튼일 떄
|
|
{
|
|
//콤보박스와 거리 값 두개다 존재하고 수정하면 작동 안되도록
|
|
if (Combo_Assem_parts.Text != "" && txt_Assem_PipeDist.Text != "") { }
|
|
else
|
|
{
|
|
if (Combo_Assem_parts.Text != "")
|
|
{
|
|
list_Assem_Sub.Items.Insert(m_selidx, Combo_Assem_parts.Text);
|
|
AssemblyData Subdata = new AssemblyData();
|
|
Subdata.AssemPipeDist = "";
|
|
Subdata.AssemFamSymFamName = Combo_Assem_parts.Text;
|
|
Subdata.IsSymbol = true;
|
|
m_SubDataLst.Insert(m_selidx, Subdata);
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
list_Assem_Sub.Items.Insert(m_selidx, txt_Assem_PipeDist.Text);
|
|
AssemblyData Subdata = new AssemblyData();
|
|
Subdata.AssemFamSymFamName = "";
|
|
Subdata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
Subdata.IsSymbol = false;
|
|
m_SubDataLst.Insert(m_selidx, Subdata);
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Sub);
|
|
txt_Assem_SubTotal.Text = totalDist.ToString();
|
|
}
|
|
|
|
}
|
|
}
|
|
else if (Rad_Assem_Attach.Checked == true)//부속 라디오버튼일 때
|
|
{
|
|
//콤보박스와 거리 값 두개다 존재하고 수정하면 작동 안되도록
|
|
if (Combo_Assem_Attach.Text != "" && txt_Assem_PipeDist.Text != "") { }
|
|
else
|
|
{
|
|
if (Combo_Assem_Attach.Text != "")
|
|
{
|
|
list_Assem_Sub.Items.Insert(m_selidx, Combo_Assem_Attach.Text);
|
|
AssemblyData Subdata = new AssemblyData();
|
|
Subdata.AssemPipeDist = "";
|
|
Subdata.AssemFamSymFamName = Combo_Assem_Attach.Text;
|
|
Subdata.IsSymbol = true;
|
|
m_SubDataLst.Insert(m_selidx, Subdata);
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
list_Assem_Sub.Items.Insert(m_selidx, txt_Assem_PipeDist.Text);
|
|
AssemblyData Subdata = new AssemblyData();
|
|
Subdata.AssemFamSymFamName = "";
|
|
Subdata.AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
Subdata.IsSymbol = false;
|
|
m_SubDataLst.Insert(m_selidx, Subdata);
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Sub);
|
|
txt_Assem_SubTotal.Text = totalDist.ToString();
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
//편집 수정
|
|
private void btm_Assem_Edit_Click(object sender, EventArgs e)
|
|
{
|
|
//메인 어셈블리
|
|
if (m_AssemblyIdx == 0)
|
|
{
|
|
int m_selidx = list_Assem_Main.SelectedIndex;
|
|
if (Rad_Assem_parts.Checked == true)//밸브 라디오 버튼일 때
|
|
{
|
|
//콤보박스와 거리 값 두개다 존재하고 수정하면 작동 안되도록
|
|
if (Combo_Assem_parts.Text != "" && txt_Assem_PipeDist.Text != "") { }
|
|
else
|
|
{
|
|
if (Combo_Assem_parts.Text != "")
|
|
{
|
|
list_Assem_Main.Items[m_selidx] = Combo_Assem_parts.Text;
|
|
m_MainDataLst.ElementAt(m_selidx).AssemFamSymFamName = Combo_Assem_parts.Text;
|
|
m_MainDataLst.ElementAt(m_selidx).AssemPipeDist = "";
|
|
m_MainDataLst.ElementAt(m_selidx).IsSymbol = true;
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
list_Assem_Main.Items[m_selidx] = txt_Assem_PipeDist.Text;
|
|
m_MainDataLst.ElementAt(m_selidx).AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
m_MainDataLst.ElementAt(m_selidx).AssemFamSymFamName = "";
|
|
m_MainDataLst.ElementAt(m_selidx).IsSymbol = false;
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Main);
|
|
txt_Assem_MainTotal.Text = totalDist.ToString();
|
|
}
|
|
}
|
|
}
|
|
else if (Rad_Assem_Attach.Checked == true)//부속 라디오 버튼일 때
|
|
{
|
|
//콤보박스와 거리 값 두개다 존재하고 수정하면 작동 안되도록
|
|
if (Combo_Assem_Attach.Text != "" && txt_Assem_PipeDist.Text != "") { }
|
|
else
|
|
{
|
|
if (Combo_Assem_Attach.Text != "")
|
|
{
|
|
list_Assem_Main.Items[m_selidx] = Combo_Assem_Attach.Text;
|
|
m_MainDataLst.ElementAt(m_selidx).AssemFamSymFamName = Combo_Assem_Attach.Text;
|
|
m_MainDataLst.ElementAt(m_selidx).AssemPipeDist = "";
|
|
m_MainDataLst.ElementAt(m_selidx).IsSymbol = true;
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
list_Assem_Main.Items[m_selidx] = txt_Assem_PipeDist.Text;
|
|
m_MainDataLst.ElementAt(m_selidx).AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
m_MainDataLst.ElementAt(m_selidx).AssemFamSymFamName = "";
|
|
m_MainDataLst.ElementAt(m_selidx).IsSymbol = false;
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Main);
|
|
txt_Assem_MainTotal.Text = totalDist.ToString();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
else//서브 어셈블리
|
|
{
|
|
int m_selidx = list_Assem_Sub.SelectedIndex;
|
|
|
|
if (Rad_Assem_parts.Checked == true)//밸브 라디오 버튼일 때
|
|
{
|
|
//콤보박스와 거리 값 두개다 존재하고 수정하면 작동 안되도록
|
|
if (Combo_Assem_parts.Text != "" && txt_Assem_PipeDist.Text != "") { }
|
|
else
|
|
{
|
|
if (Combo_Assem_parts.Text != "")
|
|
{
|
|
list_Assem_Sub.Items[m_selidx] = Combo_Assem_parts.Text;
|
|
m_SubDataLst.ElementAt(m_selidx).AssemFamSymFamName = Combo_Assem_parts.Text;
|
|
m_SubDataLst.ElementAt(m_selidx).AssemPipeDist = "";
|
|
m_SubDataLst.ElementAt(m_selidx).IsSymbol = true;
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
list_Assem_Sub.Items[m_selidx] = txt_Assem_PipeDist.Text;
|
|
m_SubDataLst.ElementAt(m_selidx).AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
m_SubDataLst.ElementAt(m_selidx).AssemFamSymFamName = "";
|
|
m_SubDataLst.ElementAt(m_selidx).IsSymbol = false;
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Sub);
|
|
txt_Assem_SubTotal.Text = totalDist.ToString();
|
|
}
|
|
}
|
|
}
|
|
else if (Rad_Assem_Attach.Checked == true)// 부속 라디오 버튼일 때
|
|
{
|
|
//콤보박스와 거리 값 두개다 존재하고 수정하면 작동 안되도록
|
|
if (Combo_Assem_Attach.Text != "" && txt_Assem_PipeDist.Text != "") { }
|
|
else
|
|
{
|
|
if (Combo_Assem_Attach.Text != "")
|
|
{
|
|
list_Assem_Sub.Items[m_selidx] = Combo_Assem_Attach.Text;
|
|
m_SubDataLst.ElementAt(m_selidx).AssemFamSymFamName = Combo_Assem_Attach.Text;
|
|
m_SubDataLst.ElementAt(m_selidx).AssemPipeDist = "";
|
|
m_SubDataLst.ElementAt(m_selidx).IsSymbol = true;
|
|
}
|
|
else if (txt_Assem_PipeDist.Text != "")
|
|
{
|
|
list_Assem_Sub.Items[m_selidx] = txt_Assem_PipeDist.Text;
|
|
m_SubDataLst.ElementAt(m_selidx).AssemPipeDist = txt_Assem_PipeDist.Text;
|
|
m_SubDataLst.ElementAt(m_selidx).AssemFamSymFamName = "";
|
|
m_SubDataLst.ElementAt(m_selidx).IsSymbol = false;
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Sub);
|
|
txt_Assem_SubTotal.Text = totalDist.ToString();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
//패밀리 로드 버튼
|
|
private void btm_Assem_FamLoad_Click(object sender, EventArgs e)
|
|
{
|
|
string versionNumber = m_doc.Application.VersionNumber.ToString();
|
|
string location = Util.GetKMBIMLibraryFolder("Libraries\\Assembly\\" + versionNumber);
|
|
|
|
OpenFileDialog openFileDialog = new OpenFileDialog();
|
|
openFileDialog.Filter = "rfa|*.rfa";
|
|
openFileDialog.Title = "Load Family File";
|
|
openFileDialog.InitialDirectory = location;
|
|
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
if (openFileDialog.FileName != "")
|
|
{
|
|
string FileName = Path.GetFileNameWithoutExtension(openFileDialog.FileName);
|
|
//MessageBox.Show(FileName);
|
|
|
|
FamilySymbol famSym = Util.getNameByFamily(m_doc, FileName);
|
|
if (famSym == null)
|
|
{
|
|
//로드 되지 않은 패밀리 리스트 중 로드할 패밀리 삭제
|
|
m_NonSymbolLst.Remove(FileName);
|
|
//해당 패밀리 로드
|
|
FamilySymbol sym = null;
|
|
using (Transaction trans = new Transaction(m_doc))
|
|
{
|
|
trans.Start("LoadFamily");
|
|
sym = Util.LoadFamilys(m_doc, openFileDialog.FileName);
|
|
trans.Commit();
|
|
}
|
|
|
|
if (sym.Category.Id.IntegerValue == (int)BuiltInCategory.OST_PipeAccessory)
|
|
{
|
|
//밸브 콤보박스에 로드한 패밀리
|
|
Combo_Assem_parts.Items.Add(FileName);
|
|
}
|
|
else if (sym.Category.Id.IntegerValue == (int)BuiltInCategory.OST_PipeFitting)
|
|
{
|
|
//부속 콤보박스에 로드한 패밀리
|
|
Combo_Assem_Attach.Items.Add(FileName);
|
|
}
|
|
|
|
|
|
//현재 활성화 된 메인/서브 리스트의 이름을 찾아 색상 idx를 변경하여 DrawItem 이벤트로 색상 변경
|
|
if (m_AssemblyIdx == 0)
|
|
{
|
|
int FamIdx =list_Assem_Main.Items.IndexOf(FileName);
|
|
list_Assem_Main.SelectedIndex = FamIdx;
|
|
//list_Assem_Main.SelectedIndexChanged += list_Assem_Main_SelectedIndexChanged;
|
|
}
|
|
else if (m_AssemblyIdx == 1)
|
|
{
|
|
int FamIdx = list_Assem_Sub.Items.IndexOf(FileName);
|
|
list_Assem_Sub.SelectedIndex = FamIdx;
|
|
}
|
|
|
|
int FileIdx = list_Assem_Main.FindString(FileName);
|
|
|
|
//if (tmp_nonSymLst.Contains(main.AssemFamSymFamName) == false)
|
|
//{
|
|
// tmp_nonSymLst += ("- " + main.AssemFamSymFamName + "\n");
|
|
// m_NonSymbolLst.Add(main.AssemFamSymFamName);
|
|
//}
|
|
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("패밀리가 이미 로드되어 있습니다.");
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
//메인 어셈블리 리스트박스
|
|
private void list_Assem_Main_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (m_AssemblyIdx == 0 && list_Assem_Main.SelectedIndex != -1)
|
|
{
|
|
int selListIdx = list_Assem_Main.SelectedIndex;
|
|
string SelName = list_Assem_Main.SelectedItem.ToString();
|
|
//선택한 리스트가 숫자인지 확인
|
|
double selDouble = 0;
|
|
bool b_num = double.TryParse(SelName, out selDouble);
|
|
//숫자면 배관길이에 선택한 값 넣기.
|
|
if (b_num)
|
|
{
|
|
txt_Assem_PipeDist.Text = SelName;
|
|
Combo_Assem_parts.Text = "";
|
|
Combo_Assem_Attach.Text = "";
|
|
}
|
|
else//숫자가 아니면 부품 콤보박스에서 선택한 값 찾아 넣기.
|
|
{
|
|
int PartsSelComboIdx = Combo_Assem_parts.FindString(SelName);
|
|
if (PartsSelComboIdx != -1)
|
|
{
|
|
Rad_Assem_parts.Checked = true;
|
|
Combo_Assem_parts.Text = SelName;
|
|
txt_Assem_PipeDist.Text = "";
|
|
Combo_Assem_Attach.Text = "";
|
|
}
|
|
int AttSelComboIdx = Combo_Assem_Attach.FindString(SelName);
|
|
if (AttSelComboIdx != -1)
|
|
{
|
|
Rad_Assem_Attach.Checked = true;
|
|
Combo_Assem_Attach.Text = SelName;
|
|
txt_Assem_PipeDist.Text = "";
|
|
Combo_Assem_parts.Text = "";
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
//서브 어셈블리 관경
|
|
private void combo_Assem_PipeDia_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
subDia = double.Parse(combo_Assem_PipeDia.SelectedItem.ToString());
|
|
}
|
|
|
|
//서브 어셈블리 리스트박스
|
|
private void list_Assem_Sub_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (m_AssemblyIdx == 1 && list_Assem_Sub.SelectedIndex != -1)
|
|
{
|
|
int selListIdx = list_Assem_Sub.SelectedIndex;
|
|
string SelName = list_Assem_Sub.SelectedItem.ToString();
|
|
//선택한 리스트가 숫자인지 확인
|
|
double selDouble = 0;
|
|
bool b_num = double.TryParse(SelName, out selDouble);
|
|
//숫자면 배관길이에 선택한 값 넣기.
|
|
if (b_num)
|
|
{
|
|
txt_Assem_PipeDist.Text = SelName;
|
|
Combo_Assem_parts.Text = "";
|
|
}
|
|
else//숫자가 아니면 부품 콤보박스에서 선택한 값 찾아 넣기.
|
|
{
|
|
if (Rad_Assem_parts.Checked == true)
|
|
{
|
|
int SelComboIdx = Combo_Assem_parts.FindString(SelName);
|
|
if (SelComboIdx != -1)
|
|
{
|
|
Combo_Assem_parts.Text = SelName;
|
|
txt_Assem_PipeDist.Text = "";
|
|
}
|
|
}
|
|
else if (Rad_Assem_Attach.Checked == true)
|
|
{
|
|
int SelComboIdx = Combo_Assem_Attach.FindString(SelName);
|
|
if (SelComboIdx != -1)
|
|
{
|
|
Combo_Assem_Attach.Text = SelName;
|
|
txt_Assem_PipeDist.Text = "";
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
//메인 어셈블리 리스트박스 item 그리기
|
|
private void list_Assem_Main_DrawItem(object sender, DrawItemEventArgs e)
|
|
{
|
|
if (list_Assem_Main.Items.Count <= 0) return;
|
|
Brush drawBrush = Brushes.Black;
|
|
|
|
e.DrawBackground();
|
|
|
|
StringFormat sf = new StringFormat();
|
|
sf.LineAlignment = StringAlignment.Center;
|
|
sf.Alignment = StringAlignment.Near;
|
|
|
|
var mainItems = list_Assem_Main.Items[e.Index];
|
|
//숫자면 색상 블루로
|
|
//bool isNum = mainItems.ToString().All(char.IsDigit);
|
|
double d_Num = 0;
|
|
bool isNum = double.TryParse(mainItems.ToString(), out d_Num);
|
|
if (isNum == true)
|
|
{
|
|
drawBrush = Brushes.DeepSkyBlue;
|
|
}
|
|
//존재하지 않는 심볼일 경우 빨간색으로 표시
|
|
foreach (string str in m_NonSymbolLst)
|
|
{
|
|
if (str == mainItems.ToString())
|
|
{
|
|
drawBrush = Brushes.Red;
|
|
break;
|
|
}
|
|
}
|
|
|
|
//NomRad 매개변수 없으면 보라색 변경
|
|
foreach(string str in NonNomRadLst)
|
|
{
|
|
if(str == mainItems.ToString())
|
|
{
|
|
drawBrush = Brushes.Violet;
|
|
break;
|
|
}
|
|
}
|
|
|
|
//메인 어셈블리 라디오 버튼 체크X 시 그레이로 변경
|
|
if (rad_Assem_Main.Checked == false)
|
|
drawBrush = Brushes.DarkGray;
|
|
|
|
e.Graphics.DrawString(mainItems.ToString(), e.Font, drawBrush, e.Bounds, StringFormat.GenericDefault);
|
|
e.DrawFocusRectangle();
|
|
}
|
|
|
|
//서브 어셈블리 리스트박스 item 그리기
|
|
private void list_Assem_Sub_DrawItem(object sender, DrawItemEventArgs e)
|
|
{
|
|
if (list_Assem_Sub.Items.Count <= 0) return;
|
|
Brush drawBrush = Brushes.Black;
|
|
|
|
e.DrawBackground();
|
|
|
|
StringFormat sf = new StringFormat();
|
|
sf.LineAlignment = StringAlignment.Center;
|
|
sf.Alignment = StringAlignment.Near;
|
|
|
|
var SubItems = list_Assem_Sub.Items[e.Index];
|
|
//숫자면 색상 블루
|
|
double d_Num = 0;
|
|
bool isNum = double.TryParse(SubItems.ToString(), out d_Num);
|
|
//bool isNum = SubItems.ToString().All(char.IsDigit);
|
|
if (isNum == true)
|
|
{
|
|
drawBrush = Brushes.DeepSkyBlue;
|
|
}
|
|
//존재하지 않는 심볼일 경우 빨간색으로 표시
|
|
foreach (string str in m_NonSymbolLst)
|
|
{
|
|
if (str == SubItems.ToString())
|
|
{
|
|
drawBrush = Brushes.Red;
|
|
break;
|
|
}
|
|
}
|
|
|
|
//NomRad 매개변수 없으면 보라색 변경
|
|
foreach (string str in NonNomRadLst)
|
|
{
|
|
if (str == SubItems.ToString())
|
|
{
|
|
drawBrush = Brushes.Violet;
|
|
break;
|
|
}
|
|
}
|
|
|
|
//서브 어셈블리 라디오 버튼 체크X 시 그레이로 변경
|
|
if (rad_Assem_Sub.Checked == false)
|
|
drawBrush = Brushes.DarkGray;
|
|
|
|
|
|
e.Graphics.DrawString(SubItems.ToString(), e.Font, drawBrush, e.Bounds, StringFormat.GenericDefault);
|
|
e.DrawFocusRectangle();
|
|
}
|
|
|
|
//내보내기(저장)
|
|
private void btm_Assem_Export_Click(object sender, EventArgs e)
|
|
{
|
|
AssemData.m_table.Clear();
|
|
//AssemData.Add(txt_Assem_Name.Text, AssemMainDataLst, AssemSubDataLst, double.Parse(txt_Assem_Main2SubDist.Text));
|
|
AssemData.Add(txt_Assem_Name.Text, m_MainDataLst, m_SubDataLst, double.Parse(txt_Assem_Main2SubDist.Text), subDia);
|
|
|
|
|
|
SaveFileDialog saveFileDialog = new SaveFileDialog();
|
|
if (txt_Assem_Name.Text == "")
|
|
saveFileDialog.FileName = "Assembly" + "_settings" + ".asmb"; //초기 파일명을 지정할 때 사용한다.
|
|
else
|
|
saveFileDialog.FileName = txt_Assem_Name.Text + "_settings" + ".asmb"; //초기 파일명을 지정할 때 사용한다.
|
|
saveFileDialog.Filter = "asmb|*.asmb";
|
|
saveFileDialog.Title = "Save an asmb File";
|
|
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
if (saveFileDialog.FileName != "")
|
|
{
|
|
//string location = Util.GetKMBIMLibraryFolder("\\Libraries\\Assembly");
|
|
//string jsonPath = Path.Combine(location, "settings.kins");
|
|
//
|
|
//System.IO.File.Copy(jsonPath, saveFileDialog.FileName, true);
|
|
save(saveFileDialog.FileName);
|
|
}
|
|
}
|
|
}
|
|
|
|
//가져오기(열기)
|
|
private void btm_Assem_Import_Click(object sender, EventArgs e)
|
|
{
|
|
OpenFileDialog openFileDialog = new OpenFileDialog();
|
|
string location = Util.GetKMBIMLibraryFolder("Libraries\\Assembly");
|
|
openFileDialog.Filter = "asmb|*.asmb";
|
|
openFileDialog.Title = "Open an asmb File";
|
|
openFileDialog.InitialDirectory = location;
|
|
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
if (openFileDialog.FileName != "")
|
|
{
|
|
//string location = Util.GetKMBIMLibraryFolder("Libraries\\Assembly");
|
|
string jsonPath = Path.Combine(location, "settings.asmb");
|
|
|
|
//System.IO.File.Copy(jsonPath, openFileDialog.FileName, true);
|
|
}
|
|
}
|
|
|
|
|
|
if (openFileDialog.FileName != "")
|
|
{
|
|
//string location = Util.GetKMBIMLibraryFolder("Libraries\\Assembly");
|
|
string jsonPath = Path.Combine(location, "settings.asmb");
|
|
|
|
//System.IO.File.Copy(openFileDialog.FileName, jsonPath, true);
|
|
open(openFileDialog.FileName);
|
|
|
|
|
|
m_MainDataLst.Clear();
|
|
m_SubDataLst.Clear();
|
|
list_Assem_Main.Items.Clear();
|
|
list_Assem_Sub.Items.Clear();
|
|
foreach (var data in AssemData.GetTable())
|
|
{
|
|
m_MainDataLst = data.MainAssemLst;
|
|
m_SubDataLst = data.SubAssemLst;
|
|
|
|
//어셈블리 명칭
|
|
txt_Assem_Name.Text = data.AssemName;
|
|
//메인 서브 간격
|
|
txt_Assem_Main2SubDist.Text = data.dblMain2SubDist.ToString();
|
|
//서브 관경
|
|
foreach (var item in combo_Assem_PipeDia.Items)
|
|
{
|
|
if (data.dblSubPipeDia.ToString().Equals(item.ToString()))
|
|
{
|
|
int idx = combo_Assem_PipeDia.Items.IndexOf(item);
|
|
combo_Assem_PipeDia.SelectedIndex = idx;
|
|
break;
|
|
}
|
|
}
|
|
|
|
foreach (var main in data.MainAssemLst)
|
|
{
|
|
if (main.AssemFamSymFamName != "")
|
|
list_Assem_Main.Items.Add(main.AssemFamSymFamName);
|
|
else if (main.AssemPipeDist != "")
|
|
list_Assem_Main.Items.Add(main.AssemPipeDist);
|
|
}
|
|
//총 길이 새로고침
|
|
double totalDist = ListBoxTotalDist(list_Assem_Main);
|
|
txt_Assem_MainTotal.Text = totalDist.ToString();
|
|
|
|
foreach (var sub in data.SubAssemLst)
|
|
{
|
|
if (sub.AssemFamSymFamName != "")
|
|
list_Assem_Sub.Items.Add(sub.AssemFamSymFamName);
|
|
else if (sub.AssemPipeDist != "")
|
|
list_Assem_Sub.Items.Add(sub.AssemPipeDist);
|
|
}
|
|
//총 길이 새로고침
|
|
totalDist = ListBoxTotalDist(list_Assem_Sub);
|
|
txt_Assem_SubTotal.Text = totalDist.ToString();
|
|
|
|
m_NonSymbolLst.Clear();
|
|
//심볼 존재 유무 확인 후 없으면 메시지 뿌림
|
|
string tmp_nonSymLst = "";
|
|
foreach (AssemblyData main in m_MainDataLst)
|
|
{
|
|
if (main.AssemFamSymFamName != "")
|
|
{
|
|
FamilySymbol famSym = Util.getNameByFamily(m_doc, main.AssemFamSymFamName);
|
|
if (famSym == null)
|
|
{
|
|
if (tmp_nonSymLst.Contains(main.AssemFamSymFamName) == false)
|
|
{
|
|
tmp_nonSymLst += ("- " + main.AssemFamSymFamName + "\n");
|
|
m_NonSymbolLst.Add(main.AssemFamSymFamName);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach (AssemblyData sub in m_SubDataLst)
|
|
{
|
|
if (sub.AssemFamSymFamName != "")
|
|
{
|
|
FamilySymbol famSym = Util.getNameByFamily(m_doc, sub.AssemFamSymFamName);
|
|
if (famSym == null)
|
|
{
|
|
if (tmp_nonSymLst.Contains(sub.AssemFamSymFamName) == false)
|
|
{
|
|
tmp_nonSymLst += ("- " + sub.AssemFamSymFamName + "\n");
|
|
m_NonSymbolLst.Add(sub.AssemFamSymFamName);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
//심볼 없으면 메시지 뿌림
|
|
if (tmp_nonSymLst != "")
|
|
MessageBox.Show("해당 패밀리가 존재하지 않습니다.\n\n" + tmp_nonSymLst, "패밀리 로드 오류");
|
|
|
|
//list_Assem_Main.Items.Add();
|
|
}
|
|
//category = PipeData.GetTable().First().Key;
|
|
//cbCategory.SelectedIndex = cbCategory.FindString(category);
|
|
//RefreshList();
|
|
|
|
|
|
}
|
|
}
|
|
|
|
private void button7_Click(object sender, EventArgs e)
|
|
{
|
|
//메인~서브 사이 거리
|
|
bool b_M2S = double.TryParse(txt_Assem_Main2SubDist.Text, out Main2SubDist);
|
|
if (b_M2S == false)
|
|
{
|
|
MessageBox.Show("메인-서브 간격이 없습니다.");
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
private double ListBoxTotalDist(System.Windows.Forms.ListBox listbox)
|
|
{
|
|
double totalDist = 0;
|
|
foreach (var item in listbox.Items)
|
|
{
|
|
bool isNum = item.ToString().All(char.IsDigit);
|
|
if (isNum)
|
|
{
|
|
double item_num = double.Parse(item.ToString());
|
|
totalDist += item_num;
|
|
}
|
|
}
|
|
return totalDist;
|
|
}
|
|
|
|
public void save(string FilePath)
|
|
{
|
|
|
|
//string location = Util.GetKMBIMLibraryFolder("\\Libraries\\Assembly");
|
|
//string jsonPath = Path.Combine(location, "settings.kins");
|
|
//
|
|
////DirectoryInfo 생성
|
|
//DirectoryInfo di = new DirectoryInfo(location);
|
|
////DirectoryInfo.Exists로 폴더 존재유무 확인
|
|
//if (!di.Exists) { di.Create(); }
|
|
|
|
|
|
using (StreamWriter file = File.CreateText(FilePath))
|
|
{
|
|
string strJson = AssemData.toJson();
|
|
|
|
JsonSerializer serializer = new JsonSerializer();
|
|
//serialize object directly into file stream
|
|
serializer.Serialize(file, strJson);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void open(string FilePath)
|
|
{
|
|
//string location = Util.GetKMBIMLibraryFolder("Libraries\\Assembly");
|
|
//string jsonPath = Path.Combine(location, "settings.kins");
|
|
////DirectoryInfo 생성
|
|
//DirectoryInfo di = new DirectoryInfo(location);
|
|
////DirectoryInfo.Exists로 폴더 존재유무 확인
|
|
//if (!di.Exists) { di.Create(); }
|
|
|
|
|
|
|
|
if (File.Exists(FilePath))
|
|
{
|
|
using (StreamReader r = new StreamReader(FilePath))
|
|
{
|
|
|
|
using (JsonTextReader reader1 = new JsonTextReader(r))
|
|
{
|
|
JValue o2 = (JValue)JToken.ReadFrom(reader1);
|
|
string strJson = o2.ToString();
|
|
AssemData.LoadJson(strJson);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
private void Form_Assembly_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_Assem_PipeDist_KeyPress(object sender, KeyPressEventArgs e)
|
|
{
|
|
int keyCode = (int)e.KeyChar;
|
|
if ((keyCode < 48 || keyCode > 57) && keyCode != 8 && keyCode != 46)
|
|
e.Handled = true;
|
|
|
|
if (keyCode == 46)
|
|
{
|
|
if (string.IsNullOrEmpty(txt_Assem_PipeDist.Text) || txt_Assem_PipeDist.Text.Contains('.') == true)
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
|
|
private void txt_Assem_Main2SubDist_KeyPress(object sender, KeyPressEventArgs e)
|
|
{
|
|
int keyCode = (int)e.KeyChar;
|
|
if ((keyCode < 48 || keyCode > 57) && keyCode != 8 && keyCode != 46)
|
|
e.Handled = true;
|
|
|
|
if (keyCode == 46)
|
|
{
|
|
if (string.IsNullOrEmpty(txt_Assem_Main2SubDist.Text) || txt_Assem_Main2SubDist.Text.Contains('.') == true)
|
|
e.Handled = true;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public class AssemblyData
|
|
{
|
|
public string AssemFamSymFamName;
|
|
public string AssemPipeDist;
|
|
public bool IsSymbol;
|
|
}
|
|
|
|
}
|