Trouble getting shared parameter values

Trouble getting shared parameter values

Anonymous
Not applicable
425 Views
2 Replies
Message 1 of 3

Trouble getting shared parameter values

Anonymous
Not applicable

Hello! I am having a lot of trouble getting shared parameter values from my application I have been working on. This is the code that I have. It is retrieving the Built-In parameters from the System family but not the shared parameters that are inside of it. 

            ElementCategoryFilter filter = new ElementCategoryFilter(BuiltInCategory.OST_Wire);
            FilteredElementCollector collector = new FilteredElementCollector(doc);
            IList<Element> wire = collector.WherePasses(filter).ToElements();
            String prompt = "The wire in the current document are:\n";
            List<ElementId> lstFamilySymbolIDs = new List<ElementId>();

            foreach (Element e in wire)
            {
                prompt += "\n";
                prompt += e.Name + "\n";
              
                prompt += e.Id + "\n";
                lstFamilySymbolIDs.Add(e.Id);

                Parameter p = e.LookupParameter("Type");
                prompt += GetParameterValue(p) + "\n";

                Parameter p7 = e.LookupParameter("Fab - Area");
                prompt += GetParameterValue(p7) + "test" + "\n";

                prompt += "\n";

            }
            TaskDialog.Show("revit", prompt);
0 Likes
Accepted solutions (1)
426 Views
2 Replies
Replies (2)
Message 2 of 3

naveen.kumar.t
Autodesk Support
Autodesk Support
Accepted solution

Hi @Anonymous ,

try using the below code

 

ElementCategoryFilter filter = new ElementCategoryFilter(BuiltInCategory.OST_Wire);
            FilteredElementCollector collector = new FilteredElementCollector(doc);
            IList<Element> wire = collector.WherePasses(filter).ToElements();
IList<Parameter> sharedParameters = new List<Parameter>();

//ACCESS INSTANCE SHARED PARAMETER foreach(Element e in wire) { foreach(Parameter p in e.Parameters) { if(p.IsShared) { sharedParameters.Add(p); } } }


//ACCESS TYPE SHARED PARAMETER
ElementType ET = doc.GetElement(e.GetTypeId()) as ElementType; foreach(Parameter P in ET.Parameters) { if(P.IsShared) { sharedParameters.Add(p); } }

To get the values you can use

if(p.IsShared)
                        {
                            switch (p.StorageType)
                            {
                                case StorageType.None:
                                    break;

                                case StorageType.Double:
                                    double parameterValue = p.AsDouble();
                                    break;

                                case StorageType.Integer:
                                      int parameterValue = p.AsInteger();
                                    break;

                                case StorageType.ElementId:
                                      ElementId  parameterValue = p.AsElementId();
                                    break;
                                case StorageType.String:
                                     string   parameterValue = p.AsValueString();
                                    break;
                            }

                        }

I hope this helps.

 


Naveen Kumar T
Developer Technical Services
Autodesk Developer Network

0 Likes
Message 3 of 3

Anonymous
Not applicable

Exactly what I was looking for. Thank you so much!

0 Likes