public void QueryBuildingSceneLayer()
{
var bldgLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<BuildingSceneLayer>().First();
var disciplines = new Dictionary<string, BuildingDisciplineSceneLayer>();
//A Building layer has two children - Overview and FullModel
//Overview is a FeatureSceneLayer
//Full Model is a BuildingDisciplineSceneLayer that contains the disciplines
var fullModel = bldgLayer.FindLayers("Full Model").First()
as BuildingDisciplineSceneLayer;
CollectDisciplineLayers(fullModel, disciplines);
}
internal void CollectDisciplineLayers(BuildingDisciplineSceneLayer disciplineLayer,
Dictionary<string, BuildingDisciplineSceneLayer> disciplines)
{
//collect information on the disciplines
var name = disciplineLayer.Name;
//At 2.x - var layerType =
// ((ISceneLayerInfo)disciplineLayer).SceneServiceLayerType.ToString();
var discipline = disciplineLayer.GetDiscipline();
//etc
//TODO - use collected information
disciplines.Add(discipline, disciplineLayer);
//Discipline layers are composite layers too
foreach (var childDiscipline in disciplineLayer.Layers
.OfType<BuildingDisciplineSceneLayer>())
{
//Discipline layers can also contain FeatureSceneLayers that render the
//individual full model contents
var content_names = string.Join(", ", childDiscipline.Layers
.OfType<FeatureSceneLayer>().Select(fl => fl.Name));
CollectDisciplineLayers(childDiscipline, disciplines);
}
}