Day

01

pyRevit

Challenge

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

21-Day pyRevit Challenge

Mon

Tue

Wed

Thr

Fri

Sat

Sun

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

Tool Of The Day:

"The Warnings Snitch"

Today we're looking into Revit warnings so we can solve them faster and more efficiently. Ready to jump in?

You're About To Learn:

>>>

How To Get Warnings

>>>

How to Read Warning Info

>>>

How to use pyRevit Forms

>>>

How to use pyRevit Linkify

>>>

How to Modify User Selection

Let's Create "The Warnings Snitch" Using

P.R.O.C.E.S.S. Method

The 7-Step Framework To Guide Your Development Process.

PLAN

Warnings Issue in Revit…

If you ever had to solve warnings in Revit, then you know how bad it is…

Autodesk gave us a menu where we can see a list of warnings but can't even select anything…

Very inefficient. We deserve better.

Let's create a custom tool that will list all elements with warnings and give us better control to select elements.

The goal is to locate and select warning elements faster so we can focus on solving them instead of playing hide-seek.

It might save 10s each time, but it will accumulate to hours in the long run and reduce a lot of frustration.

Let's build it.

RESEARCH

Here's some extra help

Based on research:

People who study in groups always perform significantly better on critical-thinking tasks than those studying alone.

Therefore, you'll be part of a LinkedIn group made only for challenge participants. You can make friends, share your progress, share your awesome tools and keep each other accountable.

>>>

Learn Together
Share With Each Other
Keep Each Accountable

Documentation

Get Warnings - Document.GetWarnings

Code Snippets

1.How To Get All Warnings

#📦 Variables
doc    = __revit__.ActiveUIDocument.Document #type:Document

#1️⃣ Get All Warnings
all_warnings = doc.GetWarnings()

2.How To Read Warnings

#📦 Variables
doc    = __revit__.ActiveUIDocument.Document #type:Document

#1️⃣ Get All Warnings
all_warnings = doc.GetWarnings()
Examples on GitHub
  • a

  • b

  • c

YouTube Tutorials
  • a

  • b

  • c

P.S.
You don't have to read and watch everything in research.

OUTLINE

  1. Get Warnings

    Get all warnings in the project.


  2. Sort By Warning Type

    Iterate over warnings and use its warning description to sort similar warnings in a dictionary.


  3. Select Warning Type From List

    Create a simple UI pyRevit form so user can filter warnings that are currently interested in.


  1. Iterative Report

    Create a simple interactive report so user can select elements with warnings.


  2. Select Warning Elements

    Modify user selection to desired elements.

NB!

TRY BUILDING YOURSELF
DON'T RUSH TO SOLUTION

NB!

TRY BUILDING YOURSELF
DON'T RUSH TO SOLUTION

CODE

Remember: your goal is to create proof of concept as fast as possible.
Don't try to make it perfect. Skip steps if necessary. Just make it work.

Let's create a simplified version without any UI forms.
We just want to:

  • Get all warnings

  • Iterate over them (for-loop)

  • Read their information

  • Create interactive button (linkify)

The goal is to verify that
a) We can do it
b) It can be useful

CODE (Fast-n-Dirty Style)
...

EDIT

Only once you have a proof-of-concept you can focus on
refactoring your code to complete all steps and make it
more structured, optimized and easier to read.

We know that we can get to the end so we can take a step back and rewrite the whole tool to include selection.

Headline
all_wins       = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Windows).WhereElementIsNotElementType().ToElements()
all_doors      = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors).WhereElementIsNotElementType().ToElements()
all_door_types = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors).WhereElementIsElementType().ToElements()
Headline
all_wins       = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Windows).WhereElementIsNotElementType().ToElements()
all_doors      = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors).WhereElementIsNotElementType().ToElements()
all_door_types = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors).WhereElementIsElementType().ToElements()

STRESS-TEST

Private LinkedIn Group

Based on research:

People who study in groups always perform significantly better on critical-thinking tasks than those studying alone.

Therefore, you'll be part of a LinkedIn group made only for challenge participants. You can make friends, share your progress, share your awesome tools and keep each other accountable.

>>>

Learn Together
Share With Each Other
Keep Each Accountable

Case #1 - Break UI Form

Here is some text about today's challenge…



Case #2 - Try Other Revit versions

Here is some text about today's challenge…



Case #3 - Try Other Revit versions

Here is some text about today's challenge…



© 2023-2025 EF Learn Revit API

© 2023-2025 EF Learn Revit API

© 2023-2025 EF Learn Revit API