Sunday, October 9, 2011

Immaterial? I don't think so

This is a follow-up post to Immaterial? from almost a year ago. I promised to write about a new method we’re employing in one of my comments but got too busy. Finally I’m getting around to it. Be warned: it’s long.

I originally held off posting to see whether 2012 would bring any solutions on this front but that didn’t happen. At least now the bottom of the Custom Parameters section adjusts with the Materials dialog…hurray!

The least-worst solution I prefer is ugly workaround #1 as mentioned in the previous post. I hit a serious snag while experimenting but finally got through it. I like to refer to this methodology as the Materials sample board concept. Think about your office for a minute: you probably have a vast library of samples. This is analogous to the Materials dialog in your Revit project file. You don’t use all materials in your library in every project, nor do you schedule all materials used in your finish schedule (Ex: insulation, gypsum board, etc.). The same applies to Revit projects. Even assuming every material was actually used in some form or fashion, you’d want to only schedule a select few as finishes, which requires some filtering mechanism.

When crafting office-wide workflows, you have to be careful to keep things simple. This is a hard thing to do when the tools don’t do exactly what you want. So compromise is absolutely necessary in order to arrive to the best-possible solution. It won’t be perfect or satisfy every requirement, but will result in an improvement over how things are done today.

We all understand materials sample boards: designers pick paints, flooring materials, ceilings, glass, cladding, masonry & brick finishes etc. and present them on a board to get client approval. Those materials then find their place in the project, usually within room finish schedules, tagged elevations, etc. So my goal was to extend that concept into Revit. Presentation of those materials was not at all considered as you just cannot achieve that through print.

As discussed before, Revit will only schedule a material if it is used on a placed object. So the starting idea was to place “material swatches” in the project template and make them very difficult/impossible to delete by mistake, without resorting to obtuse ways of concealment such as through worksets, phasing or design options. This was a very important requirement so everything could be pre-set in the template, including the finish schedules. It was also very important to have the same materials used in the material finish schedule as materials in the objects themselves and utilize built-in & custom material parameters to store information that we want to see scheduled such as Manufacturer, Color, Pattern, etc. This would open up possibilities of building material libraries per client and/or project type to be re-used in the future.

Another important requirement was grouping of finishes by surface/object, such as Floor, Walls, etc. Since various materials (such as paints) could be used on different surfaces, it was also essential to have the ability to add unique schedule notes to each material in each application, which meant that this information could not be stored within the material itself. This issue, coupled with concealment methods, turned out to be a head-scratcher.

Material Swatches

The starting point was a simple generic model family that was to be placed multiple times in the template. After several iterations and reasons, it became clear that shared and nested families were required. Each shared “swatch” was nested multiple times into a base family that would represent the application/surface of those materials.

Material Sample Board Family

Multiple types were then placed in the template and editing these family types becomes the UI when building the finishes information. Type Comments is used for the schedule sub-headers and Schedule Order is for defining which application order is displayed in the material schedule.

Material Sample Board

In this example, I have 5 placeholder materials for each application but of course you could add more to suit your needs. Since we have 8 applications, 8 instances were placed in the template. The solid geometry of the swatch family was then set to not be visible and finally reloaded, making them completely invisible and unselectable.


Here are some interesting family facts that made all this possible:

  • If family geometry is made to not be visible, material take-off schedules still pick up the materials used and properly report quantities (volumes/areas of materials on non-visible solids are excluded). Hence the use of this technique will not skew your take-offs.
  • Families are selectable in-canvas even with no visible geometry unless all reference planes are set to “Not a Reference”.

These are the key elements needed to let us place “swatches” to host finish materials and prevent accidental deletion. Note that one can still pick the family in the browser and delete it, but you also get a warning that you’re about to delete “x families”, so it would be a deliberate mistake or done purposefully and not accidentally.

Material Facts

As mentioned in the other post, only the material name can be used in room schedules. Revit does not permit duplicate names so this can be used very effectively as a “Type Mark” since duplication cannot occur. The only hitch is that you cannot rename a material in the schedule: you have to rename it in the Materials dialog.

By using the Material Class, you can isolate the materials that represent finishes to make navigation easier.

Material Class

In the above picture I’m also highlighting a big shortfall in Revit: the inexistence of multi-value parameters. For example walls in certain rooms often receive multiple finishes: a paint and ceramic tile or FRP panels. My workaround is to create materials whose name represents a group of multiple finishes. This is solely used in room schedules. For the record, this is not something I’m happy about! However there’s no other way to achieve this and when using text parameters, we’re essentially doing the same thing.

The Finishes Schedule

Material Finish Schedule

To build a material take-off schedule (for Generic Models) to filter only the materials in the “material sample board”, I simply filtered for shared parameter “Schedule Order” as “parameter exists”, which is also used for sorting the application order (Floors, Base, etc.).


So why all this pain you ask? Well, keep in mind that once this is set in your project template, all it takes is for users to pick the materials and edit as necessary or create new ones. It also opens up the possibility to save material libraries rich with information that can be re-used. Not to mention that with material tags that read the material name, you’ll have flawless coordination with the “type marks” used in your finish material schedule. Room finishes can also utilize these materials in lieu of text parameters, although for multiple finishes you have to resort to the workaround mentioned above. Finally, we also have to make another check: that each finish that shows up in the finish material schedule is actually used in the project since these are manually added. For this purpose we also set up a “checking sheet” that contains a series of filtered schedules to make sure no finishes have been missed or added. Obviously it would be great if things were all automatic, but at this point this is as good as it’s going to get.



Gonçalo Craveiro Feio said...

Hi Dave. I have been doing some research on ways to accomplish those kind of things in Revit: relations between instances data, although I use a different approach.
My models are classified with the assembly code and keynote parameters using uniformat and masterformat. With this classification, I have been able to establish the type of element and the work result.
For the data association, I have been learning and using the API.
So far, I was able to make hardware type schedules from nested families with correct totals. But the whole system seems very complicated with 2 nested levels!
One of my problems is that it is not live: the app has to run to update the data.

sdbrownaia said...

I'm able to do the same thing without the shared/nested family, I think. I just made the material parameter of the "material sample" family and instance parameter. I'm not following the need for the nested shared, etc. I put mine on a previous phase, then then filter the shedule by type mark is greater than blank. This then shows only ones taged and used.

Dave Baldacchino said...

Scott, the shared & nested families are just a way to achieve a "UI" for the user to interact with the schedule so to speak. So they open whichever type they need and input the information without having to place any families etc. It's already built in to the template. See this image:

Another important reason for using shared families is so you can have a notes column in the schedule that can house unique information per finish application. For example I can have P1 used in walls and ceilings and still have a unique note for each row, even though the material is the same.

Greg said...

The thing I still don't get is how you're scheduling both the Material Board (where you have Type Comments and Schedule Order) and the Material Swatch in the same schedule...

When I try and replicate what you've got my schedule only grabs the Material Swatch family.

Greg said...

NM... I got it worked out. It was the shared parameter in the Material Swatch linked to the Material Board Type Comments. Not sure I understand how it's working yet but I will! Thanks!

Unknown said...

Dave. I got the finish material schedule working, but how do you tie this to the room schedule? Also, just for clarity, are your shared parameters type or instance? Thanks.

Dave Baldacchino said...

Hi Jason, which shared parameters are you asking about? The "Schedule Order" parameter is a type (so each family type represents a finish "application" such as Floors, Walls, Base, etc. Then each material parameter is also by type so I can have 5 floors, 5 walls, 5 bases etc. The quantity can be adjusted to suit your needs).

To tie to the room schedule, I add material parameters and associate them to rooms. So instead of adding parameters as text, you add material parameters. Now when you click in the field to fill it out, if you click the right little button, you get into the materials dialog. If you click in the box without touching the little button, you can type in text as you would do in a text parameter. However, the material name has to exist or Revit will not accept the input. The advantage of this is that you cannot input a material that does not exist (such as what might happen with a typo). The material name takes the place of the type name parameter, but since name duplication in materials is not permitted, it behaves pretty much like a Type Parameter.

Anonymous said...


Could you expand on how you set up the "checking sheet" schedules for verification of material usage?



Dave Baldacchino said...

Hi Dan, sorry for the late reply,

The so called checking sheet is simply a sheet with no titleblock that has a series of filtered schedules placed on it. The user just opens this sheet and these filtered schedules populate automatically. The main reason for this is that we were using these materials with names such as "P1, CT1" to be used when we needed to add multiple finishes, such as on walls, and needed to make sure that both P1 and CT1 had been added individually to the "sample board swatch" families. This was also needed to verify that all materials on the "sample board" were actually being used in the project.

Unknown said...

Hi David, I found this while looking for a better way to do material schedules. First have you updated this process or found a better way? I've created your process in my template but I'm having a problem. Everything works until I make the sample board invisible. then when I put a material on lets say a floor, it wont sort by the "Schedule Order". I know I'm missing something. Can you post a sample project of your system, or can I send you one to take a look at? I'm trying to set this up for my Interiors Studio group. Thanks Randy

Dave Baldacchino said...

Hi Randy, I'm sorry but I'm too busy to look through your files at this time. Please go back to the post and don't miss on any detail as it's all captured there as far as I know. I have not found a better way, but where I work now (at HOK) we don't use this method and are exploring other ways to manage finishes using dRofus instead.

Post a Comment