Get your technology fix here. Stay tuned for general tech trends, news, and articles. Work with Autodesk products? I do too! I like to write VBA, lisp and create a lot of custom tools for general consumption too. You'll find all that here and more!
Working on some tools to assist the design teams in managing parking spaces. The attached graph contains two tools. The first tool renumbers parking spaces based on a model based spline drawn through the spaces. Refer to the image below for more info.
The instructions to renumber the parking spaces are shown in the blue area in the image and listed below this paragraph. Use the control toggle boolean node to run one graph at a time by setting its value to true and the other node to false.
To renumber existing parking tags based on spline
1.) Draw a model line using the spline tool. If your sketch contains multiple sharp curves, you may need to increase the “Integer Slider” amount to ensure the routine gets all the parking stalls. 400 is a good starting number.
2.) Start in lowest number parking spot, continue spline through parking spots in order ending the spline in the spot you wish to have the highest number.
3.) Use Select Spline (Model line) “Change” button to select the model spline in your project.
4.) Enter desired starting number for in Starting number node.
5.) Enter desired increment amount
Click Run when Ready
The second tool addresses parking spaces on ramps. It requires a custom parameter named SCHEDULE LEVEL. Use the second tool to write data to the parameter. You can use this to filter your parking schedule.
The instructions to update the parameter are shown in the blue area in the image below and are listed below this paragraph.
To Assign Schedule Level
To differentiate between level based parking and ramp associated parking, perform the following steps:
1.) Click Select model elements and window the parking elements that are to be associated with the ramp.
2.) Click True to run this operation or False to run a different operation.
If your in the North Atlanta area and you’re looking for a car, I highly recommend Friendly Auto Gallery. It’s always nice to find an exceptional business, especially close to home. The staff at Friendly Auto Gallery made the process quick and pressure free. I don’t normally make recommendations for businesses on my blog, but I’ll make an exception for Friendly Auto Gallery. They were outstanding!
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.
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.
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.
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:
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.
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.
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:
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.
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.
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.
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
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.
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.
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:
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:
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.
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:
I received a request to assist an architect in fixing their model yesterday. They were attempting to adjust a level elevation, but found other objects were also moving. The request went something like this:
Level locked to alternate floors needs to be moved but others move with but are called out as different levels and are correct.
Based on the description above, I suspected there were multiple competing layers at the same elevation and objects were hosted on the wrong or undesired level. A quick check on a column confirmed my suspicions. As shown in the image below, there are multiple levels with similar names like “03 Level” and “Level 03”, “02 Level – 1004’” and “Level 02”.
I reviewed the existing elevation and section views and couldn’t find the offending levels, so I created a quick new section to help solve that issue.
Once the new section was created and activated, I uncropped the view and zoomed extents to find the missing elevation elements.
The original problem statement indicated that elements were moving unexpectedly, so I flexed the Level Datums to get a visual indicator of the objects that might be bound together.
Since I can’t simply delete the levels I think I don’t need, for fear of losing elements hosted to the level, I must find a way to select or determine what elements belong to a level I might wish to delete.
Note: If you were unaware, Revit does not notify you when it deletes elements hosted to a level.
Let’s launch Dynamo and see if it can assist us. For this functionality, I can create a quick dynamo graph and use it to identify whether a level has any host elements on it.
Dynamo (V 1.2.0) Recipe:
Nodes: Levels, All Elements at Level, SelectInRevit, Watch
Connect them up as follows:
Levels, to All Elements at Level, to SelectInRevit, to Watch.
If you need to move elements to a different level, switch back to the Revit drawing window after running the graph and use the following key sequence to reselect the items selected by the dynamo graph.
Then you can change their constraints and parameters to move them off the level. When you run a graph and it comes up with no elements on the level, it is an easy task to delete the level.
If you feel ambitious, you can format the graph to be shared, so others can read and utilize the graph more easily.
The graph above is the recipe with the same nodes, but the graph is formatted using the Dynamo Graphic Standard created by Vladimir Ondejcik of White Arkitekter AB
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.
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.
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.
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.
View his Lumion3D rendering and panorama model for the TSA Technology Day Architectural Design Competition.
This time of year requires a large number of upgrades. I recently wrote about upgrading the Revit library and templates, but there are many file types in the design ecosphere. Today we focus on upgrading application level macros inside Revit. Visit Wakefield Beasley’s blog here to read my latest blog post on upgrading Revit application macros.
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”.
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.
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.
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:
To create the file list for your families upgrade, double click on the “Upgrade_RFA.bat” file inside your “~PROCESSING” folder.
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.
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.
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.
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.
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.
Highlight and select the filename and extension (.rfa) as shown in the image below. Copy this file name to your clipboard.
Close the text file and open the famlist_rfa.txt file in your ~PROCESSING folder using notepad.
Place your cursor at the very beginning of the file, click the edit menu and choose find.
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.
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.
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.
Double click the XDelete_RFA.bat file to perform final cleanup operations in your processing folder.
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.