top of page

Phase Filters issues in Linked Models

Updated: Oct 10, 2020

The majority of companies, when they create a Revit template, start from one of the out of the box templates that come with Revit and make modifications to enhance it. They may go through and fix lineweights, add/modify object styles and add other content that they think they will need within their template. The one thing that they typically don't change is the phase filters. Below is what is found in a standard Revit Template.



There are a small percentage of companies that do change their phase filter, not the setting for what is graphically showing but the names for the Filters. Below is an example of something I have seen. Internal to their company this works fine and they do not experience any issues, but anyone outside their company will experience issues.

That difference of naming introduces a lot of graphic issues when dealing with linked models and phasing. If the active model and the linked model have the same name for phase filters, the phase filter for a visibility graphics/view template can control the visual settings for both models. Otherwise, no matter what visibility graphic you apply for the view in your model, the linked model will display demolition, new work and existing at the same time with no overrides.


To give you an idea of what I am talking about, the image below is an example of the graphic issues that we see. The image to the left is from the named based on a company's unique filter naming standard and is set to Show All. The image to the right is the out uses the out of the box versions of phase filters and is actually set to Show Previous + Demo. The new work did not disappear and the demo graphics did not get applied. It is a little hard to tell from the screen shot but the lineweights for all three are the same.



One method that we tried to get around the associated graphic issues was to have our consultant create linked views. I am not a fan of linked views unless I am in control of the visual settings and even then I don't find that I can make everyone happy. We had the consultant create linked views for Demo and New Work with the following rules;

  1. Turn off all annotations.

  2. Turn off all Detail Items.

  3. Turn off Cut patterns for walls.

  4. Turn off surface patterns for Floors

  5. If there was more than one linked model, they had to be linked into one another an set to attached so that 1 view controlled the visibility for both.


What was found is since we were not in control of the linked views, it was impossible to rely on the linked views without intervention when we received updates. We did this for a while as I continued looking for better alternatives.


I tried other methods like using transfer project standards to add the phase filters from our model to their model. This was a hit or miss option that seems to not work as the list of phase filters got longer in the model.


I ultimately found something that was cleaner and easier to do. If our problem was that the 2 models do not have the same phase filter names. So I wrote an application macro that would purge out all the existing phase filters and add the phase filters we needed as part of our updating the model links.


public void CreatePhasefilter(Document doc, string filtername, 
PhaseStatusPresentation newp, PhaseStatusPresentation exstp,						  PhaseStatusPresentation demop,PhaseStatusPresentation tempp)
{
PhaseFilter pf = PhaseFilter.Create(doc,filtername);
pf.SetPhaseStatusPresentation(ElementOnPhaseStatus.New, newp);
pf.SetPhaseStatusPresentation(ElementOnPhaseStatus.Demolished, demop);
pf.SetPhaseStatusPresentation(ElementOnPhaseStatus.Existing, exstp);
pf.SetPhaseStatusPresentation(ElementOnPhaseStatus.Temporary, tempp);
}
public void resetphasefilters()
{ 
UIDocument uidoc = this.ActiveUIDocument;
Document doc = uidoc.Document;
	
List<PhaseFilter> phasefilters = new FilteredElementCollector(doc).OfClass(typeof(PhaseFilter))
.Cast<PhaseFilter>().ToList();
using(Transaction t = new Transaction(doc,"Reset "))
{
t.Start();
foreach(PhaseFilter pf in phasefilters)
{
if(pf.Name!="Show All"||pf.Name!="Show Complete")
{
doc.Delete(pf.Id);
			
}
}
CreatePhasefilter(doc,"Show Demo + New", 						PhaseStatusPresentation.ShowByCategory,							PhaseStatusPresentation.DontShow,		PhaseStatusPresentation.ShowOverriden,							PhaseStatusPresentation.ShowOverriden
);

CreatePhasefilter(doc,"Show New",		PhaseStatusPresentation.ShowByCategory,
PhaseStatusPresentation.DontShow,
PhaseStatusPresentation.DontShow,
PhaseStatusPresentation.DontShow
);

CreatePhasefilter(doc,"Show Previous + Demo",
PhaseStatusPresentation.DontShow,
PhaseStatusPresentation.ShowOverriden,	PhaseStatusPresentation.ShowOverriden,	PhaseStatusPresentation.DontShow				                  
);

CreatePhasefilter(doc,"Show Previous + New",
PhaseStatusPresentation.ShowByCategory,
PhaseStatusPresentation.ShowOverriden,
PhaseStatusPresentation.DontShow,
PhaseStatusPresentation.DontShow				                  
);
		
CreatePhasefilter(doc,"Show Previous Phase",
PhaseStatusPresentation.DontShow,
PhaseStatusPresentation.ShowOverriden,
PhaseStatusPresentation.DontShow,
PhaseStatusPresentation.DontShow
);
		
t.Commit();
}
}

This now aligns the consultants model with ours, we have to Repeat this every time they send us a model.


546 views0 comments

Recent Posts

See All
bottom of page