ACA: Automating workstation counts per squarefoot

We have been successfully using ACA rooms to meet program needs for one of our primary clients. Their requirements are based on a specific square footage formula for determining how many workstations should exist within certain room types.  Recently they added additional room types beyond “Office” that also require workstation counts.  In addition to the increase in room types, they also increased the workstation counts per square foot.  On top of the those requirements, there is always a need in this business to override an automated value based on room geometry or other constraints, so the automation had to be flexible.  The current workflow for overriding the count involved deleting the default room tag and replacing it with an alternate tag containing an attribute. Because I had to revisit the formulas, I took an opportunity to streamline the workflow while adjusting the formulas.  I reduced the workflow for overrides from 12 clicks to 5 and eliminated the alternate room tag in the process.

The original room tag had values being constructed via a formula, in a custom property set definition (psd) field called WS_Count.  It was set up to always display the rooms square foot value by reading the gross area field from the RoomObjects psd.  A relatively simple formula was used to check the space name and when “office” was in the name, the WS_Count value was concatenated to include a workstation count.  The tag looks like this in operation:

As you can see from the image above using the same tag for both spaces results in a workstation count being displayed in office types and just the square footage for other type of rooms.  This is accomplished with some simple statements inside the object based psd.  Note the Space name is standardized and controlled by pulling from a list and is style based.  To create something similar, you could introduce the following function in a psd field.

The logic within the above sequence first checks to see if the list based style name contains the word “office” if it does not, it will skip all the down to the Else statement and simply return a string containing the “GrossArea” automatic property of the room object which is concatenated with a space and the letters “SF”.  If the space type contains the word “office”, then the value of the “GrossArea” automatic property is checked from smallest to largest using a “less than” comparison.  
This tag was working well for this clients projects, but based on the previous mentioned changes, I introduced two new fields into the psd (WS_Override & WS_Detect) to eliminate the non coordinated overrides and to reduce the multi-view block count by 1. Because I wanted the value of the workstation count to always get calculated, I added a simple “less-than” function to calculate the count in the new property field titled: WS_Detect as shown below.

 
This function checks the string value from the property WS_Count to see if “WS” is found, meaning that the room type required a workstation count, and checks the new property WS_Override to see if its value is defaulted to 0 representing no override.  If both prove true, then the square footage is calculated based on the square footage program requirements set by the client using a similar “less-than” approach.  If either value is false then the manual integer based property value of WS_Override is used.
With the two new properties in place, anytime an override is needed because of space geometry, pilasters, or other obstructions that might require a deviation from the program, the designer simply places a positive value in the WS_Override property of the space. With the calculated value being tracked in a separate property, the original WS_Count property formula was modified as follows:

The original space type check was modified using the boolean “Or” to check for “Office” as well as the new space types that also get workstation counts.  If no workstation count is required, then the formula skips to the Else statement and simply presents the Square footage value as before.  If a workstation count is required, then the logic begins to check for a positive value in the WS_Override property.  When a positive value is found, the formula concatenates the square foot value with the workstation count from the WS_Override property.  If no override is in place, the original program based workstation count is used by concatenating the square foot value with the WS_Detect property.

The room tag multiview block was created using the following psd properties within an attributed block as shown below.  This block is used as a display block within the multi view block.

                  Client_SPACESTYLES:Client_DESIGN_TYPE
Client_SPACESTYLES:LENGTH x Client_SPACESTYLES:WIDTH
                     Client_ROOMOBJECTS:WS_COUNT

Note: in the above attributed block definition the middle line contains a simple text object with the letter “x” to allow the length and width size to be displayed.  I set the Length as right justified and the width to be left justified.  The first and third lines are middle center justified.

To give visual feedback to the designer as they are placing the spaces, I added a display theme to color the spaces based on workstation count.  I also added a room based schedule to display the workstation counts and provide a running total.  This schedule is set to automatically add new spaces and to search within blocks so that it is always up to date.  This setup is estimated to save approximately 10 – 15 minutes per project every time the plan is created or changed.  This is projected to save the company more than 80 man hours per year. It also eliminates counting errors and inaccuracies which may be introduced through human error.  The image below shows the original space layout on the left with the new display theme based layout and legend displayed on the right.

An image of the schedule that maintains tracking of Workstation Count is shown below.

The image below shows the settings used for the display theme.

Finally, the formula used in the Workstation Count Schedule is provided for reference.

The above formula checks the psd property WS_Count for the string “WS” indicating a workstation count is being calculated based on the space type.  If the formula doesn’t find the string then the workstation count is set to a value of zero. If it finds the string “WS”, then the value of the property WS_Override is checked. If it is greater than zero, its value is used directly, if not, then the value of WS_Count property is parsed using the split function.  The split is based on a space value and the third element of the resulting array is returned, which is the workstation count.

Let me know if this helps in your work. Here is a tip, you can cut and paste formulas like these shown in this blog post into the editor in ACA, but you’ll need to highlight any values found within square brackets and double click to replace the property set data using the interface. I frequently do this when working with a long formula.  I’ll copy it out of a working example into notepad, add the necessary logic, and then paste back into the formula editor. When you paste it back in, look for any bracketed properties that do not display the dark background.  You’ll need to replace those by highlighting them and then double clicking on the property from the object list below the code area. Use the sample results area as a check.
When the sample results area displays a proper sample value you are ready to use it.  Below you’ll see an example of the property formula editor in both working and non-working order.  Remember if you see the formula in the sample results area, you still have some replacements to make.

Posted in 2014, ACA, Architecture, AutoCAD Architecture, Autodesk, BIM, CAD, Community, VBScript, Workflow | Leave a comment

AutoCAD Layfrz: Nested Entity Selection

I was asked recently how to fix the workstation blocks that were placed in a floor plan drawing.  When I opened the file, I quickly surmised that a short lesson on layfrz would solve the issue.  Using the layfrz command, sometimes requires different settings depending on how the selected entities are created. In this example, a simple “entity” option setting allows for attribute layer freezing within the block.  Watch this video to learn how.

Posted in ACA, Architecture, AutoCAD, AutoCAD Architecture, Autodesk, CAD, tips-n-tricks, Workflow | Leave a comment

ACA: Double Click Schedule Table to Update

Of course you can always set an AutoCAD Architecture Schedule Table to update automatically, but when you choose to leave that property setting set to no, it would be nice to be able to double click the table and have it update, rather than simply show the properties.  Since the updateschedulenow command is not directly available in the cui editor (it didnt appear in searches using schedule, or update keywords), you’ll have to follow these directions to create a double click behavior after creating a custom custom command.  Here are the steps:

  1. Access the CUI editor – Type cui and hit the enter key.
  2. Choose the Main CUI – Use the selector to choose the main cui file
  3. Create a new double click action – Right Click on the Double Click Actions Node and choose Add new double click action
  4. Name it what you want, I named mine Schedules.
  5. Create your new command, by clicking on the star icon as shown in the image below.
  6. You will get the skeleton of a command created automatically as shown in the image below.
  7. Name your command Update Schedule Now – also add a description, the command display name and add the following macro:  ^C^C_ScheduleUpdateNow   You can select the OOTB icon from the selection provided as shown in the image below. It is named RCDATA_SCHEDULE_TABLE_UPDATE
  8. Now drag your new command to the Double Click Action and drop it on top of the node.
  9. Close the CUI editor to complete this task and update your main CUI with the new tool.
Posted in ACA, ADT, Architectural Desktop, AutoCAD Architecture, CAD Management, CUIx, Customization, Double-Click Action | Leave a comment

Revit Gazelle Model

Recently I found myself planning a workout room in the basement of our house.  Rather than spend time moving heavy exercise equipment around, I thought I would create the missing pieces in Revit so I could optimize the layout of the space and provide the visualization of the space necessary.  The only piece I couldn’t seem to locate online was the Gazelle Edge exerciser shown in the image below: 

The image above is what I brought into Revit in combination with size information gleaned from the web which provided enough info to recreate the Edge. Here is a link to the model. 

Remember to check with your doctor before beginning an exercise regimen. 8~)

Posted in BIM, Building Information Modeling, Community, Family, Revit, Revit Architecture | Leave a comment

Revit Build Checker Version 8

Identify Revit Builds Painlessly 

Here is a repost of an old tool recently updated for Revit 2014…

I thought you might be able to use a tool to identify what Revit build is sitting on your pc. If so, continue reading…

  1. Are you a CAD/BIM manager responsible for installing and updating Revit on multiple computers?
  2. How about a quick way to check all the Revit Build Numbers on each computer without actually launching Revit?

Sounds good right? Download the zip file containing a short vbscript routine and run it on each machine that has Revit installed. It will display a web page with all the build information for each Revit product installed. It will look more or less like the image shown below.

Want to capture info from multiple computers?

  1. Search the code for the following string: “c:BTCrevitbuild.log”
  2. Replace it with a path to file somewhere on your network.
  3. Make sure to create the file in the appropriate folder
  4. Every machine that runs the script will now append it’s info to the log file.

Lather, rinse, repeat….

Posted in Autodesk, BIM, CAD Management, Revit, Revit Architecture, Revit MEP, Revit Structure, VBScript | Leave a comment

Flush your Undo – AutoCAD

As I roll out the 2014 versions of Building Design Premium, a designer sent me the following warning message from AutoCAD:

Warning! The undo file length is 1569321556 bytes.  Undo will be automatically disabled at 1750000000 bytes to prevent overflow…

Although I’m not sure what an UNDO Overflow would look like, rather than soil the carpets with all those abandoned and rolled back activities, I decided to investigate further.  I recommended that the designer saveas to ensure no data was lost and then began an investigation.

The solution:

  1. Use Saveas to write the file back to the harddrive or network location in case of a potential fatal error.
  2. Clear out the temp folder – Use %temp% in the file dialog and delete files found.
  3. Flush the Undo register – Type Undo – C – All

For more info refer to this Autodesk technical reference.

Posted in 2014, AutoCAD, AutoCAD Architecture, CAD, Undo | Leave a comment

Edit Groups Containing Floors to Align Surface Patterns in Revit

TIP: You must edit groups containing surface patterns to prevent the whole group moving when using the align tool to align surface patterns. 

Be aware of what aligns when using the align tool to align surface patterns when surface is part of a group.  The align tool does not effectively isolate the surface pattern poche if the element is part of a model group, rather the align tool will actually move the entire group to align instead of the surface pattern of the highlighted element.

Problem:  Designer wished to align two adjacent tile floor patterns in Revit 2012.  Watch as the align tool is used.

  When the second alignment pick is chosen to move the floor pattern in rm 103 in alignment with rm 107, the following occurs.
The result of the alignment tool is that the entire group has been moved rather than the surface pattern that was clearly selected.  Note the tooltip.
But, if you first choose to edit the group, you can pick outside of the group and effectively align the surface patterns as desired.

The final result is what was intended all along. Hope this helps someone out there.



Posted in BIM, Revit Architecture, Revit Structure Architecture MEP Autodesk | Leave a comment

Fixing Revit Topo Sub-Regions

Today, I ran into an issue with sub-regions in Revit topo surfaces and thought I’d share the quick fix with you.  Have you ever created subregions of a topo and at some point realized that you’ve in-advertantly created holes in the topo where you intended to create different material conditions. As shown in the image below, some grassy regions seemed to be displaced.

I found that if I deleted the grassy region by simply selecting the objects below the main topo surface, that I had to re-create new sub regions as it simply returned the “hole anomaly” shown in white on the surface back into the default brown region of the topo.  But if I edited the surrounding sub-region and removed the internal sketchlines, the hole disappeared and my grassy region returned.

 
When I noticed that selecting the surrounding region also selected the misplaced regions (they were highlighted in light blue as shown above), I chose Edit Boundary and tried deleting the internal or duplicated loops as shown in the image below.
The end result was the correct fix as it resulted in restoring my grassy regions to their correct location without having to recreate the outlines.  The corrected sub regions are shown below.
Posted in Revit Architecture | Leave a comment

Auditorium Seating via Rail Object in Revit

While helping a designer with a new chapel project, ran into an issue of how to layout auditorium seating on a sloped radial floor in Revit Architecture 2012.  Things we wanted to accomplish included, easy and controlled layout via straight line segments and via curved arcs.  We also wanted to have a running count of seats via schedule.

My first thought was to curtain walls and use the system panel family to host the chair. This worked fairly well until the seating had to share arm rests.  Although you can host a detail component in the mullion profile family as an option for displaying the arm rest in 2D, it does not allow for nesting 3D Arm rest geometry in the mullion profile family.  Although, for quick plan view layout, seat counts, and ease of creation, this method worked quite well and would work very well in 3D as long as arm rests were not required.

Since this project called for seating with armrests, we resorted to a railing object with nested chairs as baluster panels, and nested arm rests as baluster posts. This allowed us to control the seat size, spacing and placement of armrests along any type of sketch line, curved or straight.  Endpost offsets allowed for control of the arm rest on the ends. Locking the sketchline to grids allowed the designer to change the length or radius as necessary while the chairs simply updated to match.

We ended up with 6 railing types, 3 for floor mounted and 3 for wall mounted chairs. Materials are handled in the nested geometry families and each chair has 3 different parametric sizes (20, 21, 22 O.C.).  based on Series Seating Celebration model.

Generic Model templates were used to create the support posts in two types, wall mounted and floor mounted as shown above.  This gm family was then nested into the Baluster post family and loaded into the project for railing type creation.

Again gm family templates served as the starting point for the seat geometry, which was then nested into the baluster panel family.  Doing both posts and seats as independent geometry in generic model families kept them flexible for future use and allowed for some testing in hosted families. Modeling was kept minimal while matching overall shape and style.  Each family starts as simple 2D geometry for flexibility and efficiency.  Updating 2d graphics and adding refinements in 3D are easy to accomplish as necessary.

As the design progressed, we ran into issues with the railings not hosting to the sloped floors. It is not as simple as editing the railing and picking the floor object as host.  My favorite command, align, was not much help either.  It seems that railing objects host to floors unless the floor is sub-entity modified.  Since many of the floors were sloped in this way or via sweeps, the hosting was accomplished via very thin “ramp” elements which effectively control things vertically while maintaining the horizontal control via grid elements. 

To hide the redundant ramps, we moved the ramps to the “constraints” phase and demolished it in the “hide by demo” phase, both of which precede the “existing phase” and thus don’t appear in new construction views.  This is based on a tip I learned at AU 2011 in an interiors class taught by Steve Brown.
Seat counts are controlled by dividing the railing length by the center line spacing of the seat size within a calculated field in the Chapel Seating Schedule (a railing schedule).  Format was set to integer and the formula in the calculated field was wrapped in the round() function.  Originally, the round down function, new to Revit 2012, was used to force a seat count.  Because the railing seems to default to always round up graphically, I found that the round() function actually matched the graphics to the count more accurately.
Posted in Revit Architecture | Leave a comment

Some Unity3D goodness – Scripts for Adding Lights

Learning to write scripts for assistance in editing/adding geometry within Unity3D is a must for anyone bringing in models from Revit or 3DSMax for Architectural Walkthroughs.  One particular pain point is putting in all the lights or the lights that you wish to cast light within your “game”.  To use these scripts add an Editor folder under the assets folder in your Unity3D project folder.  Once they scripts are copied to this folder, you see new options in the “Game Object” pulldown menu item.  Select some light geometry, for example, some lamp shades in your scene, then click on Game Object – Add pt lights ^n from the menu pulldown.

The results will be a child game object component added to each of your selected geometry objects with the same position as the parent object. Also, because it is a child component, it will move should you reposition the light.

Note: a few objects might require tweaking.

 Here are a couple of scripts:

  1. Add point lights – This script will add a point light with the name “_pointlight” with the same transform position as a selected light geometry within the Unity3D editor.
  2. Add spot lights – This script will add a spot light with the name “_spotlight” with the same transform position as the selected light geometry within the Unity3D editor. 
Note: the light cone is automatically rotated down and is useful for downlighting. 
Posted in Architecture, Game Engines, Revit, Unity3D | Leave a comment