Beispiel #1
0
def process_sets(element_list):
    el_sets = DefaultOrderedDict(list)

    # add all elements as first set, for totals of all elements
    el_sets['All Selected Elements'].extend(element_list)

    # separate elements into sets based on their type
    for el in element_list:
        if hasattr(el, 'LineStyle'):
            el_sets[el.LineStyle.Name].append(el)
        else:
            eltype = revit.doc.GetElement(el.GetTypeId())
            wrapped_eltype = revit.ElementWrapper(eltype)
            el_sets[wrapped_eltype.name].append(el)

    return el_sets
Beispiel #2
0
def removeallemptyelevationmarkers():
    with revit.Transaction('Remove All Elevation Markers'):
        print('REMOVING ELEVATION MARKERS...\n')
        elevmarkers = DB.FilteredElementCollector(revit.doc)\
                        .OfClass(DB.ElevationMarker)\
                        .WhereElementIsNotElementType()\
                        .ToElements()

        for em in elevmarkers:
            if em.CurrentViewCount == 0:
                emtype = revit.doc.GetElement(em.GetTypeId())
                print('ID: {0}\tELEVATION TYPE: {1}'
                      .format(em.Id,
                              revit.ElementWrapper(emtype).name))
                try:
                    revit.doc.Delete(em.Id)
                except Exception as e:
                    logger.error('Error removing marker: {} | {}'
                                 .format(em.Id, e))
                    continue
Beispiel #3
0
    def _ask_for_titleblock(self):
        no_tb_option = 'No Title Block'
        titleblocks = DB.FilteredElementCollector(revit.doc)\
                        .OfCategory(DB.BuiltInCategory.OST_TitleBlocks)\
                        .WhereElementIsElementType()\
                        .ToElements()

        tblock_dict = {
            '{}: {}'.format(tb.FamilyName,
                            revit.ElementWrapper(tb).name): tb
            for tb in titleblocks
        }
        options = [no_tb_option]
        options.extend(tblock_dict.keys())
        selected_titleblocks = forms.SelectFromList.show(options,
                                                         multiselect=False)
        if selected_titleblocks:
            if no_tb_option not in selected_titleblocks:
                self._titleblock_id = tblock_dict[selected_titleblocks[0]].Id
            else:
                self._titleblock_id = DB.ElementId.InvalidElementId
            return True

        return False
Beispiel #4
0
            revit.doc.GetElement(v.ViewId).ViewName))

elif selected_switch == 'Element Types':
    all_types = \
        revit.query.get_types_by_class(DB.ElementType, doc=revit.doc)
    etypes_dict = defaultdict(list)
    for etype in all_types:
        if etype.FamilyName:
            etypes_dict[str(etype.FamilyName).strip()].append(etype)

    for etype_name in sorted(etypes_dict.keys()):
        etypes = etypes_dict[etype_name]
        output.print_md('**{}**'.format(etype_name))
        for et in etypes:
            print('\t{} {}'.format(output.linkify(et.Id),
                                   revit.ElementWrapper(et).name))

elif selected_switch == 'Family Symbols':
    cl = DB.FilteredElementCollector(revit.doc)
    eltype_list = cl.OfClass(DB.ElementType).ToElements()

    for et in eltype_list:
        wrapperd_et = revit.ElementWrapper(et)
        print(wrapperd_et.name, et.FamilyName)

elif selected_switch == 'Levels':
    levelslist = DB.FilteredElementCollector(revit.doc)\
                 .OfCategory(DB.BuiltInCategory.OST_Levels)\
                 .WhereElementIsNotElementType()

    for i in levelslist:
Beispiel #5
0
    def __hash__(self):
        return hash(self.type_name)

    def __lt__(self, other):
        if self.sort_alphabetically or other.sort_alphabetically:
            return self.type_name < other.type_name
        else:
            return self.number_list < other.number_list


# collect all symbols already loaded
loaded_symbols = set()
for sym_id in fam_symbol.GetFamilySymbolIds():
    fam_sym = revit.doc.GetElement(sym_id)
    fam_sym_name = revit.ElementWrapper(fam_sym).name
    sortable_sym = SmartSortableFamilyType(fam_sym_name)
    logger.debug('Loaded Type: {}'.format(sortable_sym))
    loaded_symbols.add(sortable_sym)

# get family document and verify the file exists
fam_doc = revit.doc.EditFamily(fam_symbol)
fam_doc_path = fam_doc.PathName
if not op.exists(fam_doc_path):
    forms.alert(
        'Can not file original family file at\n{}'.format(fam_doc_path))
    logger.debug(
        'Can not file original family file at {}'.format(fam_doc_path))
    script.exit()
else:
    logger.debug('Loading family from: {}'.format(fam_doc_path))
Beispiel #6
0
"""Get a total count and types of parking elements in the current view."""

from pyrevit.framework import List
from pyrevit import revit, DB


parkings = DB.FilteredElementCollector(revit.doc, revit.activeview.Id)\
             .OfCategory(DB.BuiltInCategory.OST_Parking)\
             .WhereElementIsNotElementType()\
             .ToElementIds()

print('PARKING COUNT: {0}'.format(len(list(parkings))))

ptypesdic = {}

for pid in parkings:
    ptype = revit.doc.GetElement(revit.doc.GetElement(pid).GetTypeId())
    wrapped_ptype = revit.ElementWrapper(ptype)
    ptname = wrapped_ptype.name
    if ptname in ptypesdic:
        ptypesdic[ptname] += 1
    else:
        ptypesdic[ptname] = 1

print('PARKING TYPES AND COUNTS')
for ptname, ptcount in ptypesdic.items():
    print('TYPE: {0}COUNT: {1}'.format(ptname.ljust(35), ptcount))
Beispiel #7
0
# Print Title and Report Info
console.print_md('# {}'.format(report_title))
print('Project Name: {project}\nDate: {date}'.format(project=report_project,
                                                     date=report_date))
console.insert_divider()

# Print information about all existing revisions
console.print_md('### List of Revisions')
# prepare markdown code for the revision table
rev_table_header = "| Number        | Date           | Description  |\n" \
                   "|:-------------:|:--------------:|:-------------|\n"
rev_table_template = "|{number}|{date}|{desc}|\n"
rev_table = rev_table_header
for rev in all_revisions:
    wrev = revit.ElementWrapper(rev)
    revnum = wrev.safe_get_param('RevisionNumber', rev.SequenceNumber)
    rev_table += rev_table_template.format(number=revnum,
                                           date=rev.RevisionDate,
                                           desc=rev.Description)

# print revision table
console.print_md(rev_table)


class RevisedSheet:
    def __init__(self, rvt_sheet):
        self._rvt_sheet = rvt_sheet
        self._find_all_clouds()
        self._find_all_revisions()
Beispiel #8
0
          .WhereElementIsNotElementType().ToElements()

    for v in vps:
        print('ID: {1}TYPE: {0}VIEWNAME: {2}'.format(
            v.Name.ljust(30),
            str(v.Id).ljust(10),
            revit.doc.GetElement(v.ViewId).ViewName))

elif selected_switch == 'Viewport Types':
    vps = []

    cl_views = DB.FilteredElementCollector(revit.doc)
    vptypes = cl_views.OfClass(DB.ElementType).ToElements()

    for tp in vptypes:
        wrapperd_tp = revit.ElementWrapper(tp)
        if tp.FamilyName == 'Viewport':
            print('ID: {1} TYPE: {0}'.format(wrapperd_tp.name,
                                             str(tp.Id).ljust(10)))

elif selected_switch == 'Family Symbols':
    cl = DB.FilteredElementCollector(revit.doc)
    eltype_list = cl.OfClass(DB.ElementType).ToElements()

    for et in eltype_list:
        wrapperd_et = revit.ElementWrapper(et)
        print(wrapperd_et.name, et.FamilyName)

elif selected_switch == 'Levels':
    levelslist = DB.FilteredElementCollector(revit.doc)\
                 .OfCategory(DB.BuiltInCategory.OST_Levels)\
Beispiel #9
0
 def __str__(self):
     return revit.ElementWrapper(self._rvt_type).name
Beispiel #10
0
from pyrevit import script, revit

__context__ = 'selection'
__doc__ = 'Lists the selected element ids as clickable links. '\
          'This is a quick way to go through a series of elements.'

output = script.get_output()
selection = revit.get_selection()

if len(selection.element_ids) > 0:
    output.set_width(300)

    if len(selection.element_ids) < 50:
        print('{}'.format(
            output.linkify(selection.element_ids, title='All Elements')))

    for idx, element in enumerate(selection.elements):
        print('{}: {} {}'.format(idx + 1, output.linkify(element.Id),
                                 revit.ElementWrapper(element).name))
Beispiel #11
0
from pyrevit import revit, DB
from pyrevit import script

__beta__ = True

logger = script.get_logger()

# make sure active document is a family
forms.check_familydoc(exitscript=True)

selection = revit.get_selection()

cad_import = selection.first
cad_trans = cad_import.GetTransform()
cad_type = cad_import.Document.GetElement(cad_import.GetTypeId())
cad_name = revit.ElementWrapper(cad_type).name

family_cat = revit.doc.OwnerFamily.FamilyCategory

geo_elem = cad_import.get_Geometry(DB.Options())
geo_elements = []
for geo in geo_elem:
    logger.debug(geo)
    if isinstance(geo, DB.GeometryInstance):
        geo_elements.extend([x for x in geo.GetSymbolGeometry()])

solids = []
for gel in geo_elements:
    logger.debug(gel)
    if isinstance(gel, DB.Solid):
        # if hasattr(gel, 'Volume') and gel.Volume > 0.0:
Beispiel #12
0
__context__ = 'selection'


selection = revit.get_selection()


grps = list(DB.FilteredElementCollector(revit.doc)
              .OfClass(framework.get_type(DB.Group))
              .ToElements())

grpTypes = set()


if len(selection) > 0:
    for el in selection:
        if isinstance(el, DB.Group):
            selectedgtid = el.GroupType.Id
            for g in grps:
                mems = g.GetMemberIds()
                for memid in mems:
                    mem = revit.doc.GetElement(memid)
                    if isinstance(mem, DB.Group):
                        memgtid = mem.GroupType.Id
                        if memgtid == selectedgtid:
                            grpTypes.add(g.GroupType.Id)

            for gtId in grpTypes:
                wrapped_gtype = \
                    revit.ElementWrapper(revit.doc.GetElement(gtId))
                print(wrapped_gtype.name)
Beispiel #13
0
selected_option = \
    forms.CommandSwitchWindow.show(all_options,
                                   message='Pick type category:')

if selected_option:
    selection = revit.get_selection()
    if selected_option == 'Fill Patterns':
        fill_patterns = revit.query.get_types_by_class(DB.FillPatternElement,
                                                       doc=revit.doc)
        selection.set_to(list(fill_patterns))
    if selected_option == 'Area Schemes':
        area_schemes = revit.query.get_types_by_class(DB.AreaScheme,
                                                      doc=revit.doc)
        selection.set_to(list(area_schemes))
    elif selected_option.startswith('Graphics Styles: '):
        graphic_style_cat = selected_option.replace('Graphics Styles: ', '')
        graphic_styles = \
            [x for x in revit.query.get_types_by_class(DB.GraphicsStyle,
                                                       doc=revit.doc)
             if x.GraphicsStyleCategory
             and x.GraphicsStyleCategory.CategoryType != DB.CategoryType.Internal
             and graphic_style_cat == x.GraphicsStyleCategory.Name]
        selection.set_to(list(graphic_styles))
    else:
        all_types = \
            revit.query.get_types_by_class(DB.ElementType, doc=revit.doc)
        selection.set_to([
            x for x in all_types if selected_option == x.FamilyName
            and revit.ElementWrapper(x).name != x.FamilyName
        ])
Beispiel #14
0
          .WhereElementIsNotElementType().ToElements()

    for v in vps:
        print('ID: {1}TYPE: {0}VIEWNAME: {2}'
              .format(v.Name.ljust(30),
                      str(v.Id).ljust(10),
                      revit.doc.GetElement(v.ViewId).ViewName))

elif selected_switch == 'Viewport Types':
    vps = []

    cl_views = DB.FilteredElementCollector(revit.doc)
    vptypes = cl_views.OfClass(DB.ElementType).ToElements()

    for tp in vptypes:
        wrapperd_tp = revit.ElementWrapper(tp)
        if tp.FamilyName == 'Viewport':
            print('ID: {1} TYPE: {0}'.format(wrapperd_tp.name,
                                             str(tp.Id).ljust(10)))

elif selected_switch == 'Family Symbols':
    cl = DB.FilteredElementCollector(revit.doc)
    eltype_list = cl.OfClass(DB.ElementType).ToElements()

    for et in eltype_list:
        wrapperd_et = revit.ElementWrapper(et)
        print(wrapperd_et.name, et.FamilyName)

elif selected_switch == 'Levels':
    levelslist = DB.FilteredElementCollector(revit.doc)\
                 .OfCategory(DB.BuiltInCategory.OST_Levels)\
Beispiel #15
0
 def __repr__(self):
     return '<{} Name:{} Id:{}>'\
            .format(self.__class__.__name__,
                    revit.ElementWrapper(self._rvt_type).name,
                    self._rvt_type.Id.IntegerValue)
Beispiel #16
0
 def _get_linked_model_doc(self):
     linked_model = self.linkedmodels_lb.SelectedItem
     for open_doc in revit.docs:
         if open_doc.Title == revit.ElementWrapper(linked_model).name:
             return open_doc
Beispiel #17
0
        DB.Line.CreateBound(
            DB.XYZ(base_point.X + 1, base_point.Y, base_point.Z),
            DB.XYZ(base_point.X + 1, base_point.Y + DIRECTION, base_point.Z)))
    cloop.Append(
        DB.Line.CreateBound(
            DB.XYZ(base_point.X + 1, base_point.Y + DIRECTION, base_point.Z),
            DB.XYZ(base_point.X, base_point.Y + DIRECTION, base_point.Z)))
    cloop.Append(
        DB.Line.CreateBound(
            DB.XYZ(base_point.X, base_point.Y + DIRECTION, base_point.Z),
            DB.XYZ(base_point.X, base_point.Y, base_point.Z)))

    DB.FilledRegion.Create(revit.doc, fr_type.Id, revit.activeview.Id,
                           List[DB.CurveLoop]([cloop]))


def make_swatch(index, fr_type):
    row = 0 + (index / MAX_WIDTH)
    col = index - (MAX_WIDTH * row)
    base_point = DB.XYZ(col, row * DIRECTION, 0)
    make_title(base_point, fr_type)
    make_filledregion_element(base_point, fr_type)


filledregion_types = revit.query.get_types_by_class(DB.FilledRegionType)
with revit.Transaction('Generate FilledRegion Swatched'):
    for idx, filledregion_type in enumerate(
            sorted(filledregion_types,
                   key=lambda x: revit.ElementWrapper(x).name)):
        make_swatch(idx, filledregion_type)