pyRevit

Code
Library
pyRevit Template.full
# -*- coding: utf-8 -*-
__title__ = "EF Template" # Name of the button displayed in Revit UI
__doc__ = """Version = 1.0
Date = 20.04.2022
_____________________________________________________________________
Description:
This is a template file for pyRevit Scripts.
_____________________________________________________________________
How-to:
-> Click on the button
-> Change Settings(optional)
-> Make a change
_____________________________________________________________________
Last update:
- [24.04.2022] - 1.0 RELEASE
_____________________________________________________________________
To-Do:
-
_____________________________________________________________________
Author: Erik Frits""" # Button Description shown in Revit UI
# EXTRA: You can remove them.
__author__ = "Erik Frits" # Script's Author
__helpurl__ = "https://www.youtube.com/watch?v=YhL_iOKH-1M" # Link that can be opened with F1 when hovered over the tool in Revit UI.
# __highlight__ = "new" # Button will have an orange dot + Description in Revit UI
__min_revit_ver__ = 2019 # Limit your Scripts to certain Revit versions if it's not compatible due to RevitAPI Changes.
__max_revit_ver = 2022 # Limit your Scripts to certain Revit versions if it's not compatible due to RevitAPI Changes.
#__context__ = 'selection' # Make your button available only when certain categories are selected. Or Revit/View Types.
# ╦╔╦╗╔═╗╔═╗╦═╗╔╦╗╔═╗
# ║║║║╠═╝║ ║╠╦╝ ║ ╚═╗
# ╩╩ ╩╩ ╚═╝╩╚═ ╩ ╚═╝ ⬇️ IMPORTS
# ==================================================
# Regular + Autodesk
import os, sys, math, datetime, time # Regular Imports
from Autodesk.Revit.DB import * # Import everything from DB (Very good for beginners)
from Autodesk.Revit.DB import Transaction, FilteredElementCollector # or Import only classes that are used.
# pyRevit
from pyrevit import revit, forms # import pyRevit modules. (Lots of useful features)
# Custom Imports
from Snippets._selection import get_selected_elements # lib import
from Snippets._convert import convert_internal_to_m # lib import
# .NET Imports
import clr # Common Language Runtime. Makes .NET libraries accessinble
clr.AddReference("System") # Refference System.dll for import.
from System.Collections.Generic import List # List<ElementType>() <- it's special type of list from .NET framework that RevitAPI requires
# List_example = List[ElementId]() # use .Add() instead of append or put python list of ElementIds in parentesis.
# ╦ ╦╔═╗╦═╗╦╔═╗╔╗ ╦ ╔═╗╔═╗
# ╚╗╔╝╠═╣╠╦╝║╠═╣╠╩╗║ ║╣ ╚═╗
# ╚╝ ╩ ╩╩╚═╩╩ ╩╚═╝╩═╝╚═╝╚═╝ 📦 VARIABLES
# ==================================================
doc = __revit__.ActiveUIDocument.Document # Document class from RevitAPI that represents project. Used to Create, Delete, Modify and Query elements from the project.
uidoc = __revit__.ActiveUIDocument # UIDocument class from RevitAPI that represents Revit project opened in the Revit UI.
app = __revit__.Application # Represents the Autodesk Revit Application, providing access to documents, options and other application wide data and settings.
PATH_SCRIPT = os.path.dirname(__file__) # Absolute path to the folder where script is placed.
# GLOBAL VARIABLES
# - Place global variables here.
# ╔═╗╦ ╦╔╗╔╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
# ╠╣ ║ ║║║║║ ║ ║║ ║║║║╚═╗
# ╚ ╚═╝╝╚╝╚═╝ ╩ ╩╚═╝╝╚╝╚═╝ 🧬 FUNCTIONS
# ==================================================
# - Place local functions here. If you might use any functions in other scripts, consider placing it in the lib folder.
# ╔═╗╦ ╔═╗╔═╗╔═╗╔═╗╔═╗
# ║ ║ ╠═╣╚═╗╚═╗║╣ ╚═╗
# ╚═╝╩═╝╩ ╩╚═╝╚═╝╚═╝╚═╝ ⏹️ CLASSES
# ==================================================
# - Place local classes here. If you might use any classes in other scripts, consider placing it in the lib folder.
# ╔╦╗╔═╗╦╔╗╔
# ║║║╠═╣║║║║
# ╩ ╩╩ ╩╩╝╚╝ 🎯 MAIN
# ==================================================
if __name__ == '__main__':
# START CODE HERE
# Use Transaction for Changes.
t = Transaction(doc,__title__) # Transactions are context-like objects that guard any changes made to a Revit model.
# AVOID placing Transaction inside of your loops! It will drastically reduce perfomance of your script.
# You need to use t.Start() and t.Commit() to make changes to a Project.
t.Start() # <- Transaction Start
#- CHANGES TO REVIT PROJECT HERE
t.Commit() # <- Transaction End
# Notify user that script is complete.
print('-' * 50)
print('Hold ALT + Click on the button to open its source folder.')
print('Adjust this tmeplate to your needs and duplicate to new buttons.')
print('Template has been developed by Erik Frits.')

⌨️ Happy Coding!
Erik Frits