Ejemplo n.º 1
0
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
Ejemplo n.º 2
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
Ejemplo n.º 3
0
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.')
Ejemplo n.º 4
0
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 []
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
    #         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
Ejemplo n.º 7
0
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()
Ejemplo n.º 8
0
                    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)