Back

Process Evolution

I work for Harvey's Plumbing and Heating, which provides services for a wide range of high-end custom residential homes. The homes range from 6,000-30,000+ sq feet. The following process may seem impractical on the implementation side for these smaller homes, but has proven to save time and increase understanding in the field. It has also led our bids to be immensely more accurate, and allowed for efficiencies of communication in the field.

I began working at Harvey’s in November 2014, and over time I have been developing ways of integrating our database with Autodesk® Revit®. I wanted to be able to use the data that's in our bidding process to be passed through to our design to assist our models, with information, for a hand-off deliverable to our plumbers in the field and eventually to the owner.

Since beginning in late 2014, there have been a few victories along the way, which have helped us evolve our process and are quickly getting us to where we need to be. We have built several Revit-based assemblies of our plumbing systems, courtesy of our utilization of SysQue, and have them in our template file for placement. 

Revit MEP Workflow

Figure 1: Revit - AutoCAD coordination plumbing model

Harvey's Plumbing Assembly Library Example (Figure 1) – Each plumbing assembly is referenced to our accounting software, which in turn is tied to an assembly number. This example illustrates our kitchen sink assemblies and how our assemblies look after placement. We have other categories such as tubs, showers, toilets, etc. Fittings courtesy of BuildingData and automated though SysQue (Figure 2).

Figure 2: An example of one of our plumbing assemblies

The next goal, after getting the groundwork laid with our template, was to figure out how to tie this data to the deliverable in the field. We began by giving spool sheets to one of our plumbers to take out into the field. We realized quickly that the problem with doing this were design changes out in the field or clashes—i.e., studs, floor joists, and roof trusses—that are simply not accounted for in the architectural drawings and/or in the office due to the structural engineer not having a 3D model to coordinate with.

One way we began to mitigate this was by contacting our local lumber yard to figure out what software they utilized for their roof trusses and floor joists. They let us know that they use MiTek Sapphire. After some research we realized the structural framing model was modeled in 3D, and through coordination, communication, and now collaboration we have opened the door to allow for those files to import into Revit by simply requesting a 3D .dxf from the local lumber yard.

The beauty in this is that the architect’s model can be leveraged to coordinate with the 3D structural drawing, and in turn our mechanical drawings can fit right in place. Of course, on the other side of this coin is when you receive a 2D drawing or if the structural engineer has provided only a 2D drawing and isn't ordering the lumber from a 3D generated model. We leverage as much as we can into understanding the drawings, but this leads us to wonder how this can be fixed or adjusted in the field.

Figure 3: Plumbing assembly template

Coordination of Plumbing Assemblies & Branch Lines with Floor Joists

After a long conversation with Jay Ayala of Autodesk, we were able to get a little more clarity on this particular problem. He suggested a point layout system that would allow us to leverage the data in the field back to our design.

After this conversation a few questions ran through our heads. How can we leverage these points into our plumbing assemblies, and how can that data adjust to our current workflow? Also, what can we do to our current workflow to allow for this sort of interaction between field communication and drawing communication? As for now some of the questions remain unanswered, and that's why I'm posting this article! This also allowed us to think a little more outside of the box.

Dynamo Scripting for Assembly Placement

After diving into Dynamo, I was able to make a discovery of how we might be able to leverage it into the equation to resolve some of these questions. Bear in mind I am not a coder, and have only done a little visual scripting in college using Grasshopper for Rhino. What I'm trying to say is, if something I've done can be achieved in a better script I would love to see it and implement it! 

First I decided to see how I can select the points and place an assembly.

  • Place a SysQue sleeve (points already embedded into the family) or an APL sleeve (point/trimble point in each location of the assemblies).
  • Have Dynamo choose those points to place the groups and place the assembly tied to the selected point.
  • Place Group by Selection(s) – selecting the node and placing the group that is listed in the string. Obviously, all groups must be loaded into your Revit project.

Figure 4: First portion of Dynamo fueled script

Figure 5: Second portion of Dynamo fueled script. Rows can be added or subtracted to accommodate the number of assemblies in the drawing

The above node worked well, but we ultimately wanted to be able to select each sleeve in the project and have that tied to every point in the project. So, I began stringing some lines and thinking about the end goal with a starting point in mind. It led me to connect the dots, and in turn find a successful solution. I decided to follow the following steps this time around.

  • Select the model element Sleeve or Pt
  • Attach the string code block "PointDescription" to allow for the point description to fuel the data being used for placement of the families. The PointDescription parameter within each sleeve family contains the values of our matching assemblies on file. Referenced back to the original accounting software.

Placing Multiple Groups Associated to a Parameter

Figure 6: Assembled systems in the context of model for coordination of pre-engineered truss system and eventual fabrication

The method in Figure 6 allows us to count the number of groups in the assembly provided by the master plumber, and then to type a sequence code block that then fuels the other code blocks to reference the point description and family point locations. All this data places the groups on the associated sleeve that the family needs to reside. Ultimately we are looking at automated assembly placement and rotation after placement associated potentially to another parameter. At this point in time it hasn't been further developed.

I still believe there may be a more streamlined approach towards accomplishing this, but the goal is to allow for the point data in the field or manually entered points to automate our assembly placement. This data ensures that our plumbing assemblies are being placed in the right locations, and also allows for that coordination between the bidding, design, field coordination, and fabrication all fueled by Dynamo. (See Figure 8 for the installed assembly.)

Figure 7: Select model element(s) place group by string of Assembly Name. This can also be modified or broken down through the use of lists

The intent of this article is to achieve an evolution of residential construction assembly creation and field placement. If something in this article may be done in a different or more efficient way, I would love to learn from other professionals in the industry. Through collaboration and coordination we can better our industry and become more efficient together.

Special thanks:

To Marcello Sgambelluri for your resources for new Dynamo users like myself. Also for providing me with some feedback. 

To BuildingData, Lewis Wolcott, for clearing up the unknowns about your content and providing us with data that actually works.

To SteamNodes for allowing us to place our groups with the PlaceGroup.ByPoint node.

Appears in these Categories

Back