Friday, 27 March 2015

Moves with Nearby Element - Non-Hosted Revit Families

Following on from my previous post about 'Moves with Nearby Element' in Revit, here is another use case for this under-appreciated feature:

Plumbing Fittings: Use 'Moves with Nearby Element' Instead of Wall-Hosting

The logical Revit methodology for placing plumbing fittings is to make them "wall-hosted" - and that is how most of the Autodesk supplied libraries are set up.  The obvious reason for doing this is the fact that wall-mounted basins, WCs, urinals etc need to be attached to a wall - and when that wall moves, so should they.
However, many long-time Revit users and BIM managers are trying to avoid using wall-hosted families for a number of reasons:
  • Wall-hosted plumbing fittings will be deleted if the host wall is deleted - seems logical, but how many times has this happened unintentionally?  It is especially easy to do when the fitting is off screen on a very long (or high) wall.  The plumbing fittings may have all kinds of data and annotation attached so it is no joke replacing them.
  • If the wall and fittings are part of groups, you will almost certainly run into trouble sooner or later.  Someone will inevitably put the fitting in a group, but not the host (or vice-versa);  worse still, they could be included in different groups.  Either way, a hosted object and its parent not in the same group becomes very hard to manage, and you will most likely end up with conflicts of group ownership or ghosted plumbing fittings (excluded from an instance of the group) - a very messy situation that only expert Revit users can resolve.
  • Non-hosted plumbing fittings can be used in varied situations like in vanity units without needing to have two versions (non hosted & wall-hosted), or nested families
There are a number of ways that people avoid these issues:

Face-Hosted
One technique is to create "face-hosted" components, which do not get deleted when their host is deleted.  I am not so keen on this option for a few reasons:
  • 'Always vertical' is not an option with face-hosted families, so they may become hosted directly to floors instead of walls, in the wrong plane.  
  • They also need to be modelled in the 'wrong' orientation, which is counter-intuitive
  • The plumbing fittings can end up above the view range cut-plane, if you don't adjust the height first (there are clever ways to avoid this with non-hosted)
  • The extra placement options can cause confusion 
Face-hosted placement options
Non-Hosted
My preferred technique is to use non-hosted plumbing fittings, in combination with 'Moves with Nearby Element'

Advantages:
  • Components are not deleted when wall is deleted
  • No issues with missing hosts in groups, automatically excluded members, or group edit ownership clashes
Disadvantages:
  • Components will not rotate with the wall when the nearby wall is rotated
  • User needs to remember to tick the checkbox (either during or after placement)
 
  • Angled placement is not so simple - user needs to force component rotation (using the space bar):
Angled placement
  • Hover the cursor over the wall edge
  • Press the space bar while wall edge is highlighted - component rotates to match wall
  • It even works on curved walls

Work Plane-Based
Some people like to make their (non-wall-hosted) plumbing fittings 'Work plane based', so that they can avoid issues with them getting 'stuck' to floors that Revit automatically hosts them to - an issue that occasionally shows up when components are grouped and copied to other levels - but that is a bug, which should not happen.


Unfortunately work plane-based families do not allow 'Moves with Nearby Element' so you cannot combine the two techniques.

Sunday, 22 March 2015

Revit Moves With Nearby Elements Command

I was recently looking at ways to streamline the production of Area Plans in Revit - in particular how to keep them up to date as the model changes.  I found some interesting behaviour when using Revit's 'Moves With Nearby Elements' command - a very under-used capability.

Many Revit experts do not like to use this command because the end results can be very unpredictable.  I figured it might be worth trying to make it more predictable by documenting its behaviour.  But first, an analysis of why you might use this command instead of other methods of locking things in Revit - in particular Area Boundary Lines locked to walls:

Locking Area Boundary Lines in Revit

  • When you first create an area plan, it asks if you want to 'Automatically create area boundary lines associated with all external walls?'  - I always say NO to this because it almost certainly won't end up with what I want.
  • Then when you start placing Area Boundary Lines, it assumes that you want to 'Apply Area Rules' - presumably these are USA based area measurement rules?  It has a checkbox in the options toolbar that is always ticked.  This drives me nuts as I always have to untick it, as I do NOT want my area lines locked to the centreline of walls

  • I would normally use the 'Pick Lines' tool, so I can pick wall edges.  At this stage you have the option to lock the lines to the wall edges so they will move when the walls move (in the Option Toolbar).  Conventional Revit wisdom says that for Area Boundaries, you should not tick this box because you would end up with way too many explicit constraints in the model - any changes to the model have to check the explicit constraints, and if you have too many your model gets bogged down.  In addition, any changes to the model that conflict with explicit constraints will evoke warning messages, and may even prevent you making the changes [the worst example of this is when sketch lines inside a floor or ceiling are locked to walls and impossible geometry stops you in your tracks].
  • Using the 'Align Tool' and then locking Area Boundary lines to walls would have similar issues - way too many constraints, potentially hundreds for each area plan.  Such locks should be reserved for a few very important constraints.
  • 'Moves With Nearby Elements' is an implicit kind of locking - the relationship is controlled by a set of (somewhat mysterious) system rules, rather than a user defined relationship.  However, the rules are not as simple as "moves with nearest appropriate wall" - it does depend on the order of placement or moving of elements, and also the timing of setting the 'Moves With Nearby Elements' property, so Revit must be storing some kind of information about "when" the implicit relationships came into being [it would be great if someone from the 'Factory' could comment].  I will try to explain this later.
My current workflow for Area Boundaries is to place the lines using the pick line tool, but not set up any locks.  Then there is always a checking/updating process to be performed before printing drawings or exporting area schedules - a lot of aligning boundary lines to walls needs to take place.  Not ideal, but common practise.

But why not use the 'Moves With Nearby Elements' method?  It could take care of the majority of updates without bogging down the model - making the checking process much faster.  If you use this method, you need to understand the rules and bugs.


When to use 'Moves With Nearby Elements'

Firstly, this functionality is wrongly named - it should be 'Moves With Nearby Walls', as that is what it does, and the Revit help file states:
"Use the Moves with Nearby Elements option to specify that lines and components near a wall move a corresponding distance whenever that wall is moved"

It is only available for certain Revit elements: 
Revit help rather unhelpfully states that:
"Only straight lines that are parallel to a wall are affected by this option. It is not available for detail lines, sketch-based elements, and families"  -
  • what is the difference between components and families in this context?
  • In fact it does work for parallel arcs (not just straight lines), as described in the next line of the help notes.


It does work for:
  • some external families (components) - non-hosted only (but not all categories)
  • model lines, 
  • Room separation lines, 
  • Area boundaries,
It does not work for:
  • Hosted external families (face-hosted, floor, wall or ceiling hosted etc)
  • Work plane based external families
  • Columns and structural column families
  • Adaptive components
  • System families (walls, stairs, railings etc)
  • Sketch lines within system families
  • In-Place families (even if they contain a reference plane), despite the fact that the properties palette has the check-box available (but option toolbar does not) 
  • Detail components or lines
  • Annotation of any kind (symbols, tags,  regions etc)

How to use 'Moves With Nearby Elements'


When placing an eligible component or lines, the properties palette will have a checkbox for 'Moves With Nearby Elements' - so you can set it before placing elements.


You can also select an element(s) and apply the setting by ticking the same checkbox in the properties palette after the element has been placed.

In addition to this there is a checkbox that appears on the options toolbar when you select an element that is eligible for this setting.  In theory it makes no difference which checkbox you tick, it should apply the rules to the selected element(s).  In reality there are some bugs to watch out for (see below).

To see what actually happens when you apply this setting, as well as my take on the rules that they follow refer to my post on The Rules

Bugs in 'Moves With Nearby Elements'

There are three bugs in the software that I know of - each making this feature seem even more unpredictable in its operation:

Bug 1
In Revit 2013 and earlier, if you selected already placed elements and applied the setting using the checkbox in the properties palette (dialog box), then the setting just plain did not work.  If you ticked the checkbox in the options toolbar, it did work.  once applied there is no way of telling which checkbox was used.   I reported this bug to Autodesk a few years back, and I notice that this has been fixed for most element types in v2014 and later.

Bug 2
I just discovered that in Revit 2015, the bug described above had still not been fixed for Area Boundary lines and Model Lines.  I have reported this but it is not likely to be fixed for a while yet.  The rule here is that you should either tick the checkbox before placing the Area Boundary lines, or else use only the options toolbar for selected area boundary lines.

Bug 3
Not sure if this is a bug or just a UI inconsistency - In-Place families have the checkbox only in the properties palette, not on the Options toolbar.  Regardless of whether it is supposed to be there or not, the setting does not work.

For more information on this feature refer to other posts:
- Non-Hosted external Families
- Moves with Nearby Elements - The Rules

Sunday, 8 March 2015

Copying Views Between Revit Projects

I figured out how to copy perspective views between Revit projects a few years back.  I see that this topic has been addressed in various blogs and forum posts, but maybe not comprehensively, so I reckon its worth putting it all in one place for reference.

There are several methods to copy views, depending on what view type and where you are in the project browser.
  • Copying a view between projects is quite different from using the 'Duplicate' command because that command only works within a project.
  • Selecting a view in the project browser does not generally allow you to copy it - the copy icon is not available, nor is there a 'Copy' option when you right-click on a view name (Drafting views and schedules are the exception).
  • Copying views between projects does not usually copy associated annotation objects, with the exception of drafting views.  Annotation has to be selected and copied separately after the view is copied.
  • None of the following methods will work between different Revit sessions - however, I see no reason why anyone should open more than one Revit session anyway.

Copying Drafting Views & Schedules

Drafting and schedule views can be copied from one project to another by two methods:
Method A - Copy & Paste
  • Select a drafting view or schedule in the project browser
  • Right-click and choose 'Copy to Clipboard'
 
  • Go to the other project
  • 'Paste' from Clipboard

  • Regardless of where the focus is (Project Browser or canvas), it will paste the view into the other project

Method B
You only need to open the project to be copied into, and use the 'Insert from File' command
  • Then select the project that you want to copy views from - it will list allowable view types, and even preview them.
  • It will also allow you to copy sheets that have only drafting or schedule views on those sheets.
  • As soon as sheets have other view types on them (including legends), it will not even list them in the Insert Views dialog box
 Method C
  • If a drafting view that you have copied by method A or B contains callouts to other drafting views, they will be copied across into your project, even if they are not on the sheet (in the case of inserted sheets) - and the callouts will link correctly.  
  • NB. this does not occur when drafting view callouts are contained on other views types that are copied (sections, detail or plan views etc).
  • If you try to copy a plan or section by selecting its view crop boundary, you can also select a drafting view callout on that view - it will also be copied to clipboard.  However, when you paste the view, it will bring along the callout but disassociate it from the drafting view (which it does not copy across).

Copying 3D Views (isometric or perspective)

Copy Method 1.
If you have a 3D view open, you can select the view crop boundary, then right-click and copy or else use the copy to clipboard icon from the ribbon.
 
Copy Method 2.
If you have another view open, you can find the view name (to be copied) in the project browser, then right-click on it and select 'Show Camera'
It will show the camera definition of the selected 3D view (be it isometric or perspective)
 
Then you can copy to clipboard

Paste Method 1
If you are in a plan view in another project, all you need to do is 'Paste Aligned to Current View' and the identical 3D view definition will be created in the same location.
Paste Method 2
  • If you are in a 3D view in another project, when you try to paste the 3D view it will not give you the option to paste to the current location.  
  • You have to paste to a Selected level (choose the appropriate one);  
  • if you try to 'Paste from Clipboard' you will not be able to get the view into exactly the same location as it was in the first project - so that is not recommended.

Copying Plan Views

You can use the same method (1) for copying plan views between projects:
  1. Select the view crop boundary of the plan view, 
  2. copy to clipboard
  3. Go to the other project
  4. Paste - Aligned to Current View or to Selected Level
  • If you paste to Current View, it will create a new plan view associated to the same level as the current view;  if the original associated level name exists in the new project it may be named 'Temp.Level 1' regardless of the associated level or the original name;  if you paste again, it will create a new plan view named 'Temp.Level 2' 
  • If you paste to Selected Level, it will create a new view associated to that level - again named 'Temp.Level 1' (or the next number in sequence), not the actual level number.
  • It will not copy associated annotation from the original view, unless you select those at the same time as the view crop boundary
  • It will copy most view properties of the original view, but not an associated View Template, even if that same view template exists in both projects.

Copying Section Views

You can copy a section view easily by selecting the section marker in plan (or the section view crop boundary in the section view itself)
  • When you paste the section into another project you need to remember to go to the same level it was copied from before pasting to Current View (or Selected Level) otherwise the heights will be different.
  • Section view properties will be copied, with the exception of assigned view templates.

Copying Elevation Views

You can copy an elevation view either by selecting the elevation marker or the individual elevation itself;  if you copy the whole marker it will include associated elevation views
 

Copying Area Plan Views

You can copy Area Plans by selecting their view crop boundary.
  • When you paste them, they may retain the view name - if the associated level from the view in the original project does not exist in the new project; otherwise it will rename to a temp view name.
  • You can paste them to multiple selected levels, in which case the views are renamed with a number suffix, which do not relate to the levels that they become associated with - so you need to rename them

Copying Detail Views & Callouts

  • You can select a callout from a plan, section or elevation view, then Copy to Clipboard
  • Alternatively you can select the view crop boundary and right-click to copy it
  • You can then go to the recipient project and paste Aligned to Current View or to Selected Views or Same Place (but not to Selected Levels)

  • The detail view will be created and a callout placed on the view that you selected;  if a detail view of that name already exists it will rename the new one with the next number suffix.

Copying Legend Views

I have not found a way to copy legend views between projects - legend views do not allow view crop boundaries.  So, what you need to do is to create a new legend view in the project, then copy and paste all the annotation objects from the original legend view in the other project.

Make sure that your new legend view is the same scale as the original, otherwise text and symbol size will appear to change.

Copying View Templates

View templates have to be copied by a totally different method:
  • Open both the projects that you want to copy from (donor) and to (recipient)
  • In the recipient project, go to 'Manage' 'Transfer Project Standards'
  • Click on 'Check None' to deselect all items in the list
  • Select View Templates
  • Click OK to proceed - it will copy all view templates from the donor project into your active project - you have no choice in the matter.
  • NB. If you want to copy only a few view templates, you could create a new intermediate project;  import all view templates into that; remove the ones you don't want from the intermediate project; then transfer the remaining ones from the intermediate project into the recipient project.
  • When you copy views from one project to another, it copies most view properties, but not assigned view templates.  In that situation, you would need to transfer the view templates separately (as described above), then manually reassign to each copied view.

More on Copying Sheets and Views

Refer to this link to find out how to copy sheets between projects
Also Copying contents of 3D views between Projects
and  Duplicating Views with Linework Overrides (within projects)

Please add a comment if you know more or better ways to copy views between projects.