Dynamo Checkerboard Curtain Wall Panel Tutorial

Dynamo Checkerboard Curtain Wall Panel Tutorial

 

Rowlock Brick Checkerboard
Architect’s Sketch

This post will describe a fairly simple graph for offsetting alternating curtain panels in a curtain wall.  The idea was generated by a request for a checkerboard rowlock brick wall accent.  I’ll break down the dynamo graph for you in pieces.

Prior to getting started, make sure you have installed Dynamo Version 1.2.0 or higher.  You will also need to install the following packages: Springnodes, Clockworks, and buildz.  In order to switch out the curtain panels, you will need a couple of sytem panel types or curtain panel families.  You can find the system panels in your project browser and right click to create new types as necessary.

CW Panel Type Image
Create New Panel Type

Once you’ve created the new types, right click the type and set the appropriate properties to create the offset surfaces or alternating patterns to be used.

Duplicate, Duplicate, Duplicate
Right Click to Duplicate the panel type once created.

In this example, I’ve created two new system panel types: Brick_Flush, and Brick_Offset.  I also edited the type properties and added a brick rowlock material.  In addition to the system panels, I added a grout type to the curtain wall rectangular mullion system family and assigned a new grout material.

Example
Resulting Checkerboard Offset Rowlock Brick wall

The above image is the result of the graph shown below which collected all the curtain panels from the user selected curtain wall.  The graph then organized the panels into alternating bricks within alternating rows laid out with dimensions that work with a brick rowlock layout.

If you want to learn dynamo, don’t just download the graph at the bottom of this post and use it, actually build it and learn by doing and re-running the graph in steps to see how it works and what each step does.  Ready to learn? Here we go.

Launch Revit and draw a curtain wall.  To replicate the brick rowlock checkerboard curtain wall, adjust the properties of the curtain wall to match these settings:

 

Revit Curtain Wall as Brick Rowlock
Element Properties of the Base Curtain Wall
CW Rowlock in Revit
The initial “Rowlock Brick Curtain Wall” shown above.

Note: I have already created the Rectangular Mullion Type to represent the 3/8” thick grout between the bricks.  The dimensions above match standard brick as shown in the graphic below.

Brick image
Standard Brick Rowlock with dimensions.

Launch Revit Dynamo from the Addins tab and using the node search function, add the following nodes and connect them together as shown in the image below: Select Model Elements, CurtainPanel.ByElement, and CurtainPanel.Sort.  Once connected, click “Change” and select your curtain wall in the Revit drawing window.

Revit Dynamo Curtain Panels
Collection of Curtain Panel elements in Revit Dynamo

Once you’ve connected the nodes together and selected a curtain wall, click Run, then hover over the lower right corner of the sort node to see if you’ve gotten any panels in the data list.  The CurtainPanel.Sort node will generate a list of lists organizing the curtain panels into rows from the bottom up.

To see the results of our work, lets add the “FirstItem” node and the “Element.Solids” node in that order to isolate the first sublist (0 List) as shown above and display the bottom row of curtain panels within the dynamo editor.  Click Run, your dynamo window should resemble the following image:

First Row of Curtain Panels
First row of curtain panels isolated by List.FirstItem

Using List.FirstItem and Element.Solids gives us visual feedback within the dynamo editor. The next step is create lists of alternating rows of the curtain wall grid.  Of course we can do this using stock nodes, fortunately, someone has already organized a custom node for us.  Add the Springs.List.GetEvenOdd and connect it to the CurtainPanel.Sort node.  Now click the Odd output connector and connect it to the “List.Firstitem” input connector.  Lets run the graph again and look at the results. Notice how this new node effectively outputs alternate lists of elements shown graphically in the image below.  Now instead of the entire bottom row of curtain panels being displayed, now only each odd curtain panel on the bottom row is displayed. Switch the output to even and re-run it to see the other panels.

Curtain Panels
Alternating Curtain Panels in bottom row (List 0)

If you bypass the “List.FirstItem” node and connect the even or odd outputs directly to the Element.Solids node, you’ll see exactly what the GetEvenOdd node is doing.  It is creating lists of the alternating columns. Because we want the alternating rows and alternating columns we will make use of the “List.Transpose” node along with two more …GetEvenOdd nodes.

Alt Curtain Panels rows and columns
Alternating Curtain Panels in rows and columns

In order to generate our checkerboard pattern, we are going to have to build lists of alternate rows as well as lists of alternating panels within each row. Let’s adjust our graph a little further. Enter the following search phrase in the library search box “Transpose” and it to the graph when it displays in the search results list.

List Transpose node
Use this node to swap rows for columns in your list collection

Select the List.Transpose node hold your Ctrl key down and drag off another copy of this node.

Now Click to select the “Springs.List.GetEvenOdd” node, hold the Ctrl key down as you drag off a copy of this node. (You can also use copy / paste within the dynamo editor). Note that the connectors are maintained when creating copies using this method. Click to unselect them.

Connect each transpose node to an output connector from the original …GetEvenOdd node, now connect the new …GetEvenOdd input connectors to the output connectors from the transpose nodes as shown in the image below

Organize Alternating data node
List.GetEvenOdd Node from Springworks

At this point, if you want to duplicate the solids node another 3 times you can connect them to the four even/odd output connectors to see what each output list contains individually (the download is organized this way for learning purposes).  Note, when you click on the Element.Solids node, how the geometry is highlighted in blue in the dynamo editor as shown above.

Since we are alternating only two types of panels in our curtain walls, we will use the List.Create node to recombine the output lists in an organized fashion.  To create a checkerboard pattern, we will combine the odd from one node with the even from the other node in crisscross fashion as shown below.

criss cross connectors
Collection across outputs is how we build the checkerboard pattern

Now that we’ve reorganized our curtain panel lists, its time to change the curtain panel type.  Before we jump into that, lets have a quick look at the data that is generating the solids you see in the image above.

Nested List of LIsts
Nested List of LIsts

As you can see in the image above, the result of our reorganizing has created some very deeply nested data.  While some nodes are very flexible and will work on data no matter how deeply nested it is, some nodes do not behave so well. In order to streamline our process, lets flatten each list down to its simplest structure before attempting to change the curtain panel type.  Add a “flatten node” for each output.  Use the Builtin version of the flatten node to reduce the 4 deep list of lists to a single list of panels as shown below:

flatten node at work
Flatten the lists of data for use downstream

Click in the Library search box and enter this keyword: “FamilyInstance”, choose the second one in the list displayed. “CurtainPanel.AsFamilyInstance”.  You’ll add two of these and connect them to each of the flatten outputs.  Enter “SetType” in the library search box and add two FamilyInstance.SetType nodes as shown in the image below:

Family Instance Set Type
Family Instance Node needs an element list and a type

Note that the FamilyInstance.SetType node also needs and input of the familyType to be set.  Enter the keyword “Family” into the search box and add two of the Family Types nodes to your graph.  Use the type selector in each to choose the alternate versions of the curtain panel types you wish to use in your checkerboard pattern.

Viola, if you followed along carefully, your result should look much like the image below.

Final result in Dynamo Graph
Swapped Types

I hope you were able to follow along and add this workflow to your Dynamo repertoire.

You can download the completed and formatted dynamo graph Here.

Note: this method also works for other curtain panel types:

Graph Output
The capture from the graph – the completed full size capture is in the zip file download.

 

Any size panel
Any size panels will work
So Proud of my Son

So Proud of my Son

Thought I’d share with you a little success my son has had with TSA at his highschool.  Earlier this school year, he entered the Architectural Design competition at the TSA technology day at the state fair in Georgia.   The challenge was to design a garage with workshop.  He put together a design plan for a wood working shop inside an enlarged 3 car garage. Here was the design challenge copied from the flyer:

Design Challenge Background:

DIY (Do-it-yourself) is coming back into style. Many home owners are adding separate multi-use buildings to park vehicles and have a workshop as well.

OBJECTIVE:
The challenge is to design one of these garage/workshops for a client. Your job is to act as an architect and prepare a pro-posed design for a client who wants to park two cars and have a workshop in the same building, separate from the main house. You do not have to include a main house. The entry needs to be only the garage/workshop. Consideration needs to be made for getting materials into and large projects out of the workshop. Research what machines would be included in the workshop and where they may be placed inside for safe use. Also include some space for storage.

Here is what he submitted:

This design was started as a 2D sketch in Sketchup3D, recreated in Revit 2015, then exported to Lumion3D for rendering and presentation.  Here is a photo of his presentation board.

Submittal Board
Submittal Board

The following images are the rendered images used in his presentation as exported from Lumion.  Note, Lumion3D saves in bmp format.  These images were converted for presentation on the web.

Floor Plan
Floor Plan

Tsa Woodwork – Sheet – A101 – Workshop Floor Plan

 

Rendering Birdseye View
Rendering Birdseye View

 

Rendering Perspective
Rendering Perspective

 

Rendering Interior
Rendering Interior

When he presented his design and was interviewed he ended up winning the blue ribbon – First Place for his efforts. A good effort for a 10th grader with no formal training or any classes in Architectural Design.

The blue ribbon!
The blue ribbon!

View his Lumion3D rendering and panorama model for the TSA Technology Day Architectural Design Competition.

Update: Using DOS and VBScript to Upgrade your Revit Library for Free

Minor update to scripts and addition of scripted upgrade for template (rte) files as well as automated cleanup of associated files. Please grab a copy of the updated zip file here:

RevitUpgradeScripts.

Using DOS and VBScript to Upgrade your Revit Library for Free

Using DOS and VBScript to Upgrade your Revit Library for Free

Spring is here and its time to get ready for the next Autodesk product upgrades. If you are a Revit user like me, you probably don’t look forward to upgrading the library with each release.  In releases up to 2015, Autodesk always provided an upgrade families batch routine for Revit.  Since 2016, that utility folder is missing.  Have no fear, I have the solution for you.  Ready? Lets get started.

Set up a duplicate folder tree for your next version library. I use “Tree Copy” to generate a duplicate folder structure from my existing library. Create a folder that you can use as work area. I named mine “~PROCESSING”.

Processing Folder
Create a folder to process the upgrade files.

Select a handful of folders from last year’s version of Revit and copy them into your “~PROCESSING” folder. I use a “right click” drag and drop process to ensure that I am copying the files not moving them.

Screen cap for drag n drop
Drag and Drop Copy

Release your mouse when the cursor is over your destination folder and use the popup menu to choose “Copy Here”. Don’t worry that windows indicates “Move to ~PROCESSING” while you are dragging the files. If you right click drag, you’ll have the option to choose when you release the mouse button.

Choose copy
Release the Dragged Copies

 

Let Windows do the Copy
Let Windows do the Copy

Now that you have your old files ready to be upgraded, copy the provided scripts to the same location using the “right click” drag and drop method as shown in the image below.

Here are direct links to the script files you’ll need:

RevitUpgradeScripts

 

Right Click Option
Right Click Option

To create the file list for your families upgrade, double click on the “Upgrade_RFA.bat” file inside your “~PROCESSING” folder.

Double Click to Run
Double Click to Run

When the batch file runs to completion, the famlist_rfa.txt file will appear as shown below. Note: the zip file download now contains two additional files a batch file to create a list of project files, and a journal file that will upgrade the project files.

Scripts for Family Upgrade
Scripts for Family Upgrade

We are now ready to process our upgrades.  We will allow Revit to run in automated fashion using a custom written journal file that we drag on top of the Revit 2016 desktop shortcut.

Launch the Upgrade
Launch the Upgrade

Let Revit run in Automatic mode upgrading your files.  If it errors out, it will present an “Entering Interactive Mode” warning like the image shown below.

Brings Upgrade to a Screeching Halt
Brings Upgrade to a Screeching Halt

Click Enter interactive mode, and click “OK” to accept any other message dialogs that appear. Exit out of Revit, saving the last file that it had successfully opened.  Navigate your folder and find the journal.0001.txt or the highest number journal file that has been created if this has happened on more than one file.

Find the last journal file
Find the last journal file

Double click to open this journal in Notepad.  Scroll to the bottom of the file and click at the end of the text found on the last row.  Click the edit menu and choose find and then enter  .rfa as the search term in the text box that displays.  Change the search direction to “Up” and click “Find Next” three times to advance to the last opened file.

Find the last opened rfa file
Find the last opened rfa file

Highlight and select the filename and extension (.rfa) as shown in the image below.  Copy this file name to your clipboard.

Copy the filename
Copy the filename

Close the text file and open the famlist_rfa.txt file in your ~PROCESSING folder using notepad.

Double Click to Open
Double Click to Open

Place your cursor at the very beginning of the file, click the edit menu and choose find.

Find the filename in the list
Find the filename in the list

Paste the filename from your clipboard to the search entry text area and click find next.  Select the row that contains that filename and all the preceding rows.  Delete them from the text file. Ensure that you delete the empty row at the top so the first row contains the next available file name and path.  Save and close the famlist_rfa.txt file.

Delete all processed files
Delete all processed files

Left Click and drag the Upgrade_RFA.txt file from your ~Processing folder onto the Revit 2016 desktop shortcut as shown in the next image to restart the process.

Restart the Process
Restart the Process

Watch the magic happen as the batch routine continues reading the filepaths from famlist_rfa.txt and opens them one by one inside Revit 2016, saving and upgrading each in turn as if by magic.  When the process is done, Revit will close itself.

At this stage, you have upgraded all your families, now it is time to move onto the Project files contained in your library.  This process is very similar to the last one.  Double click the Upgrade_RVT.bat batch file to generate a new Filelist_rvt.txt containing the names of all the project files in your library. Once that file is generated, Drag and drop the Upgrade_RVT.txt file onto your Revit 2016 desktop shortcut to start the automated process.  If the process stops at the “Enter Interactive Mode” message box, perform the file cleanup by locating the last successful upgraded filename using the journal files and remove it and the files above it from the Filelist_rvt.txt file.  Drag and drop the Upgrade_RVT.txt onto the shortcut to restart the process.

Final Cleanup

Double click the XDelete_RFA.bat file to perform final cleanup operations in your processing folder.

 

Delete all scripts and backups
Delete all scripts and backups

 

Cleanup in Process
Cleanup in Process

Once clean-up is done, move the folders out of ~Processing into your library and delete the ~Processing folder.

Remember, If Revit errors along the way with the “Entering Interactive Mode” message, search the journal to find the last file processed, remove the processed entries from the respective file list and continue processing the rest of the library.

~Richard

Dynamo Barrel Vault Brace 07

Dynamo Barrel Vault Brace 07

We are going to finish up this topic with this post on setting parameters.  If you are just arriving at this blog for the first time, I’ve been doing a series of posts on Autodesk Dynamo.  You can catchup by clicking the links below, when you’re caught up we’ll proceed.

Let’s get started adding nodes to our graph that will allow us to control our instance based parameters for size. Ready? Open the Adaptive Component Placement.rfa family we created in post 4 of this series.

Now click the “Addins” ribbon tab and open the Dynamo editor.

Within the Dynamo editor, open your copy of the graph we’ve been working on or download the copy I put in post 6 of this series. A good place to start is with upgrading the packages that are in use. A little time has passed since I created this graph and I ran into crashing when I first opened it in V0.8.0.950. Click on the Packages menu item in dynamo and choose search for packages. Click on the latest versions of ArchiLab, Clockwork, and Lunchbox. If dynamo wants to uninstall them, its ok. Once you’ve updated or installed these packages, drag your integer slider and click “Run” and make sure Dynamo is reconnected to the geometry in our family. If you see a warning about multiple instances in the same place, just select all your brace instances and delete them and let Dynamo place them again. Is the graph working again?

Good,the first thing we need to do is find a node that will allow us to set parameters. Click on the search tool and begin by typing in the following as shown in the image below: Element.Set

Element.set...
Set Parameters Node

Click SetParameterBy Name and let’s investigate the node before we begin wiring it up. As I mentioned earlier, it is helpful to work from both ends back toward the middle, so since we want to set parameters for our family insertions, we will be creating a new end point node to do it.

Drag your Element.SetParameterByName node to the far right of the graph and hover over its titlebar. Notice the tool tip properties that appear above the titlebar. This is dynamo’s help providing you a brief look at the node, its purpose, and what the inputs and outputs are.

SetParameterByName
Set Parameter By Name

If that isn’t enough to get you started with a particular node, then right-click your mouse while you are hovering over the title bar and click the “help” menu item. This will display a dialog box containing more info about the node as shown in the image below.

help
Right Click on Title to access help

As you can see in the help, we need the “family instance” as an element input, we will need to wire up the parameter name as a string and a value as a variant (text or number). Close the help box and click on the element input in our new node and wire it up to the “AdaptiveComponent” output from our graph’s “AdaptiveComponent.ByPoints” node.

Return to the search tool and type in string and hit the enter key and drag your new string node over to the left of the Element.SetParameterByName node. It is always nice to use a purpose made tool for the job, so lets clear our search tool by clicking the x on the far right side of the search input box, and navigate down to Core, Units, Actions and choose the Number from Feet and Inches node as shown in the image below.

units Imperial
Number from Feet and Inches

Drag it over and align it just below the string node. In the string node, enter “PipeRadius” and connect its output port to the “ParameterName” input port. Enter 0’ 2 ½” in the new number node and connect its output to the Value input on our Element.SetParameterByName node as shown in the image below and click Run:

Set parameter by Name
Set Radius

Did the PipeRadius Update? Can’t tell? Try changing the value to a larger number like 8”. Run it again. Are you setting parameters in your family? If it is not working, double check that you set your 4Point_Brace_AC parameters as instance and you assigned them to the same name parameter in your AdaptiveComponentPlacement family.

pipe radius in action
Changing parameter values is easy with Dynamo

I’ll let you duplicate the nodes we just added and create the version for the BraceRadius. Did you know that you can select all three new nodes and copy them to the clipboard? Use a window selection to cross them and use CTRL+C to copy to the clipboard. Now paste them to your graph using CTRL+V and move them just below the above nodes. They are already connected, how cool is that? Change the new string value to “BraceRadius” and test it. Is your family adjusting?

Set parameter
The proof is in the pudding when the radius changes.

Now you know how to set parameters by name using dynamo.  See you next time.

Dynamo Barrel Vault Brace 06

Dynamo Barrel Vault Brace 06

We should be ready to start adding nodes and making connections now.  If you are just arriving at this blog for the first time, I’ve been doing a series of posts on Autodesk Dynamo.  You can catchup by clicking the links below, when you’re caught up we’ll proceed.

Open the Adaptive Component Placement.rfa family

Launch Dynamo and click New to create a new dynamo graph or workspace.

When you’re working in Dynamo, its helpful to work backwards from what you want to build to what you need to drive it.  In this case, we want to place adaptive components along a series of points running along the top and bottom of our trusses.  So right off the bat, I know that I’ll need some node to place the adaptive component by points, and a way to select the curves containing the points.

Alright with those two elements in mind we’ll take advantage of the search tool.  If you remember from previous posts, the search tool is at the top of the library list along the left side of the dynamo main window.  Move your mouse there and begin typing “adaptive..”  Did you notice that the list was immediately filtered to only show you nodes that contained the word adaptive?  See if you can find the AdaptiveComponents.ByPoints node.

library_ac_node

 

Good, you found it, so let’s click it to have one added to our graph

It probably came in a little big, so click anywhere in the graph window and roll your mouse wheel to zoom out drag the node off to the left side of your graph window.  It usually places these new nodes at the center of the graph.  Remember this when your graph gets really complex.  This node will represent the “end condition” of our project.  As this node receives points from our graph, it will place the brace family aligning each ac point in the family with a point located on one of our curves. Notice the inputs (along the left of the node) and outputs (located along the right side), we have an input connector for points, an input connector for a familysymbol (think family type) and an output value of “AdaptiveComponent”.

node_Breakdown

Still working backward, let’s return to the search bar and enter “family types”.  Find the “Family Types” node under Revit -> Selection -> and click it to add one to the graph.  Did you notice that the library is not only filtering the options based on your search input, but is also providing a list of the “Top Results”.  Those guys at the factory sure make things easy for us don’t they!

With the family types node in our graph, let’s create a pipeline for our data from one node to the other. We do this by clicking first on output connector or port of the Family Types node and then click on the “familysymbol” input connector or port of the AdaptiveComponent.ByPoints node.  As seen in the graphic, the “data pipeline” is represented by a dashed line when the connection is incomplete and by a solid line when the connection has been made at both ends.  From now on, I’ll just say to connect “this port” to “that port” and you’ll know what I mean!

spaghetti

Did you know? – You can make disconnections too, by simply clicking again on port and then simply clicking on empty space.  We’ll connect and reconnect frequently as we work in dynamo.

Click on the display toggle (hollow or filled square at the lower right corner of the AdaptiveComponent.ByPoints node.  Notice that it displays “null”.  This is because we haven’t run our graph yet.  This will soon change, we’ll revisit this when we have made some other connections.

null

So, as I mentioned earlier, we frequently work backwards in Dynamo from the result to our initial step as we layout out the logic for our dynamo graph.  Looking at the AdaptiveComponent.ByPoints node, we see that there is another connection to be made.  The points port indicates that it wants to receive a list of points.   While we could just create a list of points, it would be better if we could pull the points from our truss chords.  We’ve already drawn the curve lines to represent the chords by tracing our dwg import, so let’s jump to the other end of the task and add some dynamo selection nodes to pick the curves we’ve already drawn.

Click the search tool and begin typing “Select” without the quotation marks.

FileMenu1

 

Find the tool Select Model elements and click on it in the library list area. This will add it to our workspace.  Notice that it has a yellowish background and the result indicator displays “Nothing selected.”  Don’t be alarmed, we’ll select something soon, and Dynamo will remember the selection for us by displaying the Element ID in text.  Yes, it is the same element id as Revit.

Since we will have four connection points per brace and because we are bracing between the top and bottom chords of two adjacent trusses, it goes without saying that we will need four “Select Model Element” nodes. You can click the library 3 more times or select the inserted node and copy to the clipboard and then paste 3 times.  Your choice, but sometimes it is faster to copy paste when your deep in a graph and don’t want to keep using the “search” area.

startup

Your workspace or graph should look something like the image above at this point.  Since we’ve been at this for a while, it is probably a good time to save our work.  Click the save icon on the Quikc Access Options bar and save your graph as “Dynamo_Barrel_Vault_Truss_AC_Placement.dyn” or whatever name you choose.

Note: It is always best to be descriptive when you are sharing with others or picking items from a list, which happens frequently in Revit.

Let’s Run our project and begin selecting our model splines.  Configure your screen so you can see both the dynamo editor and the Revit environment and while you’re at it, let’s select that dwg import and temporarily hide it in Revit to make our model element selection easier.

ReadyForSpaghetti

If your screen looks similar to the image above, click the the “Run” button and starting with the top “Select Model Element” node perform the following actions:

Click Select (inside the node)

Move your mouse into the Revit drawing window and select the bottom chord spline of the Left Truss .

Notice that the element id of the spline curve is indicated in the node display.

Working your way from bottom to top and left to right, make your selections of all the splines, one spline per select model element node.  Click Run, you should see the approximate curves displayed in the Dynamo Geometry window.  You can zoom to fit to see the results if you are zoomed in too far. Click the Geom toggle in the lower right corner of the graph window, then right click your mouse and choose rotate.  With your left mouse button depressed, move your mouse until you have a similar view of the dynamo geometry.  Hit CTRL + G to exit the geometry mode.

Selections

The select model Element nodes will pass the spline object as a curve to the next node we add.  Rather than collecting and passing each selection as a single element, lets build a list of the selections and pass the list.  We can do this by choosing the List.Create node from our library. You can find this node by searching or by clicking directly to it under “Core” -> “List” -> “Create” or by typing in the search box “core.” Then looking for create.  Did you know the dot operator worked in Dynamo to identify particular nodes within packages?  Now you do.

When the list.create node is displayed it has an index0 input and a list output port.  Click the plus sign (+) three more times to create an index port for each of your splines and connect them up.  It’s worth noting that arrays or list items in Dynamo always start with 0.  So the index item number will always be one less than the total number of items.

list of curves

Click Run to see the resulting list of curves get built using the display toggle.  Note that it indicates null before the Run button is clicked and a list of curve by points after Run is completed.

list of curves apres run

It is our goal to divide the curves into a series of points to feed into our AdaptiveComponent placement node, so we need to do some division.  Return to our friend the search box and type in divide.  Find the DividedPath.ByCurveAndDivisions and add it to the graph.  While we are there, lets add a query to identify the points created by the division.

division_points

Also pick Points under Query and then we’ll connect the graph so it looks like the image below. We’re almost done. Aren’t you excited?  Before you click run to see the results, lets add a node to allow us to enter the number of divisions.  We could do this with a number input node, but then we’d have to manually type in the value everytime we wanted to change it.  Much easier to type “slider” in the search box and add the “Integer Slider” node to our graph.  Connect it up to the divisions input port and set the value to a number between the min and max of the integer slider range.  (Click the circle icon to display the Min and Max value input fields.).

Okay, hit Run now and look at the results.

dividedpaths

Notice the points displayed along our graph geometry and the resulting lists in the display toggle of the DividedPath.Points node we added earlier..

Okay, so far so good, we’ve got the curves and we’re splitting them into equal divisions generating points along the way…now we need to marry up each lines index item with the rest of the curves.  In other words, the first points on each curve should be grouped together in an organized fashion.  We can do this with a transpose node.  It will take the output from a row and swap it with a column.  So rather than four lists of x number of points, now we’ll have x number of lists, each containing four points.  This is just what we need to place our bracing family.

Use search to locate the List.Transpose node and add it to the graph.  Connect the output of the DividedPath.Points node to the input “lists” port of the List.Transpose node and click run.  Compare the lists generated.

transpose

Now we are ready to connect our resulting points list, transposed from the original curve list, into our adaptive point placement.  Click on the Transpose.List output port and click on the points input port of the AdaptiveComponent.ByPoints node.

finalconn

If you toggled on the “Run Automatically, you should have the results by now.  Do they look like this image?

Completed_BracePlacement

Congratulations!  You are now a “Visual Programmer”!  Return here for the next post as we connect our material and radius size parameters to our brace family and control them with Dynamo too!

Grab a copy of the graph here

Dynamo_Barrel_Vault_Truss_AC_Placement_Finish

Dynamo Barrel Vault Brace 05

Dynamo Barrel Vault Brace 05

We’ve built all the necessary components, an adaptive component profile family, an adaptive component brace family with four adaptive placement points, and an adaptive family containing the profile curves that run along the inside edges of the barrel vault trusses that hold up the roof of our project file. It’s time to begin building the Dynamo graph that will give us a flexible solution to place the brace along the curves.

I hope you’ve been following along and creating your families along the way. If not, then take some time to work through the previous posts linked below:

  1. Dynamo Barrel Vault Brace 01
  2. Dynamo Barrel Vault Brace 02
  3. Dynamo Barrel Vault Brace 03
  4. Dynamo Barrel Vault Brace 04

The placement family we built in the last post is available directly at the link below:

Adaptive Component Placement

By the way, this solution was built in Revit 2015 using Dynamo 07.5. You can use one of the newer daily builds if you want, but the screen captures will look slightly different. Before we launch dynamo let’s load the parts we need:

  • open the adaptive component placement family and click the insert Ribbon tab.
  • Click the load family tool and load the 4 point AC Brace family created in post 3 and 4 of this series.

Load Family

With that prep work done, we are ready for spaghetti…sorry couldn’t resist.  Let’s get started with Dynamo.  Let’s launch Dynamo. You’ll find the Dynamo launcher on the Addins tab.

launch

Before we connect our first nodes let’s get familiar with the Dynamo interface. First up is the welcome or startup screen

Startup

You can use the File menu area at the top or the Files area on the welcome screen labeled in blue above. Directly below the I/O area is the recent files area, which presents a quick way to click back into your latest graph. When you’re ready to learn more, you can visit the source links to view example files by either clicking the link directly or clicking the “Show Samples in Folder” link to browse using windows file manager. The learning continues in the area highlighted in purple where you can find links to the discussion area, tutorials, video tutorials, and more samples. Lastly, the Code area has links to the source code for Dynamo itself, as well as a link to submit bugs.

  • Click New

When the Dynamo editor is displayed look around the interface as we learn how it works.

menubar

Across the top of the editor screen, you’ll find the menu bar. In the menu bar as in most applications, you’ll find following menu items: File, Edit, View, Packages, Settings, Help.

  • File Menu – This pulldown contains the standard input and output tools like New, Open, Save and Saveas. There is also an option to import a Library, Export your workspace as an image, Export dynamo geometry as an STL file, a recent files list, and an option to exit the program.

Filemenu

  • Edit Menu – , an edit pull down containing the expected undo, redo, and copy/paste tools, You can create notes to accompany your graph nodes, an option to bundle up a selection of nodes into a custom Node, Select all, delete, Align Selection to organize your nodes horizontally and vertically, and an automatic option to cleanup the node layout (might result in criss crossed lines)

EditMenu

  • View Menu – this area contains navigation tools for zooming, panning, options to change the node connector types and visibility, as well as visibility options for Revit geometry and dynamo geometry toggles.

ViewMenu

  • Packages Menu – this pulldown allows you to search for packages others users have uploaded, manage the packages and versions you’ve downloaded, and publish your own creations in the form of nodes, packages, and workspaces.

Packages

  • The Settings Menu – contains feedback settings for the Dynamo team to assist them in improving this great tool, precision settings for length, area, volume, and numeric input and display as well as Rendering precision. Click the about option under help to see the type of data and identification that is sent back to the Dynamo team.

Settingsmenu

  • The Help Menu – This contains links to the wiki, project website, the source folder for the examples, the start page, bug reporting, and links that open the learning samples directly

helpmenu

  • Directly below the menu bar is a Quick Access Options Area containing new, open, save, undo, and redo options on the left and an update notification cloud and snapshot tool on the right. Notice the green cloud indicating an available update to Dynamo is now available, you can click the cloud to install the update.

quickaccessoptions_qao

  • Along the left side of the screen below the menu bar and Quick Access Options area is a search tool and the list of node categories or packages that are installed.

library

  • At the bottom left of the Dynamo window, you’ll find the application Run options, allowing you to Run Dynamo automatically as connections and nodes are added if you choose. A manual Run option is available as well.

autorun

  • At the bottom right of the graph window, you’ll find toggles to switch between adjusting the display of the nodes and/or 3D geometry inside Dynamo. You can also use CTRL+G to switch back and forth

graph3d_toggle

  • In the upper right corner of the Dynamo graph window are a few final tools. The triple row icon below the camera icon, allows you to switch between the graphs currently open in the editor. Directly below that are three zoom controls: zoom centered (fit to screen), zoom in, zoom out. The zoom centered option will perform a zoom extents if no nodes are selected, if a node is pre-selected, that node will be centered and a slight zoom will be performed. Below the zoom tools is the pan tool.

ViewControl

  • The final menu/interface element is the right click menu which changes based on your context and if an object is selected. When no nodes are selected, the right click menu offers options to Align nodes, create new nodes, toggle the geometry/node visibility, pan and fit to screen.

noselection_menu

  • When a system or built in node is selected the right click options include Delete, preview, preview upstream, show labels (never seen this enabled), rename node, and a help function that will display the node type, description, category, inputs and outputs available for that node.

default_custom_node

  • When a custom node is selected an additional group of right click options are displayed allowing you enter the custom node, change the node properties, or publish the custom node. If you continue right clicking on the nested nodes, you can get to the Python script editor where the real power is!

pythoneditor

That’s it for this post, in the next installment, we’ll create our script and run it through its paces.

Dynamo Barrel Vault Brace 04

Today, we’ll make one more adaptive component family.  We’ll do this one by opening the central model and isolating the Barrel Vault Trusses…actually, we’ll isolate two of them since they are identical throughout the length of the space and our aim is to use dynamo to generate the braces used to stiffen the roof truss system.

If you are just joining this series, take a moment to view the previous 3 posts:

If you didn’t do the homework from the last session, you can download the family created here:

4 Point AC Brace

Create the AC Family for Brace Placement:

  • Open the Central model and activate a 3D isometric view
  • Use the temporary isolate to isolate two  of the barrell vault trusses adjacent to each other

IsolatedTruss

  • Export the geometry to DWG format

Export

  • Keep the temporary mode active during the export

temporary

The above steps are useful to reuse Revit geometry from a project context when you intend to model a component in the family editor.  I’ve done the export for you, you’ll find the 3D cad file at this link.

3D CAD Truss

  • New Family – Generic Model Adaptive

NewFamily

  • Click the insert ribbon and choose import cad formats dwg and locate the halltec_main_truss drawing that you just downloaded.

ImportCAD

  • Bring it in using Origin to Origin
  • Toggle off the “Do Not Select Pinned Objects” control

SelectionPin

  • Select the Cad import and move it to the origin of the family.
  • Choose the snap point as the inside face of the truss and align with the Center Front/Back reference plane in your family.

movetoorigin

  • Pin the dwg file
  • Click the Center Front/Back reference plane, hold the CTRL key down while you drag a copy to align with the other inside face of the adjacent truss in a top down or plan view.

CopyRefPlane

  • Reselect the Center Front/Back Ref Plane to activate it as a work plane

Activate WorkPlane

  • Switch to the front elevation view
  • Add Reference planes as snap intersections for the splines you will draw

RefPlanesPickPoints

  • Click the Spline through points tool and draw a 3 pt spline using the intersection and midpoint snaps along the top chord of the truss while the Center Front/Back reference plane is the active workplane

SplineTrace

  • Repeat the sketch process for the bottom chord while the Center Front/Back reference plane is the active work plane.

drawchordsketch

  • Switch to the 3D view and window select the two splines and associated points.
  • Use the filter tool to eliminate any other elements you might select using the window method.

rcp

  • Once the splines and points are selected, copy them using the end points of the ref planes in a top down 3D view.
  • Your family should look similar to the image below.

chords complete

  • Open your 4 Point AC Brace family and load it into this placement family.
  • Save your family as Adaptive Component Placement.rfa

 

We’re finally ready for Dynamo. That’s all for this post. See you next time as we begin to create the Dynamo graph.

Dynamo Barrel Vault Brace 03

Dynamo Barrel Vault Brace 03

Welcome back, today’s post will complete the Barrel Vault Brace family.  If you’re just finding this post today, look at the previous posts to start at the beginning. If you’ve been following along and doing your homework, you should be ready to begin. The best way to learn is to do the work yourself, but if you ran into problems or just haven’t had the time, you can download the catchup file here.

Now that we’ve created the top and bottom chords, its time to add the diagonal bracing members. You did flex the family right? It’s important at each step, to be sure the pipe radius behaves and moves with the adaptive points. If you haven’t flexed it, please do. Did your pipes remain consistent from end to end? If you got a bulge anywhere in the pipe, you must not have constrained the profile shape to the ends. If your family is good, then its time to work on the diagonal bracing. Let’s make it easy on ourselves, select the two diagonal reference lines and isolate them temporarily.

IsolateLet’s get started!

  • Click the component tool and use the type selector to set the family and type to Circle_Profile_AC:BraceRadius
  • Hover over the adaptive point at the bottom left of the brace, tab until the end point option is selected and the working plane is perpendicular to diagonal reference line.

diagonalEnd

  • Place the BraceRadius and while still selected, Add a family type parameter labeled BraceRadius and associate it to the BraceRadius radius parameter.

DiagonalParameter

Repeat this process at the other end of the diagonal reference line.

  • Change the value of the BraceRadius parameter in each type and flex it. Do the profile family circles get larger? Good.

endptandorientation FlexDiag

  • Create the form element by selecting the reference line and the two profile family insertions. Click Create form.
  • Now flex the resulting geometry. Does the brace form element behave? Good, add the remaining diagonal elements by repeating steps 3 ,4, & 5. Flex the family. Do both diagonal elements flex properly?
  • Click your temporary visibility tool (sunglasses) and Reset temporary hide/isolate visibility. Select each of your adaptive points and move them using the ucs gizmo. Do the form elements follow and flex properly?

FlexDiag2

  • Add a material property and assign it to diagonal brace form element.
  • Repeat this process for the other diagonal vector.
  • Flex your family again and ensure it behaves. Did you add different materials to your test types?

Final_Brace

Does your family look like the above image?  We’re almost ready for Dynamo.  See you next post, when we’ll create our insertion adaptive family and begin working in Dynamo.

Update to Chainlink Fence (Railing)

Update to Chainlink Fence (Railing)

I’ve updated the Chainlink as Railing example to utilize the latest railing styles and modified the construction to allow for displaying in a site view with x’s as the post.  I’ve also added a material that renders as chain link.  So now you get the easy creation method of the rail object, with surface patterns, render material, and you can control visibility in your site view to show as a traditional linework.  Since its a railing, it will also allow curves.Here is a site view of the “fence” in action:

Here is an elevation view in realistic mode:

Here is an elevation “hidden line” view showing the surface pattern:

Here is a rendered view:

Here is how it is constructed.

Continuous Chain Link Fence_2014