def model_has_family(family_name, doc=None): bip_id = DB.ElementId(DB.BuiltInParameter.SYMBOL_FAMILY_NAME_PARAM) param_value_provider = DB.ParameterValueProvider(bip_id) value_rule = DB.FilterStringRule(param_value_provider, DB.FilterStringEquals(), family_name, True) symbol_name_filter = DB.ElementParameterFilter(value_rule) collector = DB.FilteredElementCollector(doc or HOST_APP.doc)\ .WherePasses(symbol_name_filter) return hasattr(collector, 'Count') and collector.Count > 0
def get_fam_types(family_name): fam_bip_id = DB.ElementId(DB.BuiltInParameter.SYMBOL_FAMILY_NAME_PARAM) fam_bip_provider = DB.ParameterValueProvider(fam_bip_id) fam_filter_rule = DB.FilterStringRule(fam_bip_provider, DB.FilterStringEquals(), family_name, True) fam_filter = DB.ElementParameterFilter(fam_filter_rule) collector = DB.FilteredElementCollector(revit.doc) \ .WherePasses(fam_filter) \ .WhereElementIsElementType() return collector
def get_biparam_stringequals_filter(bip_paramvalue_dict): filters = [] for bip, fvalue in bip_paramvalue_dict.items(): bip_id = DB.ElementId(bip) bip_valueprovider = DB.ParameterValueProvider(bip_id) bip_valuerule = DB.FilterStringRule(bip_valueprovider, DB.FilterStringEquals(), fvalue, True) filters.append(bip_valuerule) if filters: return DB.ElementParameterFilter( framework.List[DB.FilterRule](filters)) else: raise PyRevitException('Error creating filters.')
def get_elements_by_param_value(param_name, param_value, inverse=False, doc=None): doc = doc or HOST_APP.doc param_id = get_project_parameter_id(param_name) if param_id: pvprov = DB.ParameterValueProvider(param_id) pfilter = DB.FilterStringEquals() vrule = DB.FilterStringRule(pvprov, pfilter, param_value, True) if inverse: vrule = DB.FilterInverseRule(vrule) param_filter = DB.ElementParameterFilter(vrule) return DB.FilteredElementCollector(doc)\ .WherePasses(param_filter)\ .ToElements() else: return []
def get_vp_by_name(name, doc=revit.doc): # bip_id = DB.ElementId(DB.BuiltInParameter.VIEWPORT_ATTR_SHOW_LABEL) bip_provider = DB.ParameterValueProvider(bip_id) rule = DB.FilterIntegerRule(bip_provider, DB.FilterNumericGreaterOrEqual(), 0) param_filter = DB.ElementParameterFilter(rule) type_bip_id = DB.ElementId(DB.BuiltInParameter.ALL_MODEL_TYPE_NAME) type_bip_provider = DB.ParameterValueProvider(type_bip_id) type_filter_rule = DB.FilterStringRule(type_bip_provider, DB.FilterStringEquals(), name, True) type_filter = DB.ElementParameterFilter(type_filter_rule) and_filter = DB.LogicalAndFilter(param_filter, type_filter) collector = DB.FilteredElementCollector(doc) \ .WherePasses(and_filter) \ .WhereElementIsElementType()\ .FirstElement() return collector
# para = para.AsString() #converts object into string # para = para.lower() # if para == target_tag.lower(): # wall_id.append(wall.Id) # returns element id # wall_id_list = List[DB.ElementId](wall_id) # try: # uidoc.Selection.SetElementIds(wall_id_list) # except : # forms.alert("Tag \"{0}\" not found!!!".format(target_tag)) # pass if True: param_id = DB.ElementId(target_parameter) param_prov = DB.ParameterValueProvider(param_id) param_equality = DB.FilterStringEquals() # equality class value_rule = DB.FilterStringRule(param_prov,param_equality,target_tag ,True) param_filter = DB.ElementParameterFilter(value_rule) elements = DB.FilteredElementCollector(doc)\ .OfCategory(target_category)\ .WhereElementIsNotElementType()\ .WherePasses(param_filter)\ .ToElementIds() # select category based on the rule if elements: uidoc.Selection.SetElementIds(elements) else: forms.alert("Tag \"{0}\" not found!!!".format(target_tag)) except: # exception to deal with user exiting form
type_names = [] for lc in legend_components: component_name = lc.get_Parameter( DB.BuiltInParameter.LEGEND_COMPONENT).AsValueString() fragments = component_name.split(" : ") fam_names.append(fragments[1]) type_names.append(fragments[-1]) # find types of family and type types_on_legend = [] for f, t in izip(fam_names, type_names): fam_bip_id = DB.ElementId(DB.BuiltInParameter.SYMBOL_FAMILY_NAME_PARAM) fam_bip_provider = DB.ParameterValueProvider(fam_bip_id) fam_filter_rule = DB.FilterStringRule(fam_bip_provider, DB.FilterStringEquals(), f, True) fam_filter = DB.ElementParameterFilter(fam_filter_rule) type_bip_id = DB.ElementId(DB.BuiltInParameter.ALL_MODEL_TYPE_NAME) type_bip_provider = DB.ParameterValueProvider(type_bip_id) type_filter_rule = DB.FilterStringRule(type_bip_provider, DB.FilterStringEquals(), t, True) type_filter = DB.ElementParameterFilter(type_filter_rule) and_filter = DB.LogicalAndFilter(fam_filter, type_filter) collector = DB.FilteredElementCollector(revit.doc) \ .WherePasses(and_filter) \ .WhereElementIsElementType() \ .FirstElement()
assetElem = revit.doc.GetElement( selected_mat.AppearanceAssetId) assetName = mat.pop("Asset Name") duplicate_asset = assetElem.Duplicate(assetName.lower()) new_mat.AppearanceAssetId = duplicate_asset.Id schema_name = mat.pop("Base Schema") else: message = ( '"%s" already exists. Attempting to edit parameters' % mat_name) logger.warning(message) # If it already exists, collect it and modify it namePar = DB.ParameterValueProvider( DB.ElementId(DB.BuiltInParameter.MATERIAL_NAME)) fRule = DB.FilterStringRule(namePar, DB.FilterStringEquals(), mat_name, True) filter = DB.ElementParameterFilter(fRule) new_mat = (DB.FilteredElementCollector(revit.doc).OfClass( DB.Material).WherePasses(filter).FirstElement()) assetElem = revit.doc.GetElement(new_mat.AppearanceAssetId) schema_name = assetElem.GetRenderingAsset().Name del mat["Base Schema"] # ----- IDENTITY TAB ----- # Description mat_description = mat.pop("Description") if mat_description: description = new_mat.get_Parameter( DB.BuiltInParameter.ALL_MODEL_DESCRIPTION) description.Set(mat_description)