//Revit에서 추출가능한 정보를 Parameter 내부에 저장하도록 구현. public Result Create(ExternalCommandData commandData, ref string message, DataCtrl.DataCtrlInterface dataCtrl) { PCFData.Application = commandData.Application; PCFData.Document = PCFData.Application.ActiveUIDocument.Document; //PCF를 작성하기 위해 필요한 element를 찾아 낸다. FilteredElementCollector collector = PCFData.CollectPipeElements(PCFData.Document); try { //Revit에 있는 정보를 활용하여, PCF에 쓰일 Component 정보를 수집한다. foreach (Autodesk.Revit.DB.Element element in collector) { //Host 역할을 하는 FamilyInstance if (element is Autodesk.Revit.DB.Plumbing.Pipe || (element is FamilyInstance && (element as FamilyInstance).SuperComponent == null)) { this.CreateComponents(element); } } //Excel에 있는 Material 정보를 수집하여 저장한다. this.Materials = dataCtrl.GetMaterials(); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return(Result.Cancelled); } catch (Exception ex) { message = ex.Message; return(Result.Failed); } return(Result.Succeeded); }
//(중) Excel File 선택만 아니라, Export PCF 버튼을 비활성화에서 활성화로 바꾸는 것이 좋은 UX! private void SelectExcelFile_Click(object sender, EventArgs e) { if (openExcelDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { try { this.ExcelName.Text = Properties.Settings.Default.ExcelPath = openExcelDialog.FileName; this.DataCtrl = new DataCtrl.ExcelCtrl(this.Revit, openExcelDialog.FileName); } catch (Exception ex) { MessageBox.Show("Fail: to read Excel file. \n" + ex.Message); } } }
public AppUI(ExternalCommandData revit, ref string message) { InitializeComponent(); this.Revit = revit; this.Message = message; this.Paramters = new PCFData(); this.Writer = new PCFWriter(); //Excel 파일만 열 수 있도록 한정 this.openExcelDialog.Filter = "Excel files (*.xlsx)|*.xlsx"; if (!string.IsNullOrEmpty(Properties.Settings.Default.ExcelPath)) { this.ExcelName.Text = Properties.Settings.Default.ExcelPath; this.DataCtrl = new DataCtrl.ExcelCtrl(Revit, Properties.Settings.Default.ExcelPath); } }