Hello,
I've worked on my function to use cetegory filtering, I'm not sure how to filter the parameter? However my program is still as slow as before, painfully slow :-(. Any more ideas? You might recognise some of your code from your blog, Thanks 🙂
Thanks so much.
Currently I have:
Public Shared Function GetAllElementsFiltered(ByRef activeDBdoc As Document,
ByVal objCategory As Category) As FilteredElementCollector
Dim categories As Categories = activeDBdoc.Settings.Categories
Dim bics As Array = [Enum].GetValues(GetType(BuiltInCategory))
For Each bic As BuiltInCategory In bics
Try
Dim objBICategory As Category = categories.Item(bic)
If objBICategory.Name = objCategory.Name Then
Dim col As FilteredElementCollector = New FilteredElementCollector(activeDBdoc).WhereElementIsElementType().OfCategory(bic) Return col
Exit Function
End If
Catch ex As Exception
Msgbox (ex.message)
End Try
Next
Return Nothing
End Function
Public Shared Function GetCategorySetFromBinding(ByVal objBinding As Autodesk.Revit.DB.Binding) As CategorySet
If BindingIsInstance(objBinding) Then
Return TryCast(objBinding, InstanceBinding).Categories
Else
Return TryCast(objBinding, TypeBinding).Categories
End If
End Function
Public Shared Function BindingIsInstance(ByVal objbinding As Autodesk.Revit.DB.Binding) As Boolean
Return TryCast(objbinding, InstanceBinding) IsNot Nothing
End Function
Public Shared Function TryGetParameterFromDefinitionUsingElements(ByVal activeDBdoc As Document,
ByVal objDefinition As Definition,
ByVal objBinding As Autodesk.Revit.DB.Binding) As Parameter
Dim objCategorySet As CategorySet = GetCategorySetFromBinding(objBinding)
For Each objCategory As Category In objCategorySet
Dim eleactiveDBdoc As FilteredElementCollector = GetAllElementsFiltered(activeDBdoc, objCategory)
Dim ElementIter As IEnumerator = eleactiveDBdoc.GetEnumerator
ElementIter.Reset()
Do While ElementIter.MoveNext
Dim objElement As Autodesk.Revit.DB.Element = ElementIter.Current
Try
Dim objElementParameter As Parameter = objElement.Parameter(objDefinition.Name)
If objElementParameter IsNot Nothing Then
Return objElementParameter
Exit Function
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
Loop
Next
Return Nothing
End Function