227 lines
8.9 KiB
C#
227 lines
8.9 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.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using Autodesk.Revit.DB;
|
|
using System.Collections;
|
|
using KDCS.Utils;
|
|
|
|
namespace KMBIM.Revit.Tools.Cmd.MatchProp
|
|
{
|
|
public partial class FormSelectParameter1 : System.Windows.Forms.Form
|
|
{
|
|
private Element _BaseElement { get; set; }
|
|
public Hashtable hashElementParameters { get; set; }
|
|
public List<Autodesk.Revit.DB.Parameter> ListElementParameter { get; set; } // 기준 요소의 파라미터
|
|
public List<Autodesk.Revit.DB.Parameter> ListSelectedParameter { get; set; } // 복사 선택된 파라미터
|
|
private ArrayList arrayList = new ArrayList();
|
|
|
|
|
|
public FormSelectParameter1(Element e)
|
|
{
|
|
InitializeComponent();
|
|
hashElementParameters = new Hashtable();
|
|
this._BaseElement = e;
|
|
ListSelectedParameter = null;
|
|
}
|
|
|
|
private void FormSelectParameter_Load(object sender, EventArgs e)
|
|
{
|
|
this.KeyPreview = true;
|
|
|
|
ListElementParameter = new List<Autodesk.Revit.DB.Parameter>();
|
|
|
|
SetFileDataGridViewParameters(this._BaseElement);
|
|
}
|
|
|
|
private void SetFileDataGridViewParameters(Element elm)
|
|
{
|
|
dataGridViewParameters.Columns.Clear();
|
|
dataGridViewParameters.DataSource = null;
|
|
dataGridViewParameters.AutoGenerateColumns = false;
|
|
dataGridViewParameters.AllowUserToAddRows = false;
|
|
dataGridViewParameters.ReadOnly = false;
|
|
dataGridViewParameters.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
|
|
dataGridViewParameters.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.White;
|
|
dataGridViewParameters.DefaultCellStyle.SelectionForeColor = System.Drawing.Color.Black;
|
|
dataGridViewParameters.MultiSelect = true;
|
|
|
|
DataTable dtViews = new DataTable();
|
|
dtViews.Columns.Add("선택", typeof(bool));
|
|
dtViews.Columns.Add("매개변수", typeof(String));
|
|
dtViews.Columns.Add("값", typeof(String));
|
|
|
|
DataGridViewCheckBoxColumn column1 = new DataGridViewCheckBoxColumn();
|
|
column1.HeaderText = "";
|
|
column1.DataPropertyName = column1.HeaderText;
|
|
column1.Name = "column1";
|
|
column1.Width = 50;
|
|
column1.ReadOnly = false;
|
|
|
|
DataGridViewTextBoxColumn column2 = new DataGridViewTextBoxColumn();
|
|
column2.HeaderText = "매개변수";
|
|
column2.DataPropertyName = column2.HeaderText;
|
|
column2.Name = "column2";
|
|
column2.Width = 150;
|
|
column2.ReadOnly = true;
|
|
|
|
DataGridViewTextBoxColumn column3 = new DataGridViewTextBoxColumn();
|
|
column3.HeaderText = "값";
|
|
column3.DataPropertyName = column3.HeaderText;
|
|
column3.Name = "column3";
|
|
column3.Width = 150;
|
|
column3.ReadOnly = true;
|
|
|
|
dataGridViewParameters.Columns.AddRange(column1, column2, column3);
|
|
ListElementParameter = elm.GetOrderedParameters().ToList();
|
|
|
|
foreach (Autodesk.Revit.DB.Parameter p in ListElementParameter)
|
|
{
|
|
if (p.IsReadOnly == false)
|
|
{
|
|
string strGroup = LabelUtils.GetLabelFor(p.Definition.ParameterGroup);
|
|
if (strGroup != "공정" && strGroup != "ID 데이터")
|
|
{
|
|
string strGropAndParameterName = strGroup + "/" + p.Definition.Name;
|
|
string value = GetParameterValueAsString(p);
|
|
if (value != null)
|
|
{
|
|
if(p.Definition.Name=="시스템 유형" || p.Definition.Name=="참조 레벨")
|
|
{
|
|
dtViews.Rows.Add(false, strGropAndParameterName, p.AsValueString());
|
|
}
|
|
else
|
|
{
|
|
dtViews.Rows.Add(false, strGropAndParameterName, value);
|
|
hashElementParameters.Add(strGropAndParameterName, p);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
dataGridViewParameters.CurrentCell = null;
|
|
|
|
dataGridViewParameters.DataSource = dtViews;
|
|
}
|
|
|
|
private void buttonOK_Click(object sender, EventArgs e)
|
|
{
|
|
ListSelectedParameter = new List<Autodesk.Revit.DB.Parameter>();
|
|
for (int i = 0; i < dataGridViewParameters.Rows.Count; i++)
|
|
{
|
|
if (dataGridViewParameters.Rows[i].Selected == true)
|
|
{
|
|
DataGridViewRow itm = dataGridViewParameters.Rows[i];
|
|
if (itm.Selected)
|
|
{
|
|
DataGridViewTextBoxCell tbParameterName = (DataGridViewTextBoxCell)itm.Cells[1];
|
|
string parameterName = tbParameterName.Value.ToString();
|
|
Autodesk.Revit.DB.Parameter p = hashElementParameters[parameterName] as Autodesk.Revit.DB.Parameter;
|
|
if (p != null) ListSelectedParameter.Add(p);
|
|
}//end-if
|
|
}
|
|
}
|
|
|
|
var wm = WorkMain.GetInstance();
|
|
wm.CopiedParameters.Clear(); // 이전에 복사한 파라미터들을 지웁니다.
|
|
wm.CopiedParametersElement = this._BaseElement; // 복사한 파라미터의 소유자 요소를 저장합니다.
|
|
foreach (var p in ListSelectedParameter)
|
|
{
|
|
wm.CopiedParameters.Add(p);
|
|
wm.CopiedParameters.Add(p);
|
|
}
|
|
}
|
|
|
|
private void dataGridViewParameters_CellContentClick(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
//체크박스에 체크가 들어오면 데이터 처리
|
|
private void dataGridViewParameters_CellValueChanged(object sender, DataGridViewCellEventArgs e)
|
|
{
|
|
if (e.RowIndex < 0) return;
|
|
|
|
if (e.ColumnIndex == 0)
|
|
{
|
|
DataGridViewRow curRow = dataGridViewParameters.Rows[e.RowIndex];
|
|
DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)curRow.Cells[0];
|
|
bool bSelected = (bool)chk.Value;
|
|
curRow.Selected = bSelected;
|
|
|
|
if (dataGridViewParameters.CurrentCell != null)
|
|
{
|
|
bool selected = false;
|
|
if (arrayList.Contains(dataGridViewParameters.CurrentCell))
|
|
{
|
|
arrayList.Remove(dataGridViewParameters.CurrentCell);
|
|
selected = false;
|
|
}
|
|
else
|
|
{
|
|
arrayList.Add(dataGridViewParameters.CurrentCell);
|
|
selected = true;
|
|
}
|
|
dataGridViewParameters.CurrentCell.Selected = selected;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void dataGridViewParameters_SelectionChanged(object sender, EventArgs e)
|
|
{
|
|
foreach (DataGridViewCell arrayElement in arrayList)
|
|
{
|
|
arrayElement.Selected = true;
|
|
}
|
|
}
|
|
|
|
public static string GetParameterValueAsString(Autodesk.Revit.DB.Parameter parameter)
|
|
{
|
|
string value = "";
|
|
switch (parameter.StorageType)
|
|
{
|
|
case Autodesk.Revit.DB.StorageType.Double:
|
|
value = Unit.FeetToMM(parameter.AsDouble()).ToString();
|
|
break;
|
|
case Autodesk.Revit.DB.StorageType.ElementId:
|
|
value = parameter.AsElementId().IntegerValue.ToString();
|
|
break;
|
|
case Autodesk.Revit.DB.StorageType.String:
|
|
value = parameter.AsString();
|
|
break;
|
|
case Autodesk.Revit.DB.StorageType.Integer:
|
|
value = Unit.FeetToMM(parameter.AsInteger()).ToString();
|
|
break;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
private void Select_All_CheckBox_Click(object sender, EventArgs e)
|
|
{
|
|
foreach (DataGridViewRow row in dataGridViewParameters.Rows)
|
|
{
|
|
DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells[0];
|
|
chk.Value = !(chk.Value == null ? false : (bool)chk.Value);
|
|
}
|
|
}
|
|
|
|
private void FormSelectParameter1_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Escape)
|
|
{
|
|
this.DialogResult = DialogResult.Cancel;
|
|
}
|
|
else if (e.KeyCode == Keys.Enter)
|
|
{
|
|
this.DialogResult = DialogResult.OK;
|
|
}
|
|
}
|
|
}
|
|
}
|