Client/Desktop/KMBIM3.0/23.10.18/Cmd/Parameter/FormSelectParameter.cs

186 lines
6.8 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.Parameter
{
public partial class FormSelectParameter : 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 FormSelectParameter(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.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 = Autodesk.Revit.DB.LabelUtils.GetLabelFor(p.Definition.ParameterGroup);
string strGropAndParameterName = strGroup + "/" + p.Definition.Name;
dtViews.Rows.Add(false, strGropAndParameterName, Util.GetParameterValueAsString(p));
hashElementParameters.Add(strGropAndParameterName, p);
}
}
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);
}
}
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;
}
}
private void FormSelectParameter_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.DialogResult = DialogResult.Cancel;
}
else if (e.KeyCode == Keys.Enter)
{
this.DialogResult = DialogResult.OK;
}
}
}
}