Пример #1
0
 private void FindPhase(ParameterProperties pp, bool isFirstParam)
 {
     try
     {
         foreach (ElementId eId in pp.ElementIDValues)
         {
             if (phases.ContainsKey(eId.IntegerValue))
             {
                 Phase phase = phases[eId.IntegerValue];
                 if (isFirstParam)
                 {
                     cmbValue1.Items.Add(phase.Name);
                 }
                 else
                 {
                     cmbValue2.Items.Add(phase.Name);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         string message = ex.Message;
     }
 }
Пример #2
0
 private void FindWorkset(ParameterProperties pp, bool isFirstParam)
 {
     try
     {
         foreach (int worksetId in pp.IntValues)
         {
             if (worksets.ContainsKey(worksetId))
             {
                 Workset workset = worksets[worksetId];
                 if (isFirstParam)
                 {
                     cmbValue1.Items.Add(workset.Name);
                 }
                 else
                 {
                     cmbValue2.Items.Add(workset.Name);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         string message = ex.Message;
     }
 }
Пример #3
0
        private void CollectParameterValues(Element element)
        {
            try
            {
                if (null != element.Category)
                {
                    Category category = element.Category;
                    Dictionary <int, ParameterProperties> paramDictionary = new Dictionary <int, ParameterProperties>();
                    if (parameterMaps.ContainsKey(category.Id.IntegerValue))
                    {
                        paramDictionary = parameterMaps[category.Id.IntegerValue];
                        foreach (Parameter param in element.Parameters)
                        {
                            if (param.StorageType == StorageType.ElementId)
                            {
                                if (param.Id.IntegerValue != (int)BuiltInParameter.PHASE_CREATED && param.Id.IntegerValue != (int)BuiltInParameter.PHASE_DEMOLISHED)
                                {
                                    continue;
                                }
                            }

                            if (paramDictionary.ContainsKey(param.Id.IntegerValue))
                            {
                                //paramDictionary[param.Id.IntegerValue].AddValue(param);
                                paramDictionary.Remove(param.Id.IntegerValue);
                            }
                            ParameterProperties pp = new ParameterProperties(param);
                            pp.AddValue(param);
                            paramDictionary.Add(pp.ParamId, pp);
                        }
                        parameterMaps.Remove(category.Id.IntegerValue);
                    }
                    else
                    {
                        foreach (Parameter param in element.Parameters)
                        {
                            if (param.StorageType == StorageType.ElementId)
                            {
                                if (param.Id.IntegerValue != (int)BuiltInParameter.PHASE_CREATED && param.Id.IntegerValue != (int)BuiltInParameter.PHASE_DEMOLISHED)
                                {
                                    continue;
                                }
                            }

                            if (param.Definition.Name.Contains("Extensions."))
                            {
                                continue;
                            }
                            if (!paramDictionary.ContainsKey(param.Id.IntegerValue))
                            {
                                ParameterProperties pp = new ParameterProperties(param);
                                pp.AddValue(param);
                                paramDictionary.Add(pp.ParamId, pp);
                            }
                        }
                    }
                    parameterMaps.Add(category.Id.IntegerValue, paramDictionary);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to collect parameter information.\n" + ex.Message, "Collect Parameter Values", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
Пример #4
0
        private ElementFilter CreateParamFilter(int paramId, string strOperator, string paramValue, bool emptyValue)
        {
            try
            {
                ParameterProperties    pp  = selectedParameters[paramId];
                ParameterValueProvider pvp = new ParameterValueProvider(new ElementId(pp.ParamId));

                switch (pp.ParamStorageType)
                {
                case StorageType.ElementId:
                    if (pp.ParamName == "Phase Created" || pp.ParamName == "Phase Demolished")
                    {
                        FilterNumericRuleEvaluator fnre1 = new FilterNumericEquals();

                        var       phaseId   = from phase in phases where phase.Value.Name == paramValue select phase.Key;
                        int       pId       = phaseId.First();
                        ElementId ruleValId = new ElementId(pId);

                        FilterRule filterRule1 = new FilterElementIdRule(pvp, fnre1, ruleValId);

                        if (strOperator == "does not equal")
                        {
                            return(new ElementParameterFilter(filterRule1, true));
                        }
                        else
                        {
                            return(new ElementParameterFilter(filterRule1));
                        }
                    }
                    return(null);

                case StorageType.Double:
                    if (emptyValue)
                    {
                        FilterNumericRuleEvaluator fnre       = new FilterNumericGreater();
                        FilterDoubleRule           doubleRule = new FilterDoubleRule(pvp, fnre, 0, double.Epsilon);
                        return(new ElementParameterFilter(doubleRule, true));
                    }

                    FilterNumericRuleEvaluator fnre2 = FindFilterNumericRuleEvaluator(strOperator);
                    double dblValue = 0;
                    if (!string.IsNullOrEmpty(paramValue))
                    {
                        double.TryParse(paramValue, out dblValue);
                    }

                    FilterRule filterRule2 = new FilterDoubleRule(pvp, fnre2, dblValue, double.Epsilon);

                    if (strOperator == "does not equal")
                    {
                        return(new ElementParameterFilter(filterRule2, true));
                    }
                    else
                    {
                        return(new ElementParameterFilter(filterRule2));
                    }

                case StorageType.Integer:
                    if (emptyValue)
                    {
                        FilterNumericRuleEvaluator fnre        = new FilterNumericGreater();
                        FilterIntegerRule          integerRule = new FilterIntegerRule(pvp, fnre, 0);
                        return(new ElementParameterFilter(integerRule, true));
                    }
                    FilterNumericRuleEvaluator fnre3 = FindFilterNumericRuleEvaluator(strOperator);

                    int intValue = 0;
                    if (pp.ParamName == "Workset")
                    {
                        var worksetId = from ws in worksets where ws.Value.Name == paramValue select ws.Key;
                        intValue = worksetId.First();
                    }
                    else if (!string.IsNullOrEmpty(paramValue))
                    {
                        int.TryParse(paramValue, out intValue);
                    }

                    FilterRule filterRule3 = new FilterIntegerRule(pvp, fnre3, intValue);

                    if (strOperator == "does not equal")
                    {
                        return(new ElementParameterFilter(filterRule3, true));
                    }
                    else
                    {
                        return(new ElementParameterFilter(filterRule3));
                    }

                case StorageType.String:
                    if (emptyValue)
                    {
                        FilterStringRuleEvaluator fsre       = new FilterStringGreater();
                        FilterStringRule          stringRule = new FilterStringRule(pvp, fsre, "", false);
                        return(new ElementParameterFilter(stringRule, true));
                    }

                    FilterStringRuleEvaluator fnre4 = FindFilterStringRuleEvaluator(strOperator);
                    string           strValue       = paramValue;
                    FilterStringRule filterRule4    = new FilterStringRule(pvp, fnre4, strValue, false);

                    if (strOperator.Contains("does not"))
                    {
                        return(new ElementParameterFilter(filterRule4, true));
                    }
                    else
                    {
                        return(new ElementParameterFilter(filterRule4, false));
                    }

                default:
                    return(null);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to create parameter filters.\n" + ex.Message, "CreateParamFilter", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            return(null);
        }
Пример #5
0
        private void cmbParamName2_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                cmbOperation2.Items.Clear();
                cmbOperation2.ResetText();
                cmbValue2.Items.Clear();
                cmbValue2.ResetText();

                if (null != cmbParamName2.SelectedValue)
                {
                    int paramId = (int)cmbParamName2.SelectedValue;
                    if (selectedParameters.ContainsKey(paramId))
                    {
                        ParameterProperties pp = selectedParameters[paramId];
                        switch (pp.ParamStorageType)
                        {
                        case StorageType.ElementId:
                            cmbOperation2.Items.Add("equals");
                            cmbOperation2.Items.Add("does not equal");
                            cmbOperation2.Items.Add("is greater than");
                            cmbOperation2.Items.Add("is greater than or equal to");
                            cmbOperation2.Items.Add("is less than");
                            cmbOperation2.Items.Add("is less than or equal to");
                            cmbOperation2.Items.Add("contains");
                            cmbOperation2.Items.Add("does not contain");
                            cmbOperation2.Items.Add("begins with");
                            cmbOperation2.Items.Add("does not begin with");
                            cmbOperation2.Items.Add("ends with");
                            cmbOperation2.Items.Add("does not end with");

                            if (pp.ParamName == "Phase Created" || pp.ParamName == "Phase Demolished")
                            {
                                FindPhase(pp, false);
                            }
                            break;

                        case StorageType.Double:
                            cmbOperation2.Items.Add("equals");
                            cmbOperation2.Items.Add("does not equal");
                            cmbOperation2.Items.Add("is greater than");
                            cmbOperation2.Items.Add("is greater than or equal to");
                            cmbOperation2.Items.Add("is less than");
                            cmbOperation2.Items.Add("is less than or equal to");

                            foreach (double dbl in pp.DoubleValues)
                            {
                                cmbValue2.Items.Add(dbl);
                            }
                            break;

                        case StorageType.Integer:
                            cmbOperation2.Items.Add("equals");
                            cmbOperation2.Items.Add("does not equal");
                            cmbOperation2.Items.Add("is greater than");
                            cmbOperation2.Items.Add("is greater than or equal to");
                            cmbOperation2.Items.Add("is less than");
                            cmbOperation2.Items.Add("is less than or equal to");

                            if (pp.ParamName == "Workset")
                            {
                                FindWorkset(pp, false);
                            }
                            else
                            {
                                foreach (int intVal in pp.IntValues)
                                {
                                    cmbValue2.Items.Add(intVal);
                                }
                            }

                            break;

                        case StorageType.String:
                            cmbOperation2.Items.Add("equals");
                            cmbOperation2.Items.Add("does not equal");
                            cmbOperation2.Items.Add("is greater than");
                            cmbOperation2.Items.Add("is greater than or equal to");
                            cmbOperation2.Items.Add("is less than");
                            cmbOperation2.Items.Add("is less than or equal to");
                            cmbOperation2.Items.Add("contains");
                            cmbOperation2.Items.Add("does not contain");
                            cmbOperation2.Items.Add("begins with");
                            cmbOperation2.Items.Add("does not begin with");
                            cmbOperation2.Items.Add("ends with");
                            cmbOperation2.Items.Add("does not end with");

                            foreach (string strVal in pp.StringValues)
                            {
                                cmbValue2.Items.Add(strVal);
                            }
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
        }
Пример #6
0
        private void DisplayParameter()
        {
            try
            {
                cmbParamName1.DataSource = null;
                cmbParamName2.DataSource = null;

                cmbParamName1.Items.Clear();
                cmbOperation1.Items.Clear();
                cmbValue1.Items.Clear();
                cmbParamName2.Items.Clear();
                cmbOperation2.Items.Clear();
                cmbValue2.Items.Clear();

                selectedParameters = new Dictionary <int, ParameterProperties>();
                if (listViewCategory.CheckedItems.Count > 0)
                {
                    ListViewItem firstItem = listViewCategory.CheckedItems[0];
                    if (null != firstItem.Tag)
                    {
                        Category category = firstItem.Tag as Category;
                        if (parameterMaps.ContainsKey(category.Id.IntegerValue))
                        {
                            selectedParameters = parameterMaps[category.Id.IntegerValue];
                        }
                    }

                    if (listViewCategory.CheckedItems.Count > 1)
                    {
                        for (int i = 1; i < listViewCategory.CheckedItems.Count; i++)
                        {
                            ListViewItem item = listViewCategory.CheckedItems[i];
                            if (null != item.Tag)
                            {
                                Category category = item.Tag as Category;
                                if (parameterMaps.ContainsKey(category.Id.IntegerValue))
                                {
                                    Dictionary <int, ParameterProperties> paramDictionary = new Dictionary <int, ParameterProperties>();
                                    paramDictionary = parameterMaps[category.Id.IntegerValue];

                                    var commonDictionary = selectedParameters.Keys.Intersect(paramDictionary.Keys).ToDictionary(t => t, t => selectedParameters[t]);
                                    selectedParameters = commonDictionary.ToDictionary(x => x.Key, x => x.Value);

                                    //to fill out union of parameter values
                                    List <int> paramIds = selectedParameters.Keys.ToList();
                                    foreach (int paramId in paramIds)
                                    {
                                        ParameterProperties pp = selectedParameters[paramId];
                                        if (paramDictionary.ContainsKey(paramId))
                                        {
                                            ParameterProperties tempPP = paramDictionary[paramId];
                                            switch (pp.ParamStorageType)
                                            {
                                            case StorageType.ElementId:
                                                pp.ElementIDValues = pp.ElementIDValues.Union(tempPP.ElementIDValues).ToList();
                                                break;

                                            case StorageType.Double:
                                                pp.DoubleValues = pp.DoubleValues.Union(tempPP.DoubleValues).ToList();
                                                break;

                                            case StorageType.Integer:
                                                pp.IntValues = pp.IntValues.Union(tempPP.IntValues).ToList();
                                                break;

                                            case StorageType.String:
                                                pp.StringValues = pp.StringValues.Union(tempPP.StringValues).ToList();
                                                break;
                                            }
                                        }
                                        selectedParameters.Remove(paramId);
                                        selectedParameters.Add(pp.ParamId, pp);
                                    }
                                }
                            }
                        }
                    }

                    if (selectedParameters.Count > 0)
                    {
                        BindingList <ParameterProperties> paramProperties1 = new BindingList <ParameterProperties>();
                        BindingList <ParameterProperties> paramProperties2 = new BindingList <ParameterProperties>();

                        var sortedDictionary = (from entry in selectedParameters orderby entry.Value.ParamName ascending select entry).ToDictionary(pair => pair.Key, pair => pair.Value);
                        foreach (int paramId in sortedDictionary.Keys)
                        {
                            ParameterProperties pp = sortedDictionary[paramId];
                            paramProperties1.Add(pp);
                            paramProperties2.Add(pp);
                        }

                        cmbParamName1.DataSource    = paramProperties1;
                        cmbParamName1.ValueMember   = "ParamId";
                        cmbParamName1.DisplayMember = "ParamName";

                        cmbParamName2.DataSource    = paramProperties2;
                        cmbParamName2.ValueMember   = "ParamId";
                        cmbParamName2.DisplayMember = "ParamName";
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
        }