Client/Desktop/KMBIM3.0/KMBIM3.0_소스/Cmd/PipeRack/Form_PipeRack.cs

287 lines
9.4 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 Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB;
using Autodesk.Revit.Creation;
using Autodesk.Revit.DB.Structure;
using System.Drawing.Imaging;
using System.Windows;
using System.Diagnostics;
using System.IO;
using KDCS.Utils;
using Autodesk.Revit.DB.Plumbing;
namespace KMBIM
{
public partial class Form_PipeRack : System.Windows.Forms.Form
{
public Autodesk.Revit.UI.ExternalCommandData revit;
public Level level;
public int m_Extend, m_Radidx = 0;
public string m_LvlSet, m_LvlCurrent;
public double m_MarginDist;
private double m_offset;
private Pipe m_MaxPipe = null, m_MinPipe = null;
public double Offset
{
get { return m_offset; }
set { m_offset = value; }
}
public Pipe MaxDiaPipe
{
get { return m_MaxPipe; }
set { m_MaxPipe = value; }
}
public Pipe MinOffPipe
{
get { return m_MinPipe; }
set { m_MinPipe = value; }
}
public Form_PipeRack()
{
InitializeComponent();
}
private void Form_PipeRack_Load(object sender, EventArgs e)
{
this.KeyPreview = true;
UIApplication uiapp = revit.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
Level level = doc.ActiveView.GenLevel;
List<Element> levelList = null;
if (level != null)
{
txt_CurrentLevel.Text = level.Name;
m_LvlCurrent = level.Name;
}
else
{
txt_CurrentLevel.Text = "Unknown";
m_LvlCurrent = "Unknown";
}
//레벨 가져오기
levelList = getLevel();
//레벨 리스트 목록 콤보박스 추가
foreach (Element l in levelList)
{
Level lvl = l as Level;
combo_SetLevel.Items.Add(lvl.Name);
}
//파이프 레벨
Level PipeLevel = null;
if (MinOffPipe != null)
PipeLevel = MinOffPipe.ReferenceLevel;
else
PipeLevel = MaxDiaPipe.ReferenceLevel;
if (PipeLevel != null)
{
foreach(Level lvl in levelList)
{
if (PipeLevel.Name == lvl.Name)
{
int idx = combo_SetLevel.FindString(lvl.Name);
if (idx != -1)
{
combo_SetLevel.SelectedIndex = idx;
break;
}
}
}
}
else//파이프 레벨이 없으면 콤보박스 첫번쨰로
{
combo_SetLevel.SelectedIndex = 0;
}
////콤보박스 저장된 레벨 값 불러오기, 없으면 첫번쨰 레벨
//if (levelList.Count > 0)//
//{
// if (Reg.getReg("DownPipeRack_Combo_SelLevel") == "")
// {
// Level lvl = levelList[0] as Level;
// Reg.setReg("DownPipeRack_Combo_SelLevel", lvl.Name);
// combo_SetLevel.SelectedIndex = 0;
// }
// else
// {
// string str_SelectLevel = Reg.getReg("DownPipeRack_Combo_SelLevel");
// foreach (Element elem in levelList)
// {
// Level lvl = elem as Level;
// if (str_SelectLevel == lvl.Name)
// {
// int idx = combo_SetLevel.FindString(lvl.Name);
// if (idx != -1)
// {
// combo_SetLevel.SelectedIndex = idx;
// break;
// }
// }
// else
// combo_SetLevel.SelectedIndex = 0;
// }
// }
//}
//볼트 타입
if (Reg.getReg("Rack_Type") == "")
{
m_Radidx = 0;
Reg.setReg("Rack_Type", "" + m_Radidx);
}
else
{
string str_RadIdx = Reg.getReg("Rack_Type");
m_Radidx = int.Parse(str_RadIdx);
if (m_Radidx == 0)
rad_guideShoe.Checked = true;
else if (m_Radidx == 1)
rad_Ubolt.Checked = true;
else if (m_Radidx == 2)
radNon.Checked = true;
}
//가대 말단 거리
if (Reg.getReg("Rack_MarginDist")!="" || Reg.getReg("Rack_MarginDist") != string.Empty)
{
m_MarginDist = Convert.ToDouble(Reg.getReg("Rack_MarginDist"));
txt_RackMarginDist.Text = m_MarginDist.ToString();
}
else
{
//가대 말단 거리 기본값 200
txt_RackMarginDist.Text = "200";
m_MarginDist = 200;
}
}
//배치 Level 콤보박스 값 변경
private void combo_SetLevel_SelectedIndexChanged(object sender, EventArgs e)
{
m_Extend = combo_SetLevel.SelectedIndex;
m_LvlSet = combo_SetLevel.SelectedItem.ToString();
//Reg.setReg("DownPipeRack_Combo_SelLevel", m_LvlSet);
}
//배치 Level 콤보박스 그리기
private void combo_SetLevel_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.Far;
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 txt_RackMarginDist_TextChanged(object sender, EventArgs e)
{
if (txt_RackMarginDist.Text == "") return;
if (txt_RackMarginDist.Text != "-")
{
m_MarginDist = Convert.ToDouble(txt_RackMarginDist.Text);
Reg.setReg("Rack_MarginDist", txt_RackMarginDist.Text.ToString());
}
}
private void rad_guideShoe_CheckedChanged(object sender, EventArgs e)
{
m_Radidx = 0;
Reg.setReg("Rack_Type", "" + m_Radidx);
}
private void rad_Ubolt_CheckedChanged(object sender, EventArgs e)
{
m_Radidx = 1;
Reg.setReg("Rack_Type", "" + m_Radidx);
}
private void radNon_CheckedChanged(object sender, EventArgs e)
{
m_Radidx = 2;
Reg.setReg("Rack_Type", "" + m_Radidx);
}
private void Form_PipeRack_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_RackMarginDist_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_RackMarginDist.Text) || txt_RackMarginDist.Text.Contains('.') == true)
e.Handled = true;
}
}
private List<Element> getLevel()
{
this.Hide();
UIApplication uiapp = revit.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
Autodesk.Revit.DB.View view = doc.ActiveView;
ElementId levelId = null;
List<Element> ElemList = new List<Element>();
Autodesk.Revit.DB.Parameter level = view.LookupParameter("Associated Level");
FilteredElementCollector lvlCollector = new FilteredElementCollector(doc);
ICollection<Element> lvlCollection = lvlCollector.OfClass(typeof(Level)).ToElements();
foreach (Element l in lvlCollection)
{
Level lvl = l as Level;
ElemList.Add(lvl);
//MessageBox.Show("" + lvl.Name);
}
return ElemList;
}
}
}