/// <summary>
        /// Save pressure loss report to a file according to customer's settings.
        /// </summary>
        public bool SaveReportToFile(string fileName, PressureLossReportData settings, SaveType eSaveType)
        {
            // TODO
             if (eSaveType == SaveType.HTML)
            writer = new SaveDataToHTML();
             else
            writer = new SaveDataToCSV();

             PressureLossReportHelper.instance.ReportData = settings;

             return writer.save(fileName, settings);
        }
        //add "Element ID" fields to segment and fitting fields
        public void upgrade1(PressureLossReportData data, int nVersion = 1)
        {
            if (data == null || data.Version >= nVersion)
            return;

             //segment
             {
            PressureLossParameter PLParam = new PressureLossParameter(ReportResource.elementId, false, -1, (int)SectionMemberType.Segment);
            if (!data.StraightSegFields.Contains(PLParam))
               data.StraightSegFields.Add(PLParam);
             }

             //fitting
             {
            PressureLossParameter PLParam = new PressureLossParameter(ReportResource.elementId, false, -1, (int)SectionMemberType.Fitting);
            if (!data.FittingFields.Contains(PLParam))
               data.FittingFields.Add(PLParam);
             }

             data.Version = nVersion;
             PressureLossReportDataManager.Instance.save(data);
        }
        public static void generateSectionFields(PressureLossReportData reportData)
        {
            if (reportData == null)
            return;

             PressureLossReportHelper helper = PressureLossReportHelper.instance;
             if (helper == null)
            return;

             List<PressureLossParameter> sectionParameters = new List<PressureLossParameter>();

             //section fields
             //default selected ones
             //for section table: SectionMemberType means display the info for which part: segment or AirTerminal or Equipment
             int nOrder = 1;
             if (helper.Domain == ReportResource.pipeDomain)
             {
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FLOW_PARAM), true, nOrder++, (int)(SectionMemberType.Segment | SectionMemberType.AirTerminal | SectionMemberType.Fitting | SectionMemberType.Equipment)));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_SIZE_FORMATTED_PARAM), true, nOrder++, (int)(SectionMemberType.Segment | SectionMemberType.AirTerminal | SectionMemberType.Equipment)));
             }
             else
             {
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_DUCT_FLOW_PARAM), true, nOrder++, (int)(SectionMemberType.Segment | SectionMemberType.AirTerminal | SectionMemberType.Fitting | SectionMemberType.Equipment)));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_DUCT_SIZE_FORMATTED_PARAM), true, nOrder++, (int)(SectionMemberType.Segment | SectionMemberType.AirTerminal | SectionMemberType.Equipment)));
             }

             sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_VELOCITY), true, nOrder++, (int)(SectionMemberType.Segment | SectionMemberType.Fitting)));
             sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_VELOCITY_PRESSURE), true, nOrder++, (int)SectionMemberType.Fitting));
             sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.CURVE_ELEM_LENGTH), true, nOrder++, (int)SectionMemberType.Segment));
             if (helper.Domain == ReportResource.pipeDomain)
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FITTING_LOSS_KFACTOR_PARAM), true, nOrder++, (int)SectionMemberType.Fitting));
             else
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_LOSS_COEFFICIENT), true, nOrder++, (int)SectionMemberType.Fitting));
             sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_FRICTION), true, nOrder++, (int)(SectionMemberType.Segment)));

             //from segment
             sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_REFERENCE_OVERALLSIZE), false, -1, (int)SectionMemberType.Segment));
             if (helper.Domain == ReportResource.pipeDomain)
             {
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_DIAMETER_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_MATERIAL_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FRICTION_FACTOR_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_INNER_DIAM_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_RELATIVE_ROUGHNESS_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_REYNOLDS_NUMBER_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_ROUGHNESS_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FIXTURE_UNITS_PARAM), false, -1, (int)SectionMemberType.Segment));
             }
             else
             {
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_CURVE_DIAMETER_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_CURVE_WIDTH_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_EQ_DIAMETER_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_REFERENCE_FREESIZE), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_CURVE_HEIGHT_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_HYDRAULIC_DIAMETER_PARAM), false, -1, (int)SectionMemberType.Segment));
            sectionParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_REYNOLDSNUMBER_PARAM), false, -1, (int)SectionMemberType.Segment));
             }

             reportData.AvailableFields = sectionParameters;
        }
        private void getSectionTable(MEPSection section, DataTable tb, List<string> fileds, PressureLossReportData reportData, bool bForHtml = false)
        {
            if (tb == null || fileds == null || section == null || reportData == null)
            return;

             List<MEPCurve> curves = new List<MEPCurve>();
             List<FamilyInstance> fittings = new List<FamilyInstance>();
             List<FamilyInstance> airTerminals = new List<FamilyInstance>();
             List<FamilyInstance> equipments = new List<FamilyInstance>();

             PressureLossReportHelper helper = PressureLossReportHelper.instance;
             if (helper == null)
            return;

             getSectionElements(section, curves, fittings, airTerminals, equipments);

             Dictionary<string, string> fieldAndValue = new Dictionary<string, string>();
             getSectionCommonInfo(section, fieldAndValue);

             if (bForHtml)
            helper.addColumns(tb, fileds.Count);
             else
            helper.addColumns(tb, fileds.Count+2);

             List<string> segmentVals = new List<string>();//segment row
             List<string> fittingVals = new List<string>();//fitting row
             List<string> airTerminalVals = new List<string>();//air terminal row
             List<string> equipmentsVals = new List<string>();//equipment row

             if (!bForHtml) //for csv, the first column is the section number
             {

            segmentVals.Add(section.Number.ToString());
            if (curves.Count < 1)
               fittingVals.Add(section.Number.ToString());
            else
               fittingVals.Add(" ");

            if (curves.Count < 1 && fittings.Count < 1)
               airTerminalVals.Add(section.Number.ToString());
            else
               airTerminalVals.Add(" ");

            if (curves.Count < 1 && fittings.Count < 1 && airTerminals.Count < 1)
               equipmentsVals.Add(section.Number.ToString());
            else
               equipmentsVals.Add(" ");
             }

             segmentVals.Add(helper.Domain);
             fittingVals.Add(ReportResource.fittings);

             if (helper.Domain == ReportResource.pipeDomain)
            airTerminalVals.Add(ReportResource.plumbingFixtures);
             else
            airTerminalVals.Add(ReportResource.airTerminals);
             equipmentsVals.Add(ReportResource.equipments);

             foreach (string fieldName in fileds)
             {
            PressureLossParameter PLParam = helper.getPressureLossParamByName(reportData.AvailableFields, fieldName);
            if (PLParam == null)
               continue;

            if (fieldAndValue.ContainsKey(fieldName)) //section info
            {
               if ((PLParam.GetFrom & (int)SectionMemberType.Segment) > 0)
                  segmentVals.Add(fieldAndValue[fieldName]);
               else
                  segmentVals.Add(ReportConstants.emptyValue);

               if ((PLParam.GetFrom & (int)SectionMemberType.Fitting) > 0)
                  fittingVals.Add(fieldAndValue[fieldName]);
               else
                  fittingVals.Add(ReportConstants.emptyValue);

               if ((PLParam.GetFrom & (int)SectionMemberType.AirTerminal) > 0)
                  airTerminalVals.Add(fieldAndValue[fieldName]);
               else
                  airTerminalVals.Add(ReportConstants.emptyValue);

               if ((PLParam.GetFrom & (int)SectionMemberType.Equipment) > 0)
                  equipmentsVals.Add(fieldAndValue[fieldName]);
               else
                  equipmentsVals.Add(ReportConstants.emptyValue);
            }
            else if (curves.Count > 0 && (PLParam.GetFrom & (int)SectionMemberType.Segment) > 0) //read the value from first segment
            {
               MEPCurve firstCrv = curves[0];
               if (firstCrv == null)
                  continue;

               string strVal = helper.getParamValue(firstCrv.get_Parameter(fieldName));
               segmentVals.Add(strVal);
               fittingVals.Add(ReportConstants.emptyValue);
               airTerminalVals.Add(ReportConstants.emptyValue);
               equipmentsVals.Add(ReportConstants.emptyValue);
            }
            else
            {
               segmentVals.Add(ReportConstants.emptyValue);
               fittingVals.Add(ReportConstants.emptyValue);
               airTerminalVals.Add(ReportConstants.emptyValue);
               equipmentsVals.Add(ReportConstants.emptyValue);
            }
             }

             //add total pressure loss
             segmentVals.Add(helper.getTotalPressureLossByType(section, SectionMemberType.Segment));
             fittingVals.Add(helper.getTotalPressureLossByType(section, SectionMemberType.Fitting));
             airTerminalVals.Add(helper.getTotalPressureLossByType(section, SectionMemberType.AirTerminal));
             equipmentsVals.Add(helper.getTotalPressureLossByType(section, SectionMemberType.Equipment));

             //add section pressure loss
             if (!bForHtml) //for csv, the last column is section pressure loss report
             {
            string sectionPL = fieldAndValue[ReportResource.sectionPressureLoss];

            segmentVals.Add(sectionPL);
            if (curves.Count < 1)
               fittingVals.Add(sectionPL);
            else
               fittingVals.Add(ReportConstants.mergeValue);

            if (curves.Count < 1 && fittings.Count < 1)
               airTerminalVals.Add(sectionPL);
            else
               airTerminalVals.Add(ReportConstants.mergeValue);

            if (curves.Count < 1 && fittings.Count < 1 && airTerminals.Count < 1)
               equipmentsVals.Add(sectionPL);
            else
               equipmentsVals.Add(ReportConstants.mergeValue);
             }

             if (curves.Count > 0)
            helper.addRow(tb, segmentVals);
             if (fittings.Count > 0)
            helper.addRow(tb, fittingVals);
             if (airTerminals.Count > 0)
            helper.addRow(tb, airTerminalVals);
             if (equipments.Count > 0)
            helper.addRow(tb, equipmentsVals);
        }
        public static void generateSegmentFields(PressureLossReportData reportData)
        {
            PressureLossReportHelper helper = PressureLossReportHelper.instance;
             if (helper == null)
            return;

             List<PressureLossParameter> segParameters = new List<PressureLossParameter>();

             //default segment selected fields
             //SectionMemberType means where the value is from: segment or section
             int nOrder = 1;
             segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.ALL_MODEL_MARK), false, -1, (int)SectionMemberType.Segment));
             segParameters.Add(new PressureLossParameter(ReportResource.elementId, true, nOrder++, (int)SectionMemberType.Segment));

             if (helper.Domain == ReportResource.pipeDomain)
             {
            segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FLOW_PARAM), true, nOrder++, (int)SectionMemberType.Section));
            segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_SIZE_FORMATTED_PARAM), true, nOrder++, (int)SectionMemberType.Segment));
            segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FRICTION_FACTOR_PARAM), false, -1, (int)SectionMemberType.Section));
            segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FIXTURE_UNITS_PARAM), false, -1, (int)SectionMemberType.Section));
            segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_REYNOLDS_NUMBER_PARAM), false, -1, (int)SectionMemberType.Section));
            segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FITTING_LOSS_KFACTOR_PARAM), false, -1, (int)SectionMemberType.Section));
             }
             else
             {
            segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_DUCT_FLOW_PARAM), true, nOrder++, (int)SectionMemberType.Section));
            segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_DUCT_SIZE_FORMATTED_PARAM), true, nOrder++, (int)SectionMemberType.Segment));
            segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_REYNOLDSNUMBER_PARAM), false, -1, (int)SectionMemberType.Section));
            segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_LOSS_COEFFICIENT), false, -1, (int)SectionMemberType.Section));
             }

             segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_VELOCITY), true, nOrder++, (int)SectionMemberType.Section));
             segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_VELOCITY_PRESSURE), true, nOrder++, (int)SectionMemberType.Section));
             segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.CURVE_ELEM_LENGTH), true, nOrder++, (int)SectionMemberType.Section));
             segParameters.Add(new PressureLossParameter(ReportResource.pressureLoss, true, 100, (int)SectionMemberType.Section, false));

             segParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_FRICTION), false, -1, (int)SectionMemberType.Section));

             //find the first curve
             List<MEPSystem> systems = helper.getSortedSystems();
             if (systems == null || systems.Count < 1)
            return;
             foreach (MEPSystem system in systems)
             {
            List<MEPSection> sections = new List<MEPSection>();
            MEPSystemInfo.getSectionsFromSystem(system, sections);
            foreach (MEPSection section in sections)
            {
               //find one section which contains both segment and fitting
               List<MEPCurve> curves = new List<MEPCurve>();
               SectionsInfo.getSectionElements(section, curves, null, null, null);

               if (curves.Count < 1)
                  continue;

               //segment parameters
               PressureLossParameter PLParam1 = new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.ELEM_FAMILY_PARAM), false, -1, (int)SectionMemberType.Type);
               if (!segParameters.Contains(PLParam1))
                  segParameters.Add(PLParam1);

               PressureLossParameter PLParam2 = new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM), false, -1, (int)SectionMemberType.Type);
               if (!segParameters.Contains(PLParam2))
                  segParameters.Add(PLParam2);

               PressureLossParameter PLParam3 = new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_SIZE_FORMATTED_PARAM), false, -1, (int)SectionMemberType.Segment);
               if (!segParameters.Contains(PLParam3))
                  segParameters.Add(PLParam3);

               foreach (Parameter param in curves[0].Parameters)
               {
                  //exclude the parameters under constrain and other groups
                  if (param.Definition.ParameterGroup == BuiltInParameterGroup.PG_CONSTRAINTS
                     || LabelUtils.GetLabelFor(param.Definition.ParameterGroup) == ReportResource.other
                     || param.Definition.Name == LabelUtils.GetLabelFor(BuiltInParameter.RBS_SECTION)
                     || param.Definition.Name == LabelUtils.GetLabelFor(BuiltInParameter.RBS_PRESSURE_DROP))
                     continue;

                  PressureLossParameter PLParam = new PressureLossParameter(param.Definition.Name, false, -1, (int)SectionMemberType.Segment);
                  if (!segParameters.Contains(PLParam))
                     segParameters.Add(PLParam);
               }

               //segmentType parameters
               MEPCurveType crvType = helper.Doc.GetElement(curves[0].GetTypeId()) as MEPCurveType;
               if (crvType != null)
               {
                  foreach (Parameter param in crvType.Parameters)
                  {
                     //exclude the parameters under Fitting/Segments and other groups
                     if (param.Definition.ParameterGroup == BuiltInParameterGroup.PG_FITTING
                     || param.Definition.ParameterGroup == BuiltInParameterGroup.PG_SEGMENTS_FITTINGS
                     || LabelUtils.GetLabelFor(param.Definition.ParameterGroup) == ReportResource.other)
                        continue;

                     PressureLossParameter PLParam = new PressureLossParameter(param.Definition.Name, false, -1, (int)SectionMemberType.Type);
                     if (!segParameters.Contains(PLParam))
                        segParameters.Add(PLParam);
                  }
               }

               reportData.StraightSegFields = segParameters;

               return;
            }
             }
        }
        private void FillingData()
        {
            try
             {
            //Way 1:
            //1. Fill in the combo: report format names or "untitled format"
            //?: Which i=one is the default selected?
            PressureLossReportHelper helper = PressureLossReportHelper.instance;
            PressureLossReportDataManager reportDataMgr = PressureLossReportDataManager.Instance;
            PressureLossReportFormats formats = reportDataMgr.getAllFormats();
            if (formats != null && formats.Count > 0)
            {
               PressureLossReportData lastData = reportDataMgr.getLastUsedReportData();
               string lastUsedName = "";
               foreach (PressureLossReportData data in formats)
               {
                  if (lastData != null && lastData.Name == data.Name)
                  {
                     lastUsedName = reportDataMgr.getLastUsedReportName();
                     if (formats.Count == 1)
                        this.comboBoxFormat.Items.Add(lastUsedName);
                  }
                  else
                     this.comboBoxFormat.Items.Add(data.Name);
               }

               if (lastUsedName.Length > 0 && this.comboBoxFormat.Items.IndexOf(lastUsedName) > -1)
                  this.comboBoxFormat.SelectedIndex = this.comboBoxFormat.Items.IndexOf(lastUsedName);
               else
                  this.comboBoxFormat.SelectedIndex = 0;
               settings = reportDataMgr.getData(this.comboBoxFormat.SelectedItem.ToString());

               resetSettings();
            }

            if (settings == null) //fill in default values
            {
               settings = new PressureLossReportData();

               generateDefaultFormatData();
               settings.Name = ReportResource.formatDefaultName;
               reportDataMgr.save(settings);
               this.comboBoxFormat.Items.Add(settings.Name);
               this.comboBoxFormat.SelectedIndex = 0;
            }

            if (settings != null)
               fillSettingsControlsFromFormat(settings);

            this.buttonUp.Enabled = false;
            this.buttonDown.Enabled = false;

            this.listBoxAvailableFields.Focus();
            this.listBoxAvailableFields.SetSelected(0, true);

            //title
            if (helper.Domain == ReportResource.pipeDomain)
               this.Text = ReportResource.pipeSettingsDlgTitle;
            else
               this.Text = ReportResource.ductSettingsDlgTitle;
             }
             catch
             {
             	//do nothing
             }
        }
        public void saveLastUseReport(PressureLossReportData data)
        {
            if (isReportFormatReadOnly())
            return;

             if (data == null)
            return;

             PressureLossReportData lastData = getLastUsedReportData();
             if (lastData != null)
            remove(lastData.Name);

             data.Name = data.Name + lastUsed;
             save(data);
        }
예제 #8
0
 public virtual bool save(string fileName, PressureLossReportData reportData)
 {
     return false;
 }
        private void resetSettings()
        {
            if (settings == null)
            settings = new PressureLossReportData();

             if (settings.AvailableFields == null || settings.AvailableFields.Count < 1)
            SectionsInfo.generateSectionFields(settings);

             if (settings.StraightSegFields == null || settings.StraightSegFields.Count < 1)
            SegmentsInfo.generateSegmentFields(settings);

             if (settings.FittingFields == null || settings.FittingFields.Count < 1)
            FittingsInfo.generateFittingFields(settings);
        }
        /// <summary>
        /// save the data to the xml file, please catch InvalidOperationException to 
        /// identify the existing file is broken.
        /// </summary>
        /// <param name="data">format data</param>
        public void save(PressureLossReportData data)
        {
            try
             {
            XmlSerializer serializer = new XmlSerializer(typeof(PressureLossReportFormats));
            PressureLossReportFormats formats = new PressureLossReportFormats();
            if (File.Exists(formatFileName))
            {
               formats = getAllFormats(false);
               //formats can't been null, it may throw exception.
               //this format exists
               if (formats != null && formats.Contains(data))
               {
                  formats.Remove(data);
               }
            }

            formats.Add(data);
            using (TextWriter writer = new StreamWriter(formatFileName))
            {
               serializer.Serialize(writer, formats);
            }
             }
             catch
             {
            //do nothing
             }
        }
        private void readSettingsDataFromDlg()
        {
            //current settings
             if (settings == null)
            settings = new PressureLossReportData();
             settings.DisplayCriticalPath = checkBoxCriticalPath.Checked;
             settings.DisplayDetailInfoForStraightSeg = checkBoxSegmentInfo.Checked;
             settings.DisplayFittingLCSum = checkBoxFittingInfo.Checked;
             settings.DisplaySysInfo = checkBoxDisplaySystemInfo.Checked;
             settings.OpenAfterCreated = checkBoxOpenAfterCreated.Checked;

             UIHelperFunctions.getFieldsFromSelectedListBox(settings.AvailableFields, listBoxReportFields);
        }
        private void generateDefaultFormatData()
        {
            if (settings == null)
            settings = new PressureLossReportData();

             PressureLossReportHelper helper = PressureLossReportHelper.instance;

             settings.Domain = helper.Domain;
             settings.DisplayCriticalPath = true;
             settings.DisplayDetailInfoForStraightSeg = true;
             settings.DisplayFittingLCSum = true;
             settings.DisplaySysInfo = true;
             settings.OpenAfterCreated = true;

             //initialize the fields
             helper.generateAviliableFields(settings);
        }
        private void fillSettingsControlsFromFormat(PressureLossReportData data)
        {
            if (data == null)
            return;

             checkBoxDisplaySystemInfo.Checked = data.DisplaySysInfo;
             checkBoxCriticalPath.Checked = data.DisplayCriticalPath;
             checkBoxFittingInfo.Checked = data.DisplayFittingLCSum;
             checkBoxSegmentInfo.Checked = data.DisplayDetailInfoForStraightSeg;
             checkBoxOpenAfterCreated.Checked = data.OpenAfterCreated;

             listBoxAvailableFields.Items.Clear();
             listBoxReportFields.Items.Clear();

             //fill in the fields
             UIHelperFunctions.fillingListBoxFields(data.AvailableFields, listBoxAvailableFields, listBoxReportFields);
        }
        public static void generateFittingFields(PressureLossReportData reportData)
        {
            if (reportData == null)
            return;

             PressureLossReportHelper helper = PressureLossReportHelper.instance;
             if (helper == null)
            return;

             List<PressureLossParameter> fittingParameters = new List<PressureLossParameter>();

             //default fitting selected fields
             //SectionMemberType means where the value is from: section or fitting
             int nOrder = 1;
             fittingParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.ALL_MODEL_MARK), false, -1, (int)SectionMemberType.Fitting));
             fittingParameters.Add(new PressureLossParameter(ReportResource.elementId, true, nOrder++, (int)SectionMemberType.Fitting));

             if (helper.Domain == ReportResource.pipeDomain)
            fittingParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FITTING_LOSS_METHOD_SERVER_PARAM), true, nOrder++, (int)SectionMemberType.Fitting));
             else
            fittingParameters.Add(new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_DUCT_FITTING_LOSS_METHOD_SERVER_PARAM), true, nOrder++, (int)SectionMemberType.Fitting));

             //pressure loss fields is not visible in settings dialog, the order 100 is to make sure it always is the last one field
             fittingParameters.Add(new PressureLossParameter(ReportResource.pressureLoss, true, 100, (int)SectionMemberType.Section, false));

             //find the first fitting
             List<MEPSystem> systems = helper.getSortedSystems();
             if (systems == null || systems.Count < 1)
            return;
             foreach (MEPSystem system in systems)
             {
            List<MEPSection> sections = new List<MEPSection>();
            MEPSystemInfo.getSectionsFromSystem(system, sections);
            foreach (MEPSection section in sections)
            {
               //find one section which contains both segment and fitting
               List<FamilyInstance> fittings = new List<FamilyInstance>();

               SectionsInfo.getSectionElements(section, null, fittings, null, null);

               if (fittings.Count < 1)
                  continue;

               //fitting's instance parameters

               PressureLossParameter PLParam1 = new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.ELEM_FAMILY_PARAM), false, -1, (int)SectionMemberType.Type);
               if (!fittingParameters.Contains(PLParam1))
                  fittingParameters.Add(PLParam1);

               PressureLossParameter PLParam2 = new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM), false, -1, (int)SectionMemberType.Type);
               if (!fittingParameters.Contains(PLParam2))
                  fittingParameters.Add(PLParam2);

               PressureLossParameter PLParam3 = new PressureLossParameter(LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_SIZE_FORMATTED_PARAM), false, -1, (int)SectionMemberType.Fitting);
               if (!fittingParameters.Contains(PLParam3))
                  fittingParameters.Add(PLParam3);

               foreach (Parameter param in fittings[0].Parameters)
               {
                  //exclude the parameters under constrains/Graphics/Geometry and other groups
                  if (param.Definition.ParameterGroup == BuiltInParameterGroup.PG_CONSTRAINTS
                     || param.Definition.ParameterGroup == BuiltInParameterGroup.PG_GRAPHICS
                     || param.Definition.ParameterGroup == BuiltInParameterGroup.PG_GEOMETRY
                     || LabelUtils.GetLabelFor(param.Definition.ParameterGroup) == ReportResource.other
                     || param.Definition.Name == LabelUtils.GetLabelFor(BuiltInParameter.RBS_DUCT_PRESSURE_DROP))
                     continue;

                  PressureLossParameter PLParam = new PressureLossParameter(param.Definition.Name, false, -1, (int)SectionMemberType.Fitting);
                  if (!fittingParameters.Contains(PLParam))
                     fittingParameters.Add(PLParam);
               }

               //Fitting symbol parameters

               FamilySymbol famSym = fittings[0].Symbol;
               if (famSym != null)
               {

                  foreach (Parameter param in famSym.Parameters)
                  {
                     //exclude the parameters under construction and other groups
                     if ( param.Definition.ParameterGroup == BuiltInParameterGroup.PG_CONSTRUCTION
                        || LabelUtils.GetLabelFor(param.Definition.ParameterGroup) == ReportResource.other)
                        continue;

                     PressureLossParameter PLParam = new PressureLossParameter(param.Definition.Name, false, -1, (int)SectionMemberType.Type);
                     if (!fittingParameters.Contains(PLParam))
                        fittingParameters.Add(PLParam);
                  }
               }

               reportData.FittingFields = fittingParameters;

               return;
            }
             }
        }
        /************************************************************************/
        /* use "K Coefficient" for pipe and "Loss Coefficient" for duct.
           * pressure drop to pressure loss.
           * Element ID and Mark.
           */
        /************************************************************************/
        public void upgrade2(PressureLossReportData data, int nVersion = 2)
        {
            if (data == null || data.Version >= nVersion)
            return;

             string fieldName = LabelUtils.GetLabelFor(BuiltInParameter.RBS_LOSS_COEFFICIENT);
             string newName = LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FITTING_LOSS_KFACTOR_PARAM);

             PressureLossReportHelper helper = PressureLossReportHelper.instance;
             if (helper == null)
            return;

             //total pressure loss table
             {
            if (data.Domain == ReportResource.pipeDomain)
            {
               PressureLossParameter PLParam = helper.getPressureLossParamByName(data.AvailableFields, fieldName);
               if (PLParam != null)
                  PLParam.Name = newName;
            }
             }

             string pressureDrop = LabelUtils.GetLabelFor(BuiltInParameter.RBS_PRESSURE_DROP);
             string strMark = LabelUtils.GetLabelFor(BuiltInParameter.ALL_MODEL_MARK);
             //segment table
             {
            //use "K Coefficient" for pipe and "Loss Coefficient" for duct
            PressureLossParameter PLParam = null;
            if (data.Domain == ReportResource.pipeDomain)
            {
               PLParam = helper.getPressureLossParamByName(data.StraightSegFields, fieldName);
               if (PLParam != null)
                  PLParam.Name = newName;
            }

            //pressure drop to pressure loss
            PLParam = helper.getPressureLossParamByName(data.StraightSegFields, pressureDrop);
            if (PLParam != null)
               PLParam.Name = ReportResource.pressureLoss;

            //Element ID and Mark
            PLParam = helper.getPressureLossParamByName(data.StraightSegFields, strMark);
            int nDisplayOrder = -1;
            if (PLParam != null)
            {
               nDisplayOrder = PLParam.DisplayOrder;
               PLParam.Selected = false;
               PLParam.DisplayOrder = -1;

               PLParam = helper.getPressureLossParamByName(data.StraightSegFields, ReportResource.elementId);
               if (PLParam != null)
               {
                  PLParam.Selected = true;
                  PLParam.DisplayOrder = nDisplayOrder;
               }
            }
             }

             //fitting table
             {
            //use "K Coefficient" for pipe and "Loss Coefficient" for duct
            PressureLossParameter PLParam = null;
            if (data.Domain == ReportResource.pipeDomain)
            {
               PressureLossParameter PLParam1 = helper.getPressureLossParamByName(data.FittingFields, newName);
               if (PLParam1 != null)
                  data.FittingFields.Remove(PLParam1);

               PLParam = helper.getPressureLossParamByName(data.FittingFields, fieldName);
               if (PLParam != null)
               {
                  PLParam.Name = newName;
               }

            }

            //Pressure Drop to Pressure Loss
            PLParam = helper.getPressureLossParamByName(data.FittingFields, pressureDrop);
            if (PLParam != null)
               PLParam.Name = ReportResource.pressureLoss;

            //Element ID and Mark
            PLParam = helper.getPressureLossParamByName(data.FittingFields, strMark);
            int nDisplayOrder = -1;
            if (PLParam != null)
            {
               nDisplayOrder = PLParam.DisplayOrder;
               PLParam.Selected = false;
               PLParam.DisplayOrder = -1;

               PLParam = helper.getPressureLossParamByName(data.FittingFields, ReportResource.elementId);
               if (PLParam != null)
               {
                  PLParam.Selected = true;
                  PLParam.DisplayOrder = nDisplayOrder;
               }
            }
             }

             data.Version = nVersion;
             PressureLossReportDataManager.Instance.save(data);
        }
예제 #16
0
        public override bool save(string fileName, PressureLossReportData reportData)
        {
            HtmlStreamWriter writer = new HtmlStreamWriter();
             try
             {
              // Check if the xslt file exists

              if (!File.Exists(writer.XsltFileName))
              {
              string subMsg = ReportResource.xsltFileSubMsg
            .Replace("%FULLPATH%", writer.XsltFileName );

              UIHelperFunctions.postWarning(
            ReportResource.htmlGenerateTitle,
            ReportResource.xsltFileMsg, subMsg );

              return false;
              }

            PressureLossReportHelper helper = PressureLossReportHelper.instance;
            if (helper == null)
               return false;

            //xml head
            writer.WriteStartDocument(false);

            //root node
            string transXML = "UserPressureLossReport";
            writer.WriteStartElement(transXML);

            //title
            writer.WriteElementString("Title", ReportResource.reportName);

            //domain
            if (helper.Domain == ReportResource.pipeDomain)
               writer.WriteElementString("DomainName", ReportResource.pipeReportName);
            else
               writer.WriteElementString("DomainName", ReportResource.ductReportName);

            //write project info
            ReportProjectInfo proInfo = new ReportProjectInfo();
            proInfo.writeToHTML(writer);

            //each system
            List<MEPSystem> systems = helper.getSortedSystems();
            if (systems == null || systems.Count < 1)
               return false;

            foreach (MEPSystem sysElem in systems)
            {
               if (sysElem == null)
                  continue;

               //system node
               string xmlString = "System";
               writer.WriteStartElement(xmlString);

               //system info: name and info
               MEPSystemInfo systemInfo = new MEPSystemInfo(sysElem);
               systemInfo.writeToHTML(writer);

               //critical path
               if (helper.ReportData.DisplayCriticalPath)
               {
                  string criticalInfo =ReportResource.criticalPath + " : " + MEPSystemInfo.getCriticalPath(sysElem);
                  criticalInfo +=  " ; "+ ReportResource.totalPressureLoss + " : " + MEPSystemInfo.getCriticalPathPressureLoss(sysElem);
                  writer.WriteElementString("CriticalPath", criticalInfo);
               }

               List<MEPSection> sections = new List<MEPSection>();
               MEPSystemInfo.getSectionsFromSystem(sysElem, sections);

               //sections: title and info
               SectionsInfo sectionInfo = new SectionsInfo(sections);
               sectionInfo.writeToHTML(writer);

               //segments: title and info
               SegmentsInfo segmentsInfo = new SegmentsInfo(sections);
               segmentsInfo.writeToHTML(writer);

               //fittings: title and info
               FittingsInfo fittingsInfo = new FittingsInfo(sections);
               fittingsInfo.writeToHTML(writer);

               writer.WriteEndElement();
            }

            writer.WriteEndElement();
            writer.WriteEndDocument();

            writer.Save(fileName);
            return true;
             }
             catch
             {
            writer.Close();
            //delete xml
            File.Delete(writer.XmlFileName);
            UIHelperFunctions.postWarning(ReportResource.htmlGenerateTitle, ReportResource.htmlMsg);
            return false;
             }
        }
        /************************************************************************/
        /* For pipe fitting and accessory, remove coefficient
           *
           *
           */
        /************************************************************************/
        public void upgrade4(PressureLossReportData data, int nVersion = 4)
        {
            if (data == null || data.Version >= nVersion)
            return;

             PressureLossReportHelper helper = PressureLossReportHelper.instance;
             if (helper == null)
            return;

             string fieldLossMethodName = LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FITTING_LOSS_METHOD_PARAM);
             string fieldKFactorName = LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FITTING_LOSS_KFACTOR_PARAM);
             string fieldKTableName = LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FITTING_LOSS_TABLE_PARAM);

             string fieldNewLossMethodName = LabelUtils.GetLabelFor(BuiltInParameter.RBS_PIPE_FITTING_LOSS_METHOD_SERVER_PARAM);

             int nDisplayOrder = -1;
             if (data.Domain == ReportResource.pipeDomain) //Remove the 3 old parameters for pipe
             {
            PressureLossParameter PLParam1 = helper.getPressureLossParamByName(data.FittingFields, fieldLossMethodName);
            if (PLParam1 != null)
            {
               nDisplayOrder = PLParam1.DisplayOrder;
               data.FittingFields.Remove(PLParam1);
            }

            PressureLossParameter PLParam2 = helper.getPressureLossParamByName(data.FittingFields, fieldKFactorName);
            if (PLParam2 != null)
               data.FittingFields.Remove(PLParam2);

            PressureLossParameter PLParam3 = helper.getPressureLossParamByName(data.FittingFields, fieldKTableName);
            if (PLParam3 != null)
               data.FittingFields.Remove(PLParam3);

            //Add the new loss method as selected field for pipe
            PressureLossParameter PLParam = new PressureLossParameter(fieldNewLossMethodName, true, nDisplayOrder, (int)SectionMemberType.Fitting);
            if (!data.FittingFields.Contains(PLParam))
               data.FittingFields.Add(PLParam);
             }

             data.Version = nVersion;
             PressureLossReportDataManager.Instance.save(data);
        }
예제 #18
0
        // TODO
        public override bool save(string fileName, PressureLossReportData reportData)
        {
            try
             {
            PressureLossReportHelper helper = PressureLossReportHelper.instance;
            CsvStreamWriter writer = new CsvStreamWriter();

            //title
            string strTitle = ReportResource.reportName;
            if (helper.Domain == ReportResource.pipeDomain)
               strTitle = ReportResource.pipeReportName;
            else
               strTitle = ReportResource.ductReportName;

            DataTable titleTB = new DataTable();
            titleTB.Columns.Add();
            titleTB.Rows.Add(strTitle);
            writer.AddData(titleTB, 1);
            writer.addOneEmptyRow();

            DataTable tbTitle = new DataTable();
            DataTable tb = new DataTable();

            //Project info
            ReportProjectInfo proInfo = new ReportProjectInfo();
            proInfo.writeToCsv(writer);

            writer.addOneEmptyRow();

            //each system
            List<MEPSystem> systems = helper.getSortedSystems();
            if (systems == null || systems.Count < 1)
               return false;
            foreach (MEPSystem sysElem in systems)
            {
               if (sysElem == null)
                  continue;

               //system name and info
               MEPSystemInfo systemInfo = new MEPSystemInfo(sysElem);
               systemInfo.writeToCsv(writer);

               if (systemInfo.needToWrite())
                  writer.addOneEmptyRow();

               List<MEPSection> sections = new List<MEPSection>();
               MEPSystemInfo.getSectionsFromSystem(sysElem, sections);

               //sections: title and info
               SectionsInfo sectionInfo = new SectionsInfo(sections);
               sectionInfo.writeToCsv(writer);

               if (reportData.DisplayCriticalPath)
               {
                  string criticalInfo = ReportResource.criticalPath + " : " + MEPSystemInfo.getCriticalPath(sysElem);
                  criticalInfo += " ; " + ReportResource.totalPressureLoss + " : " + MEPSystemInfo.getCriticalPathPressureLoss(sysElem);

                  writer.addTitleRow(criticalInfo);
               }

               writer.addOneEmptyRow();

               //segments: title and info
               SegmentsInfo segmentsInfo = new SegmentsInfo(sections);
               segmentsInfo.writeToCsv(writer);
               if (segmentsInfo.needToWrite())
                  writer.addOneEmptyRow();

               //fittings: title and info
               FittingsInfo fittingsInfo = new FittingsInfo(sections);
               fittingsInfo.writeToCsv(writer);
               if (fittingsInfo.needToWrite())
                  writer.addOneEmptyRow();
            }

            writer.Save(fileName);
            return true;
             }
             catch(Exception e)
             {
            if (e.Message == ReportConstants.failed_to_delete)
            {
               string subMsg = ReportResource.csvSubMsg.Replace("%FULLPATH%", fileName);
               UIHelperFunctions.postWarning(ReportResource.csvGenerateTitle, ReportResource.csvMsg, subMsg);
            }
            else
               UIHelperFunctions.postWarning(ReportResource.csvGenerateTitle, ReportResource.csvMsg);
            return false;
             }
        }
 public void upgrades(PressureLossReportData data)
 {
     upgrade1(data);
      upgrade2(data);
      upgrade3(data); // update old loss method and remove coefficient from duct fitting
      upgrade4(data); // update old loss method and remove coefficient from pipe fitting
      //add any upgrade here
 }
 public void initializeData(PartialReportSettingsDlgType eInputType, PressureLossReportData inputReportData)
 {
     eType = eInputType;
      reportData = inputReportData;
      fillingFields(eType);
 }
        private void comboBoxFormat_SelectedIndexChanged(object sender, EventArgs e)
        {
            PressureLossReportDataManager reportDataMgr = PressureLossReportDataManager.Instance;
             settings = reportDataMgr.getData(this.comboBoxFormat.SelectedItem.ToString());
             if (hasFittingsInSystem() && (settings.FittingFields == null || settings.FittingFields.Count < 1))
             {
            FittingsInfo.generateFittingFields(settings);
             }

             fillSettingsControlsFromFormat(settings);
        }