Schedule "Show in model" option by Dynamo

Hello,

I’m looking for a method to make sure that all elements of the model goes to take-offs/schedules. I need it to check the correctness of data included in model.
So, I think it can be possible to make Dynamo script which:

  1. Gets elements from every schedule.
  2. Shows elements of schedules in additional 3D views.
  3. Overrides graphic color in 3D view. Elements colored for example on red would be missing, other elements would be green.

For start, I can’t find custom node to get elements from view.
Maybe someone find a solution for that?

Regards
Piotr

1 Like

A schedule is basically a filter. As far as I’m aware you can’t just get the elements in the schedule unfortunately. You’ll have to rethink your process. You could “recreate” the schedule category and filters in Dynamo to filter a list of all elements in the same way or you might try something like a schedule parameter and a view filter.

You’d have to identify why elements are “missing” whether they’re on closed worksets, etc. Like Nick said, if you have the same filter criteria, you won’t get a different result in Dynamo than you would with Revit schedules.

Just a hunch, but it sounds like you might have a manager who doesn’t “trust” the output of Revit schedules…

A schedule is a view in Revit. So yes, you can do a filtered element collector with a view input of the target schedule. Spring nodes has a great node for this. (The example below shows how to get the doors in a schedule that have been filtered based on mark begins with)


That being said, if you were to have data rows or any other fake data in the schedule, this would not work as it will only report what is visible in the view. The isolation part and all of that will take some more work, but I primarily wanted to point out that cool tidbit about collecting elements in schedule views. :grin:

2 Likes

@Nick_Boyts, it could be an acceptable solution in case of few schedules. In my project there are almost handred take-offs.

@steinah6 I’m sure that schedules from Revit are correct. The task is to check every element which is in the project (eg. in-place family made especially for one project) goes to the schedule. Some of elements require special type mark, another comment to type. Moreover, common user can delete the value necessary to put it into schedule. So I am looking for metode to make sure, that nothing is missing. Trust but verify :wink:

@john_pierson It saw that node, but something didn’t work for me. I need to look at that once again.

  1. Collect all schedule views.
  2. Get all elements in the schedule as @john_pierson illustrated above.
  3. Combine the list of elements into a flattened list and pull the element IDs.
  4. start a new 3D view with all worksets and other info on, and all categories displayed. Likely you want to save this in your project going forward so it’s static.
  5. Get all elements in that view, flatten the list (if it isn’t already) and pull the IDs.
  6. Use a List.Difference method to pull the items in the 3D view which are not in the schedule.

This obviously gets harder across links, but it’s doable. However if you can’t make it work in a situation with no links, you have no chance with links. So this is a case where it’s best to start small and build up.

@john_pierson, I tried again this node, now it works. Maybe something was wrong with version of spring package. Unfortunelly, It shows more data than I expected. Please, look at the screen: schedule contains 24 elements, Dynamo brings over 400 results.

@edit: I think, it works with schedules, but not with material takeoffs :confused:
image

@jacob.small, I can pick category as “schedule” and next “all elements of category” like that:

:point_up: yep. because you are showing a material element in that view. You could filter them, but the method I mentioned may not work after all.

Ok, thank You for confirmation. So, I’m still at the same point.
Another way, maybe easier - I can add to every schedule new column “Element ID”. Element ID could be a shared parameter. Then, I would create one more schedule which includes all elemenst visible in projekt. Then, using Dynamo I can fill takeoffs with IDs, export data to excel and compare sum of IDs from each schedule with summary one. What do You think?

Good idea. You may want to use the unique id or GUID as that has better long term stability.

That’s fantastic. I didn’t even think of that. :+1:

Can You recommend good method to fill project parameter (which is shared parameter) with IDs?
I made a script to fill all schedules with additional filed, and now I’m looking for something to put IDs into parameter.

Off the top of my head:

Element.SetParameterValueByName(Elems, "IDasAParameter",Elems.Id+"")

Of course IDasAParameter is the name of your parameter, and I am assuming it takes a string value not a double or integer.

Finally, I have every element in my project filled with ID, but the way to achive a solution of overall problem that I’ve choosen is wrong.
Some of schedules are made without option “itemize every instance of an element in the schedule”, so IDs are not visible there. I can’t change it because of this representation is used in next steps of data managment in Excel. To sum up, I still don’t have good solution but I’ve learned a litte bit Dynamo :wink:

Maybe duplicate all schedules appending a name like ‘schedule checker’ to the end of the values, and apply a view template that just disables the ‘itemize all’ value? Could then sort the schedules in the project browser accordingly.

I thought about this, but it’s 103 schedules. Duplication will make over 200 items, which couldn’t be hidden.
Maybe is it possible to build “the path” to get a typ of filter, condition and value able to make same list of elements like schedule present?

103 duplicate schedules isn’t much of a concern if you organize your schedules in the project browser (something we can do now, similar to any other view or content type).

You might consider doing it in a separate model as an alternative. Definitely use GUIDs instead of IDs in that case.