示例#1
0
        /*
         * 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();
        }
示例#2
0
        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;
                            }
                        }
                    }
                }
            }
        }
示例#3
0
 /*
  * TODO: (중) PCFData가 Revit정보를 업데이트하는 방식으로 변경할 필요가 있다.
  * 즉, DataCtrl이 직접적으로 Revit과 접촉하여 정보를 업데이트하는 방식이 아니라,
  * DataCtrl이 PCFData를 변경하면, PCFData가 Revit 정보를 업데이트하는 방식을 채택할 필요가 있다.
  */
 public void Import(PCFData data)
 {
 }
示例#4
0
        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);
        }
示例#5
0
 public void Import(PCFData data)
 {
     throw new NotImplementedException();
 }