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()
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()
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()
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()
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
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
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
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()
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) ))
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()
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()
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)
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.'
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()
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)
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()
def delete_elements(type): t = Transaction(doc, "Delete selection") t.Start() for elid in uidoc.Selection.GetElementIds(): #print elid doc.Delete(elid) t.Commit()
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_)
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.')
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()
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())
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()
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()
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()
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()
def SetParameterInstance(ElementInstance, ParameterName, ParameterValue): ElementInstance = ElementInstance.Symbol Parameter = ElementInstance.LookupParameter(ParameterName) t = Transaction(doc, "Set parameter") t.Start() Parameter.Set(ParameterValue) t.Commit()
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
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
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")
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))