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 ListElementParameter { get; set; } // 기준 요소의 파라미터 public List 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(); 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(); 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; } } } }