287 lines
9.4 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
}
|