Select Pinned Elements


Hi, this may seem a bit silly but I am trying to find a way to select all of the walls in a view that are pinned. I found Rhythm’s Element.SetPinnedStatus node (python below) but I am totally new to Python. I feel like I am frustratingly close but would appreciate some help. The goal is to select all of the pinned walls and then override them in a view to graphically highlight to other users that the elements have been pinned. Thank you!

#Copyright(c) 2017, john pierson
# @60secondrevit,
import clr
from Autodesk.DesignScript.Geometry import *

# Import ToDSType(bool) extension method
import Revit

# Import DocumentManager and TransactionManager
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

from System.Collections.Generic import *

# Import RevitAPI
import Autodesk

doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN

#unwrap all elements to use with API
items = UnwrapElement(IN[0])
#SEt pinned status over list
typelist = list()
for i in items:
		i.Pinned = IN[1]

# "End" the transaction

#Assign your output to the OUT variable
OUT = IN[0]


This is the property you want to look at.

And just FYI, when posting code please use the preformatted text option </> so that other users can understand your code and copy/paste if needed.



Thank you Nick, sorry for the code faux pas!

1 Like


This conversation could interest you:



Hi @Jordan_Billingsley - I already have a very simple Python script that accomplishes supplying a boolean output for whether or not elements are pinned are not, which I will provide below. You can use this inputting your wall elements, then using Filter.ByBoolMask with its output.

To encourage you to understand how the script works & to further learn using Python with the Revit API I will provide an explanation on how it works. if you look at the API Docs that @Nick_Boyts referenced above you will see that “Pinned” property is a Boolean. You are on the right track by seeking a resolution to retrieving pinned elements by looking at the Element.SetPinnedStatus node’s Python code.

for i in items:
		i.Pinned = IN[1]

These lines in that code are essentially saying, for each element in the input list of element, set “true” for “Pinned”. Understanding this will help to understand the code I am providing below, that determines if elements are pinned or not:

import clr
import System
from Autodesk.Revit.DB import *

elems = UnwrapElement(IN[0])
elementlist = list()

for elem in elems:
OUT = elementlist

Python Nodes Basics

Thank you Amy for the details! I have been steadily building my dynamo knowledge and starting to gather resources for python learning. I definitely believe in doing/struggling/learning but would love to get your prospective - where did you start in your python journey?



@Jordan_Billingsley To be honest, coding was a side hobby of sorts when I was in college and I did a lot of the courses (back when they were all free) while procrastinating my actual schoolwork.

There are a lot of free resources for learning Python out there :slight_smile: is a good place to start - keep in mind, with Python and Revit/Dynamo you also need to familiarize yourself with the Revit API:

Reading forum posts that include Python codes and inspecting those is also a great help in learning.

1 Like


To further what @awilliams said - reading the code on the site helps, but even better is to experiment with it. Paste it into a python node and take it apart line by line until you understand what each snippet of code does. Do the same for your favorite packages which use Python extensively. I found the Archi-Lab nodes were really useful for this.

1 Like