コード例 #1
0
    def check_empty_assembly_code(self, selected_code):

        self.sublabel_no_selection.Text = ""

        ids = list()

        element_instances = []

        for i, v in id_empty_dict.iteritems():
            if len(v) == 0:
                element_instances.append(i.Id)
                ids.append(i.Id)

        self.sublabel_objects.Text = "Number of Objects Current Selection: " + str(
            len(ids))
        assembly_codes_selected = '-'
        self.sublabel.Text = "Number of Assembly Codes Selected: " + str(
            assembly_codes_selected)

        #Hide Reset Active View
        t = Transaction(doc, 'Reset HideIsolate')
        t.Start()
        view.TemporaryViewModes.DeactivateAllModes()
        t.Commit()

        idElements = List[ElementId](ids)

        #Hide Isolate Objects in Active View
        t = Transaction(doc, 'Filter Elements')
        t.Start()
        view.IsolateElementsTemporary(idElements)
        t.Commit()
コード例 #2
0
    def check_for_selected_code(self, selected_code):

        if len(selected_code) == 0:

            self.sublabel_no_selection.Text = "Please select an Assembly Code First!"

        if len(selected_code) > 0:

            self.sublabel.Text = "Number of Assembly Codes Selected: " + str(
                len(selected_code))

            ids = list()

            for i, v in id_assembly_dict.iteritems():
                if len(v) > 1:
                    for code in selected_code:
                        if v[0] == code:
                            ids.append(i.Id)

            self.sublabel_objects.Text = "Number of Objects Current Selection: " + str(
                len(ids))

            #Hide Reset Active View
            t = Transaction(doc, 'Reset HideIsolate')
            t.Start()
            view.TemporaryViewModes.DeactivateAllModes()
            t.Commit()

            idElements = List[ElementId](ids)

            #Hide Isolate Objects in Active View
            t = Transaction(doc, 'Filter Elements')
            t.Start()
            view.IsolateElementsTemporary(idElements)
            t.Commit()
コード例 #3
0
def DeleteExcessLineStyles(doc, list, start_time, limit):
    lineStyle = doc.Settings.Categories.get_Item(
        BuiltInCategory.OST_Lines).SubCategories
    standard = {}
    for i in lineStyle:
        # individual transactions
        t = Transaction(doc, 'Delete Excess Line Styles')
        t.Start()
        if not i.Name in list and i.Name[
                0] != '<' and i.Id.IntegerValue > 0 and time.time(
                ) - start_time < limit:
            try:
                if i.Name[0:5] == prefix:
                    standard[i.Name] = i
                else:
                    print('Deleting Line Style ' + i.Name)
                    doc.Delete(i.Id)

            except:
                print('Failed to Delete ' + i.Name)
        t.Commit()

    sel_delete = forms.SelectFromList.show(standard.keys(),
                                           button_name='Select Item',
                                           multiselect=True)
    for s in sel_delete:
        if time.time() - start_time < limit:
            t = Transaction(doc, 'Delete Excess Line Styles')
            t.Start()
            print('Deleting Line Style ' + standard[s].Name)
            doc.Delete(standard[s].Id)
            t.Commit()
コード例 #4
0
ファイル: PstCommandLinet.py プロジェクト: luisleonsl/pytiba
def createobj(type):

    # get Drafting View named "xForm" for object creation and Selection.
    fecv = DB.FilteredElementCollector(doc).OfClass(DB.ViewDrafting) \
            .WhereElementIsNotElementType().ToElements()
    dv = [i for i in fecv if i.ViewName.Equals("xForm")]
    draftview = dv[0] if dv else None

    if not draftview:
        t = Transaction(doc, "xForm")
        t.Start()
        fec = DB.FilteredElementCollector(doc).OfClass(
            DB.ViewFamilyType).ToElements()
        viewdrafttype = [
            i for i in fec if i.ViewFamily.Equals(DB.ViewFamily.Drafting)
        ][0]
        draftview = DB.ViewDrafting.Create(doc, viewdrafttype.Id)
        draftview.Name = "xForm"
        t.Commit()
        print draftview.Name

    # Get line of linestyle = type
    fec = FilteredElementCollector(doc).OfCategory(DB.BuiltInCategory.OST_Lines) \
                .ToElements()
    detailc = [
        i for i in fec
        if i.CurveElementType.Equals(DB.CurveElementType.DetailCurve)
    ]
    li = [i for i in detailc if i.LineStyle.Id.Equals(type.Id)]
    line = li[0] if li else None

    if not line:
        print "line not found"

        try:
            t = Transaction(doc, "Draw Line")
            t.Start()
            linee = DB.Line.CreateBound(XYZ.Zero, XYZ(0, 10, 0))
            line = doc.Create.NewDetailCurve(draftview, linee)
            print type
            line.LineStyle = type
            t.Commit()
        except:
            import traceback
            print traceback.format_exc()

    if line and draftview:
        # Select it/Add it to Selection
        listId = List[ElementId]()
        listId.Add(line.Id)
        uidoc.Selection.SetElementIds(listId)
        # Start CreateSimilar Command.
        try:
            revitcomid = UI.RevitCommandId.LookupPostableCommandId(
                UI.PostableCommand.CreateSimilar)
            if revitcomid:
                uiapp.PostCommand(revitcomid)
        except:
            import traceback
            print traceback.format_exc()
コード例 #5
0
    def space_creator(self, room, lvls):
        ''' 
        Function creates new spaces 
        room: Revit Room, lvls: level elevations and levels dictionary
        '''
        try:
            # Get the room level
            room_lvl = room.Level
            # Get a level from the lvls dictionary by room level elevation
            lvl = lvls.get(room_lvl.Elevation)
            # Create space by coordinates and level taken from room
            with Transaction(self.doc, "Batch create spaces") as tr:
                tr.Start()

                options = tr.GetFailureHandlingOptions()
                failureHandler = ErrorSwallower()
                options.SetFailuresPreprocessor(failureHandler)
                options.SetClearAfterRollback(True)
                tr.SetFailureHandlingOptions(options)
                room_coords = self.transform.OfPoint(room.Location.Point)
                space = self.doc.Create.NewSpace(
                    lvl, UV(room_coords.X, room_coords.Y))

                # Get "REFERENCED_ROOM_UNIQUE_ID" parameter
                ref_id_par = space.GetParameters(self._search_id)[0]
                # Assign room UniqueID to "REFERENCED_ROOM_UNIQUE_ID" parameter
                if ref_id_par:
                    if ref_id_par.StorageType == StorageType.String:
                        ref_id_par.Set(room.UniqueId)
                        self.New_MEPSpaces[
                            room.UniqueId] = self.New_MEPSpaces.get(
                                room.UniqueId, space)
                        self.para_setter(room, space)
                    else:
                        ref_id_par.Set(room.Id.IntegerValue)
                        self.New_MEPSpaces[
                            room.Id.IntegerValue] = self.New_MEPSpaces.get(
                                room.Id.IntegerValue, space)
                        self.para_setter(room, space)
                tr.Commit()

        except Exception as e:
            logger.error(e, exc_info=True)
            pass

        try:
            with Transaction(self.doc, "Set space Id") as tr:
                tr.Start()
                # Get "ID_revit" parameter of a MEP space
                space_id = space.GetParameters("ID_revit")[0]
                # Assign space ID to "ID_revit" parameter
                if space_id:
                    space_id.Set(space.Id.IntegerValue)
                tr.Commit()

        except Exception as e:
            logger.error(e, exc_info=True)
            pass
コード例 #6
0
def firstrun():
    # get Drafting View named "xForm" for object creation and Selection.
    fecv = DB.FilteredElementCollector(doc).OfClass(DB.ViewDrafting) \
            .WhereElementIsNotElementType().ToElements()
    dv = [i for i in fecv if i.ViewName.Equals("xForm")]
    draftview = dv[0] if dv else None
    #print "no draftview, create one", draftview

    if not draftview:
        t = Transaction(doc, "xForm")
        t.Start()
        fec = DB.FilteredElementCollector(doc).OfClass(
            DB.ViewFamilyType).ToElements()
        viewdrafttype = [
            i for i in fec if i.ViewFamily.Equals(DB.ViewFamily.Drafting)
        ][0]
        draftview = DB.ViewDrafting.Create(doc, viewdrafttype.Id)
        draftview.Name = "xForm"
        t.Commit()
        #print draftview, draftview.Name

    lines = FilteredElementCollector(doc, draftview.Id) \
                .OfCategory(DB.BuiltInCategory.OST_Lines) \
                .ToElements()

    if not lines:
        #print "NO line"
        t = Transaction(doc, "Draw Line")
        t.Start()
        linee = DB.Line.CreateBound(XYZ.Zero, XYZ(0, 10, 0))
        singleline = doc.Create.NewDetailCurve(draftview, linee)
        t.Commit()
        lines = List[Element]()
        lines.Add(singleline)

    lstyles = sorted([(doc.GetElement(i).Name, doc.GetElement(i))
                      for i in lines[0].GetLineStyleIds()])
    #print len(lstyles), len(lines)

    if not len(lstyles) == len(lines):
        t = Transaction(doc, "Create Lines with Linestyles")
        t.Start()
        [doc.Delete(i.Id) for i in lines]
        for i in range(len(lstyles)):
            linee = DB.Line.CreateBound(XYZ(i * 2, 0, 0), XYZ(i * 2, 10, 0))
            line = doc.Create.NewDetailCurve(draftview, linee)
            line.LineStyle = lstyles[i][1]
        t.Commit()
    return lstyles
コード例 #7
0
def firstrun():
    # get Drafting View named "xForm" for object creation and Selection.
    fecv = DB.FilteredElementCollector(doc).OfClass(DB.ViewDrafting) \
            .WhereElementIsNotElementType().ToElements()
    dv = [i for i in fecv if i.ViewName.Equals("xForm")]
    draftview = dv[0] if dv else None

    if not draftview:
        t = Transaction(doc, "xForm")
        t.Start()
        fec = DB.FilteredElementCollector(doc).OfClass(
            DB.ViewFamilyType).ToElements()
        viewdrafttype = [
            i for i in fec if i.ViewFamily.Equals(DB.ViewFamily.Drafting)
        ][0]
        draftview = DB.ViewDrafting.Create(doc, viewdrafttype.Id)
        draftview.Name = "xForm"
        draftview.Scale = 100
        t.Commit()
        #print draftview, draftview.Name

    notes = FilteredElementCollector(doc, draftview.Id).OfClass(TextNote) \
                .WhereElementIsNotElementType() \
                .ToElements()

    notetypes = sorted(
        DB.FilteredElementCollector(doc).OfClass(DB.TextNoteType).ToElements(),
        key=lambda x: x.get_Parameter(DB.BuiltInParameter.SYMBOL_NAME_PARAM
                                      ).AsString())

    if not notes or not len(notes) == len(notetypes):

        # TextNote Create( Document document, ElementId viewId, XYZ position, string text, ElementId typeId )
        t = Transaction(doc,
                        "Create TextNotes of all TextTypes in DraftingView")
        t.Start()
        if not len(notes) == len(notetypes):
            [doc.Delete(i.Id) for i in notes]

        for i, j in enumerate(notetypes):
            text = j.get_Parameter(
                DB.BuiltInParameter.SYMBOL_NAME_PARAM).AsString()
            textnote = DB.TextNote.Create(doc, draftview.Id,
                                          XYZ(0, -i * 3.5, 0), text, j.Id)
        t.Commit()

    return [(i.get_Parameter(DB.BuiltInParameter.SYMBOL_NAME_PARAM).AsString(),
             i) for i in notetypes]  # Tupel
コード例 #8
0
def link_method_ifc():
    files_filter = "IFC files (*.ifc)|*.ifc"
    files = pick_files(files_filter)
    for f in files:
        t = Transaction(doc)
        t.Start(__title__)
        f_cache = f + ".rvt"
        recreate = not os.path.exists(f_cache)
        logger.debug("Recreate ifc %s = %s" % (f, recreate))
        # try:
        o = RevitLinkOptions(False)
        # create empty doc
        if recreate:
            new_doc = doc.Application.NewProjectDocument(UnitSystem.Metric)
            new_doc.SaveAs(f_cache)
            new_doc.Close(False)
        link_load_results = RevitLinkType.CreateFromIFC(
            doc, f, f_cache, recreate, o)
        # TODO log results http://www.revitapidocs.com/2019/11b095e1-24d9-91b9-ae2e-004f67c94d6e.htm
        logger.debug(link_load_results.LoadResult)
        instance = RevitLinkInstance.Create(doc, link_load_results.ElementId)
        status = True
        # except Exception as e:
        #     logger.error("Unable to import IFC")
        #     logger.error(e)
        #     status = False
        #     instance = None

        if status:
            instance.Pinned = True
            t.Commit()
        else:
            t.RollBack()
コード例 #9
0
    def createsheetset(self, sender, args):
        self.my_window.Close()
        __window__.Show()
        # get selected revision
        srindex = self.my_listView_revisionList.SelectedIndex
        if srindex >= 0:
            sr = doc.GetElement(ElementId(self.revs[srindex]))
        else:
            return

        # collect data
        sheets = FilteredElementCollector(doc).OfCategory(
            BuiltInCategory.OST_Sheets).WhereElementIsNotElementType().ToElements()
        affectedsheets = []
        with Transaction(doc, 'Set Revision on Sheets') as t:
            t.Start()
            for s in sheets:
                revs = list(s.GetAdditionalRevisionIds())
                revs.append(sr.Id)
                s.SetAdditionalRevisionIds(List[ElementId](revs))
                affectedsheets.append(s)
            t.Commit()
        if len(affectedsheets) > 0:
            print('SELECTED REVISION ADDED TO THESE SHEETS:')
            print('-' * 100)
            for s in affectedsheets:
                print('NUMBER: {0}   NAME:{1}'.format(s.LookupParameter('Sheet Number').AsString().rjust(10),
                                                      s.LookupParameter('Sheet Name').AsString().ljust(50)
                                                      ))
コード例 #10
0
ファイル: __init__.py プロジェクト: NauGaika/PikBim
 def Execute(self, app):
     if start_increase.GetValue()['Да'] or end_increase.GetValue()['Да']:
         t = Transaction(doc, 'Добавить учащение')
         t.Start()
         rebar = RB_Rebar(selection[0])
         path_length = rebar.ArrayLength
         normale = rebar.Normal
         start_space = rebar.rebar.MaxSpacing
         reb_count = int(ceil(path_length / start_space))
         biv = (path_length - (reb_count - 1) * start_space)
         rebars = List[ElementId]()
         rebars.Add(rebar.rebar.Id)
         if end_increase.GetValue()['Да'] and start_increase.GetValue(
         )['Да']:
             biv = biv / 2
         if biv > to_feet(20):
             rebar.SetAsNumberWithSpacing(reb_count, start_space)
             if start_increase.GetValue()['Да']:
                 rebar.translate(normale * biv)
                 tr = rebar.copy_by_normal_length(normale * -biv)
                 tr.SetAsSingle()
                 rebars.Add(tr.rebar.Id)
             if end_increase.GetValue()['Да']:
                 tr = rebar.copy_by_normal_length(
                     normale * (start_space * (reb_count - 1) + biv))
                 tr.SetAsSingle()
                 rebars.Add(tr.rebar.Id)
             __revit__.ActiveUIDocument.Selection.SetElementIds(rebars)
         t.Commit()
     FORM.Close()
コード例 #11
0
def link_method_rvt():
    files_filter = "RVT files (*.rvt)|*.rvt"
    files = pick_files(files_filter)

    for f in files:
        t = Transaction(doc)
        t.Start(__title__)

        try:
            mp = ModelPathUtils.ConvertUserVisiblePathToModelPath(f)
            o = RevitLinkOptions(False)
            linkType = RevitLinkType.Create(doc, mp, o)
            instance = RevitLinkInstance.Create(doc, linkType.ElementId)
            status = True
        except Exception as e:
            logger.error("Unable to import RVT")
            logger.error(e)
            status = False
            instance = None

        if status:
            instance.Pinned = True
            t.Commit()
        else:
            t.RollBack()
コード例 #12
0
def createsheets(sheetlist):
    message = []
    dic_sheetGuid = {}
    t = Transaction(doc, "Create SheetViews from EXCEL")
    try:
        t.Start()
        for j in sheetlist:
            try:
                tibl = dic_tibl[j[2]]
            except:
                mess1 = 'Error: TitleBlock1 "{}" not found'.format(j[2])
                message.append(mess1)
                continue
            a = DB.ViewSheet.Create(doc,
                                    tibl.Id)  # ViewSheet Class, Create Method
            a.SheetNumber = j[0]
            a.ViewName = j[1]
            dic_sheetGuid[a.SheetNumber] = str(a.UniqueId)
            #create TitleBlock2 instance
            try:
                tibl_2 = dic_tibl[j[3]]
                newtitleblock = doc.Create.NewFamilyInstance(
                    XYZ(0, 0, 0), tibl_2, a)
                mess2 = '; TitleBlock2: {}'.format(str(j[3]))
            except:
                mess2 = '; TitleBlock2: not found'
                pass
            message.append('--> {}-{}, TiBl1: {}'.format(
                a.SheetNumber, a.ViewName, j[2]) + mess2)
        t.Commit()
    except:
        t.RollBack()
        import traceback
        print(traceback.format_exc())
    return (message, dic_sheetGuid)
コード例 #13
0
def load_family(folder_path='Insert Path Here',
                file_name='Insert File Name Here'):
    'Loads a family into the Revit project with path and file name.'
    family_path = os.path.join(folder_path, file_name)
    if os.path.exists(family_path) is False:
        return 'Path does not exist.'

    family_loaded = clr.Reference[Autodesk.Revit.DB.Family]()
    t = Transaction(doc)
    t.Start('Load Family')

    loaded = doc.LoadFamily(family_path, FamilyLoadOptions(), family_loaded)
    if loaded:
        family = family_loaded.Value
        symbols = []

        for family_symbol_id in family.GetFamilySymbolIds():
            family_symbol = doc.GetElement(family_symbol_id)
            symbols.append(family_symbol)

        for s in symbols:
            try:
                s.Activate()
            except:
                pass

        t.Commit()
        return symbols

    else:
        t.Commit()
        return 'Family already exists in project.'
コード例 #14
0
    def run(self, sender, args):
        # print(dir(self))
        if not(self.parameter_to_sort and  self.parameter_to_sort != "" and self.parameter_to_set and  self.parameter_to_set != ""):
            forms.alert("Error! All the parameters should be set")
            return

        result = self.sort(self.selection, self.parameter_to_sort, self.is_reversed)
        i = self.start_from
        text_format = self.text_format
        zeros = self.leading_zeros

        t = Transaction(doc, __title__)
        t.Start()
        for r in result:
            e = r[0]
            definition = self.parameter_to_set.Definition
            param = e.get_Parameter(definition)
            if zeros:
                _i = str(i).zfill(zeros)
            else:
                _i = str(i)
            self.parameter_value_set(param, _i, text_format)
            i += 1
        t.Commit()

        my_config.start_from = i

        # selection_doc.set self.selection
        try:
            self.write_config()
        except:
            pass
        logger.debug("run - set_to", map(lambda e: e[0].Id.IntegerValue, result))
        selection_pyr.set_to(map(lambda e: e[0].Id, result))
        self.Close()
コード例 #15
0
    def space_check(self, Room_UniqueIds):
        ''' 
        Function checks for not placed spaces, obsolete spaces and deletes them
        '''
        # Collect all existing MEP spaces in this document
        for space in self._space_collector.ToElements():

            # Get "REFERENCED_ROOM_UNIQUE_ID" parameter of each space
            id_par_list = space.GetParameters(self._search_id)
            ref_id_par_val = id_par_list[0].AsString()

            # Check if REFERENCED_ROOM_UNIQUE_ID is in room Room_UniqueIds
            # If it's not the case delete the corresponding space
            if space.Area == 0 or ref_id_par_val not in Room_UniqueIds:
                with Transaction(self.doc, "Delete spaces") as tr:
                    tr.Start()

                    try:
                        self.doc.Delete(space.Id)
                    except Exception as e:
                        logger.error(e, exc_info=True)
                        pass

                    tr.Commit()

            else:
                # Otherwise cast it into Existing MEP spaces dictionary
                self.Exist_MEPSpaces[
                    ref_id_par_val] = self.Exist_MEPSpaces.get(
                        ref_id_par_val, space)

            self.counter += 1
            self.ReportProgress.emit(self.counter)
コード例 #16
0
 def Execute(self, app):
     try:
         self.form_val = {
             i: to_feet(int(self.form_val[i].GetValue()))
             for i in self.form_val.keys()
             if self.form_val[i].GetValue().isdigit()
         }
         with Transaction(doc, 'Рисуем линии') as t:
             t.Start()
             for room in self.room_lines:
                 # echo(room)
                 for type_name, lines in room.items():
                     if type_name in self.form_val.keys():
                         lines = self.add_offset(lines,
                                                 self.form_val[type_name])
                         # echo(self.get_graphic_styles(type_name))
                         self.print_line_by_face(
                             lines, self.get_graphic_styles(type_name),
                             type_name)
                     else:
                         message(
                             'Не задан отступ для типоразмера {} линия создана не будте'
                             .format(type_name))
             t.Commit()
     except:
         echo(sys.exc_info()[1])
     FORM.Close()
コード例 #17
0
def delete_elements(type):
    t = Transaction(doc, "Delete selection")
    t.Start()
    for elid in uidoc.Selection.GetElementIds():
        #print elid
        doc.Delete(elid)
    t.Commit()
コード例 #18
0
 def btnDeleteFilters_Click(self, sender, args):
     selected_Filters_Name = self.lbFiltersName.SelectedItems #cant use global?
     selected_Filters = map(lambda f: filter_source[filter_names.index(f)],
                            selected_Filters_Name) #cant use global?
     if not selected_Filters:
         warningDialog.MainContent = "No Filter is selected!"
         warningDialog.DefaultButton = UI.TaskDialogResult.Cancel
         warningDialog.Show()
     else:
         warningDialog.MainContent = "{} will be deleted.\n Are you sure?".\
                                     format(map(lambda x: x,\
                                                selected_Filters_Name))
         warningDialog.CommonButtons = UI.TaskDialogCommonButtons.Yes\
                                     | UI.TaskDialogCommonButtons.No
         warnDialog = warningDialog.Show()
         if warnDialog == UI.TaskDialogResult.Yes:
             trans = Transaction(doc, "Delete Filters")
             trans.Start()
             map(lambda x: viewInstance.RemoveFilter(x), selected_Filters)
             trans.Commit()
     
     #Update Filters List
     view_Instance_Name_ = self.cbbViewName.SelectedItem
     if view_Instance_Name_ in view_Source_Name:
         filter_Source_ = view_Source[view_Source_Name.\
                                      index(view_Instance_Name_)].GetFilters()
     self.lbFiltersName.ItemsSource = map(lambda i: doc.GetElement(i).Name,\
                                          filter_Source_)
コード例 #19
0
def copy_paste_elements_btwn_views(src_view, dest_view):
    elements_to_copy = get_copyable_elements(src_view)
    if len(elements_to_copy) >= 1:
        # copying and pasting elements
        trans_name = 'Copy and Paste elements'
        try:
            with Transaction(doc, trans_name) as t:
                t.Start()

                failure_ops = t.GetFailureHandlingOptions()
                failure_ops.SetFailuresPreprocessor(ViewConverterFailurePreProcessor(trans_name, src_view.ViewName))
                # failure_ops.SetForcedModalHandling(False)
                t.SetFailureHandlingOptions(failure_ops)

                options = CopyPasteOptions()
                options.SetDuplicateTypeNamesHandler(CopyUseDestination())
                copied_element = ElementTransformUtils.CopyElements(src_view,
                                                                    List[ElementId](elements_to_copy),
                                                                    dest_view,
                                                                    None,
                                                                    options)

                # matching element graphics overrides and view properties
                if len(copied_element) != len(elements_to_copy):
                    logger.error('Some elements were not copied from view: {}'.format(src_view.ViewName))
                for dest, src in zip(copied_element, elements_to_copy):
                    dest_view.SetElementOverrides(dest, src_view.GetElementOverrides(src))

                t.Commit()
                return len(copied_element)
        except Exception as err:
            logger.error('Error occured while copying elements from {} | {}'.format(src_view.ViewName, err))
            return 0
    else:
        print('No copyable elements where found.')
コード例 #20
0
    def ok_click(self, sender, e):
        room_doc = self.source_project.SelectedItem
        space_doc = self.target_project.SelectedItem
        room = room_doc.GetElement(self.sample_room_id)
        space = space_doc.GetElement(self.sample_space_id)

        # Try RoomToSpace with sample room and space to make sure it works before batch on all with all spaces
        try:
            t = Transaction(space_doc, "Test")
            t.Start()
            self.room_to_space(room, space)
        except ValueError as e:
            logger.info("{}".format(e.message))
            t.RollBack()
            return
        except TypeError as e:
            logger.info("Is target parameter empty ?")
            t.RollBack()
            return
        t.RollBack()

        # Copy from values from
        with rpw.db.Transaction(doc=space_doc, name="RoomToSpace"):
            for space in FilteredElementCollector(
                    self.target_project.SelectedItem).OfCategory(
                        BuiltInCategory.OST_MEPSpaces):
                if space.Location:
                    room = room_doc.GetRoomAtPoint(space.Location.Point)
                if room:
                    self.room_to_space(room, space)
        self.Close()
コード例 #21
0
def createSharedPara(_paramName_string,_groupNameinSPfile_string, \
                    _paramtype_enum, _builtInCat_enum,_paramGroupinProperty_enum):	
    # open SharedParameterFile 
    file = uiapp.Application.OpenSharedParameterFile()
    # get GroupName in SharedParameter file, if not exist create new Group  
    group = file.Groups.get_Item(_groupNameinSPfile_string)
    if group == None: 
        group = file.Groups.Create(_groupNameinSPfile_string)
    # Create NewCategorySet()              
    catset = app.Create.NewCategorySet()   
    # Insert Category Objects in CatSet  <Autodesk.Revit.DB.Category object 
    catset.Insert(doc.Settings.Categories.get_Item(_builtInCat_enum)) # returns True 
    # create an instance binding object with categoryset  
    inst_bind = app.Create.NewInstanceBinding(catset)     
    #ExternalDefinitionCreationOptions Class  excpects ( paraname as string, paratype object)
    # An option class used for creating a new shared parameter definition,        
    ED_opt1 = ExternalDefinitionCreationOptions(_paramName_string, _paramtype_enum)
    ED_opt1.Visible = True # True is the default value
    #Create Parameter Definition Object               
    #Test if paraName is in SharedParam file , get Para Name Definition from file, else Create new Name 
    if group.Definitions.Contains(group.Definitions.Item[_paramName_string]):
        _exdef1 = group.Definitions.Item[_paramName_string] # create parameter definition object from Para in file
    else:  
    # _def = group.Definitions.Create(_paramName, _paramtype_enum, _visible) 
        _exdef1 = group.Definitions.Create(ED_opt1) #Create para Definition object wit Ext
    #Create Parameter by inserting the Para Definition in the ParameterBindigs_Map
    try:
        t = Transaction(doc, "Parameter Creation")
        t.Start() 
        bind_Map = doc.ParameterBindings.Insert(_exdef1, inst_bind, _paramGroupinProperty_enum) 
        t.Commit()
    except:
        import traceback
        print(traceback.format_exc())
コード例 #22
0
ファイル: script.py プロジェクト: kjanik11/pyRevit
def convertToCat( bicat ):
	with Transaction( doc, 'Convert Family' ) as t:
			t.Start()
			catobj = Category.GetCategory( doc, bicat )
			doc.OwnerFamily.FamilyCategory = catobj
			doc.Regenerate()
			t.Commit()
コード例 #23
0
    def delete_spaces(self):
        ''' 
        Function deletes spaces
        '''
        self.counter = 0

        space_collector = FilteredElementCollector(
            self.doc).WhereElementIsNotElementType().OfCategory(
                BuiltInCategory.OST_MEPSpaces)
        spaces = space_collector.ToElements()
        self.startProgress.emit(len(spaces))

        with Transaction(self.doc, "Delete spaces") as tr:
            tr.Start()

            for space in spaces:

                try:
                    self.doc.Delete(space.Id)
                    self.counter += 1
                    self.ReportProgress.emit(self.counter)

                except Exception as e:
                    logger.error(e, exc_info=True)
                    pass

            tr.Commit()

            self.New_MEPSpaces = {}
            self.Exist_MEPSpaces = {}
            self.endProgress.emit()
コード例 #24
0
ファイル: __init__.py プロジェクト: NauGaika/RedBimTest
    def Execute(self, app):
        with Transaction(doc, "Все параметры экземпляра") as t:
            t.Start()
            self.fm = doc.FamilyManager
            for fPar in self._selected_params:
                definition = fPar.Definition
                isShared = fPar.IsShared
                isInstance = fPar.IsInstance
                pType = definition.ParameterType
                if isShared:
                    edef = self.create_parameter(definition.Name, pType)
                    fPar = self.fm.ReplaceParameter(fPar,
                                                    definition.Name + "1",
                                                    self._selected_group,
                                                    isInstance)
                    self.fm.ReplaceParameter(fPar, edef, self._selected_group,
                                             isInstance)
                    echo("Перенесен параметр " + definition.Name)
                else:
                    edef = self.create_parameter(definition.Name + "1", pType)
                    fPar = self.fm.ReplaceParameter(fPar, edef,
                                                    self._selected_group,
                                                    isInstance)
                    self.fm.ReplaceParameter(fPar, definition.Name,
                                             self._selected_group, isInstance)
                    echo("Перенесен параметр " + definition.Name)

            app.SharedParametersFilename = self.prev_path
            os.remove(self.file_path)
            t.Commit()
コード例 #25
0
ファイル: script.py プロジェクト: kjanik11/pyRevit
    def _print_combined_sheets_in_order(self):
        # todo: Revit does not follow the order of sheets as set by ViewSet
        print_mgr = doc.PrintManager
        print_mgr.PrintRange = PrintRange.Select
        viewsheet_settings = print_mgr.ViewSheetSetting

        sheet_set = ViewSet()

        for sheet in self.sheets_lb.ItemsSource:
            sheet_set.Insert(sheet.revit_sheet)

        # Collect existing sheet sets
        cl = FilteredElementCollector(doc)
        viewsheetsets = cl.OfClass(clr.GetClrType(
            ViewSheetSet)).WhereElementIsNotElementType().ToElements()
        all_viewsheetsets = {vss.Name: vss for vss in viewsheetsets}

        sheetsetname = 'OrderedPrintSet'

        with Transaction(doc, 'Update Ordered Print Set') as t:
            t.Start()
            # Delete existing matching sheet set
            if sheetsetname in all_viewsheetsets:
                viewsheet_settings.CurrentViewSheetSet = all_viewsheetsets[
                    sheetsetname]
                viewsheet_settings.Delete()

            viewsheet_settings.CurrentViewSheetSet.Views = sheet_set
            viewsheet_settings.SaveAs(sheetsetname)
            t.Commit()

        print_mgr.PrintToFile = True
        print_mgr.CombinedFile = True
        print_mgr.PrintToFileName = op.join(r'C:', 'Ordered Sheet Set.pdf')
        print_mgr.SubmitPrint()
コード例 #26
0
ファイル: param.py プロジェクト: nhuannguyen1/pyRevitnvn
def SetParameterInstance(ElementInstance, ParameterName, ParameterValue):
    ElementInstance = ElementInstance.Symbol
    Parameter = ElementInstance.LookupParameter(ParameterName)
    t = Transaction(doc, "Set parameter")
    t.Start()
    Parameter.Set(ParameterValue)
    t.Commit()
コード例 #27
0
def parameterupdate(exel_datalist):
    #Create a list from FECsheets matching ex_row_paralist in Project
    # using SheetNR for Equality Check, do this with FEC?
    sheetviews = []
    excel_data = []
    for i in exel_datalist:
        if i[0] and i[1] and i[5]:
            for j in FECsheet:
                if j.SheetNumber == i[0]:
                    sheetviews.append(j)
                    excel_data.append(i)
    #GUID BuiltInParameter ---------------------------
    sheet_issuedate = DB.BuiltInParameter.SHEET_ISSUE_DATE
    sheet_drawnby = DB.BuiltInParameter.SHEET_DRAWN_BY
    mess = []
    t = Transaction(doc, "update sheet parameters")
    t.Start()
    for i, j in zip(sheetviews, excel_data):
        try:
            date = getnsetBIP(i, sheet_issuedate, j[5])
            drawnby = getnsetBIP(i, sheet_drawnby, j[6])
            man_massstab = getnsetSharedPara(i, "man_Massstab", j[7])
            pbrowser = getnsetSharedPara(i, "PBrowser", j[4])
            mess2 = ' {}-{} --> PBrowser: {}, issue_date: {}, drawnby: {}, M: {}'.format(
                i.SheetNumber, i.Name, pbrowser, date, drawnby, man_massstab)
            mess.append(mess2)
        except:
            error = 'Error '
            mess.append(error)
            import traceback
            print("\n", traceback.format_exc())
            continue
    t.Commit()
    return mess
コード例 #28
0
    def find_linked_elements(self):
        t = Transaction(doc, "Search for linked elements")
        t.Start()
        linked_element_ids = doc.Delete(self._rvt_type.Id)
        t.RollBack()

        return linked_element_ids
コード例 #29
0
ファイル: script.py プロジェクト: pyrevitlabs/pyApex
    def run(self, sender, args):
        text_find = self.text_find
        text_replace = self.text_replace
        count_changed = 0
        t = Transaction(doc, __title__)
        t.Start()

        for e in self.selection:
            definition = self.parameter_to_set.Definition
            param = e.get_Parameter(definition)
            param_before = param.AsString()
            param_after = param_before.replace(text_find, text_replace)

            if param_before != param_after:
                count_changed += 1
                self.parameter_value_set(param, param_after)

        if count_changed:
            t.Commit()
            TaskDialog.Show(
                __title__, "%d of %d elements updated" % (
                    count_changed,
                    len(self.selection),
                ))
        else:
            t.RollBack()
            TaskDialog.Show(__title__, "Nothing was updated")
コード例 #30
0
    def set_coloristic_tag(self, obj):
        """
        Устанавливает коллористические марки.

        Открывает файл с закрытыми рабочими наборами.
        Для этого создается конфиг open_opt

        Проходим по всем документам и панелям, которые переданы в obj
        Выгружаем связь.
        Открываем документ.
        Проверяем можно ли вносить изменения в документ.
        Пробуем внести изменения.
        Проходим по всем панелям и уровням.
        Получаем в документе связи панель по ID.
        Проходим по всем уровням. 
        Для каждой колористик Tag устанавливаем марку по уровню.
        Если файл общий. Синхронизироваться.
        Если файл не общий - просто сохранить.
        В противном случае закрыть документ
        """
        workset_config_option = WorksetConfigurationOption.CloseAllWorksets
        workset_config = WorksetConfiguration(workset_config_option)
        open_opt = OpenOptions()
        open_opt.SetOpenWorksetsConfiguration(workset_config)
        app = self.doc.Application
        for doc, panels in obj.items():
            title = doc.Title
            m_p = ModelPathUtils.ConvertUserVisiblePathToModelPath(
                doc.PathName)
            rvt_type = self.rvt_docs[doc]
            rvt_type.Unload(None)
            cur_doc = app.OpenDocumentFile(m_p, open_opt)
            if not cur_doc.IsReadOnly:
                try:
                    with Transaction(cur_doc, "Вносим изменения") as t:
                        t.Start()
                        for panel, levels in panels.items():
                            panel = cur_doc.GetElement(ElementId(panel.Id))
                            for level, mark in levels.items():
                                level = level if len(
                                    level) > 1 else "0" + level
                                panel.LookupParameter(
                                    "BDS_ColoristicsTag_Floor" +
                                    level).Set(mark)
                        t.Commit()
                    if cur_doc.IsWorkshared:
                        twc_opts = TransactWithCentralOptions()
                        swc_opts = SynchronizeWithCentralOptions()
                        swc_opts.SetRelinquishOptions(RelinquishOptions(True))
                        swc_opts.Comment = "Атоматическая синхронизация КЖС"
                        cur_doc.SynchronizeWithCentral(twc_opts, swc_opts)
                    cur_doc.Close(True)
                except:
                    echo(sys.exc_info()[1])
                    cur_doc.Close(False)
            else:
                echo("Файл {} доступен только для чтения".format(title))
                cur_doc.Close(False)
            rvt_type.Load()
            echo("Обработали связь {}".format(title))