private void FillData()
        {
            PressureLossReportHelper helper = PressureLossReportHelper.instance;

            if (helper == null)
            {
                return;
            }

            if (helper.Domain == ReportResource.ductDomain)
            {
                filterCategories.Add(Autodesk.Revit.DB.BuiltInCategory.OST_DuctSystem);
                this.Text = ReportResource.ductSystemSelectorDlgTitle;
            }
            else if (helper.Domain == ReportResource.pipeDomain)
            {
                filterCategories.Add(Autodesk.Revit.DB.BuiltInCategory.OST_PipingSystem);
                this.Text = ReportResource.pipeSystemSelectorDlgTitle;
            }

            //default add all valid system type to checked system type
            foreach (Autodesk.Revit.DB.BuiltInCategory categoryId in filterCategories)
            {
                ICollection <Autodesk.Revit.DB.Element> founds = helper.getCategoryTypeElements(categoryId);
                foreach (Autodesk.Revit.DB.MEPSystemType sysType in founds)
                {
                    if (helper.isValidSystemType(sysType))
                    {
                        allValidSystemType.Add(sysType);
                    }
                }
            }

            checkedSystemType = helper.getSelectedSystemTypes();
            if (checkedSystemType == null || checkedSystemType.Count < 1)
            {
                if (checkedSystemType == null)
                {
                    checkedSystemType = new List <MEPSystemType>();
                }
                foreach (Autodesk.Revit.DB.MEPSystemType sysType in allValidSystemType)
                {
                    checkedSystemType.Add(sysType);
                }
            }

            //sort the system types
            SortSystemTypeByNameCamparer systemTypeCompare = new SortSystemTypeByNameCamparer();

            checkedSystemType.Sort(systemTypeCompare);
            allValidSystemType.Sort(systemTypeCompare);


            foreach (Autodesk.Revit.DB.BuiltInCategory categoryId in filterCategories)
            {
                ICollection <Autodesk.Revit.DB.Element> founds = helper.getCategoryElements(categoryId);
                addItemsToCheckList(helper, founds);
            }
        }
        private void addItemsToCheckList(PressureLossReportHelper helper, ICollection <Autodesk.Revit.DB.Element> founds)
        {
            //get the selected systems first
            ElementSet selSystems = new ElementSet();

            helper.getSelectedSystems(selSystems);

            List <string> checkedItems = new List <string>();

            foreach (Element elem in selSystems)
            {
                MEPSystem mepSys = elem as MEPSystem;
                if (mepSys == null)
                {
                    continue;
                }

                checkedItems.Add(mepSys.Name);
            }

            List <MEPSystemType> selSystemTypes = helper.getSelectedSystemTypes(true);

            if ((selSystemTypes == null || selSystemTypes.Count < 1) && (checkedItems == null || checkedItems.Count < 1))
            {
                bool bCheckAll = true;
                if (helper.isSelectInValidSystemType())
                {
                    bCheckAll = false;
                }

                addItemsToCheckList(helper, founds, null, bCheckAll);
            }
            else
            {
                foreach (Autodesk.Revit.DB.Element elem in founds)
                {
                    Autodesk.Revit.DB.MEPSystem     mepSysElem = elem as Autodesk.Revit.DB.MEPSystem;
                    Autodesk.Revit.DB.MEPSystemType mepSysType = helper.getSystemType(helper.Doc, mepSysElem);

                    if (isCheckedSystemType(mepSysType) && helper.isValidSystem(helper.Doc, mepSysElem, helper.Domain) && isCalculationOn(helper.Doc, mepSysElem))
                    {
                        if (selSystemTypes != null && PressureLossReportHelper.isSystemTypeInList(selSystemTypes, mepSysType))
                        {
                            checkedItems.Add(mepSysElem.Name);
                        }
                    }
                }

                addItemsToCheckList(helper, founds, checkedItems);
            }
        }