Element GetViewport( ViewSheet sheet, View view )
{
Document doc = sheet.Document;
// filter for view name:
BuiltInParameter bip
= BuiltInParameter.VIEW_NAME;
ParameterValueProvider provider
= new ParameterValueProvider(
new ElementId( bip ) );
FilterStringRuleEvaluator evaluator
= new FilterStringEquals();
FilterRule rule = new FilterStringRule(
provider, evaluator, view.Name, true );
ElementParameterFilter name_filter
= new ElementParameterFilter( rule );
BuiltInCategory bic
= BuiltInCategory.OST_Viewports;
// retrieve the specific named viewport:
//Element viewport
// = new FilteredElementCollector( doc )
// .OfCategory( bic )
// .WherePasses( name_filter )
// .FirstElement();
//return viewport;
// unfortunately, there are not just one,
// but two candidate elements. apparently,
// we can distibuish them using the
// owner view id property:
List<Element> viewports
= new List<Element>(
new FilteredElementCollector( doc )
.OfCategory( bic )
.WherePasses( name_filter )
.ToElements() );
Debug.Assert( viewports[0].OwnerViewId.Equals( ElementId.InvalidElementId ),
"expected the first viewport to have an invalid owner view id" );
Debug.Assert( !viewports[1].OwnerViewId.Equals( ElementId.InvalidElementId ),
"expected the second viewport to have a valid owner view id" );
int i = 1;
return viewports[i];
}