/* * TODO: (중) 현재 PCFData를 거치지 않고, 바로 Revit과 상호작용하여 정보를 처리하는 중이다. * 이는 데이터를 표현하는 방식이 2개가 되어 같은 정보를 두번 처리하는 비효율을 초래하게 된다. * 그러므로, 이미 데이터를 해석하여 저장한 PCFData를 활용하길 권고하는 바이다. */ //Excel에 현재까지 작업한 데이터를 쓰는 함수 public void Export(PCFData data) { this.UpdateExcelbyRevit(); Excel.Application excelApp = new Excel.Application(); Excel.Workbook excelWorkBook = excelApp.Workbooks.Open(this.ExcelPath); foreach (DataTable table in this.DataSet.Tables) { Excel.Worksheet excelWorkSheet = (from Excel.Worksheet ws in excelWorkBook.Sheets where ws.Name.Equals(table.TableName) select ws).First(); if (excelWorkSheet == null) { excelWorkSheet = excelWorkBook.Sheets.Add(); excelWorkSheet.Name = table.TableName; } for (int i = 1; i < table.Columns.Count + 1; i++) { excelWorkSheet.Cells[1, i] = table.Columns[i - 1].ColumnName; } for (int j = 0; j < table.Rows.Count; j++) { for (int k = 0; k < table.Columns.Count; k++) { excelWorkSheet.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString(); } } } excelWorkBook.Save(); excelWorkBook.Close(); excelApp.Quit(); }
private void UpdateExcelbyRevit() { FilteredElementCollector collector = PCFData.CollectPipeElements(this.Revit.Application.ActiveUIDocument.Document); foreach (DataRow data in DT_Components.Rows) { Autodesk.Revit.DB.Element element = null; IEnumerable <Autodesk.Revit.DB.Element> search = from Autodesk.Revit.DB.Element e in collector where e.get_Parameter(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM).AsValueString().Equals(data.Field <string>("FAMILYTYPE")) select e; if (search.Any()) { element = search.First(); } if (element != null) { string familyType = element.get_Parameter(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM).AsValueString(); IEnumerable <RevitParam.ParameterDefinition> FamilySharedParam = from RevitParam.ParameterDefinition pd in RevitParam.ParamterList.Values where pd.Scope == RevitParam.Scope.Share select pd; foreach (RevitParam.ParameterDefinition rvtParam in FamilySharedParam) { string rvtParamName = rvtParam.Name.Replace(RevitParam.Prefix, ""); if (element.get_Parameter(rvtParam.Id) != null) { switch (rvtParam.Type) { case (ParameterType.Text): data[rvtParamName] = element.get_Parameter(rvtParam.Id).AsString(); break; case (ParameterType.Integer): data[rvtParamName] = element.get_Parameter(rvtParam.Id).AsInteger(); break; } } } } } }
/* * TODO: (중) PCFData가 Revit정보를 업데이트하는 방식으로 변경할 필요가 있다. * 즉, DataCtrl이 직접적으로 Revit과 접촉하여 정보를 업데이트하는 방식이 아니라, * DataCtrl이 PCFData를 변경하면, PCFData가 Revit 정보를 업데이트하는 방식을 채택할 필요가 있다. */ public void Import(PCFData data) { }
private bool UpdateRevitbyExcel() { bool rt = false; FilteredElementCollector collector = PCFData.CollectPipeElements(this.Revit.Application.ActiveUIDocument.Document); Transaction trans = new Transaction(this.Revit.Application.ActiveUIDocument.Document, "Input Excel data into Family"); trans.Start(); try { foreach (Autodesk.Revit.DB.Element element in collector) { string familyType = element.get_Parameter(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM).AsValueString(); DataRow data = null; foreach (DataRow row in DT_Components.Rows) { if (familyType.Equals(row.Field <string>("FAMILYTYPE"))) { data = row; break; } } if (data != null) { IEnumerable <RevitParam.ParameterDefinition> FamilySharedParam = from RevitParam.ParameterDefinition pd in RevitParam.ParamterList.Values where pd.Scope == RevitParam.Scope.Share select pd; foreach (RevitParam.ParameterDefinition rvtParam in FamilySharedParam) { string rvtParamName = rvtParam.Name.Replace(RevitParam.Prefix, ""); if (!(data[rvtParamName] is DBNull) && element.get_Parameter(rvtParam.Id) != null) { switch (rvtParam.Type) { case (ParameterType.Text): element.get_Parameter(rvtParam.Id).Set(data.Field <string>(rvtParamName)); break; case (ParameterType.Integer): element.get_Parameter(rvtParam.Id).Set((double)data[rvtParamName]); break; } } } //Commit이 되어야 제대로 Revit이 업데이트가 된 것이다. rt = true; } else { data = DT_Components.NewRow(); data.SetField <string>("FAMILYTYPE", familyType); DT_Components.Rows.Add(data); } } trans.Commit(); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return(rt); } catch (Exception ex) { trans.RollBack(); MessageBox.Show("Fail: Excel Update: " + ex.Message); return(false); } return(rt); }
public void Import(PCFData data) { throw new NotImplementedException(); }