ArcGIS.Desktop.Mapping.Events.MapMemberPropertiesChangedEvent.Subscribe((args) => { var voxel = args.MapMembers.OfType<VoxelLayer>().FirstOrDefault(); if (voxel == null) return; //Anything changed on a voxel layer? //At 2.x - if (args.EventHints.Any(hint => hint == MapMemberEventHint.VoxelSelectedVariableProfileIndex)) if (args.EventHints.Any(hint => hint == MapMemberEventHint.VoxelSelectedVariable)) { //Voxel variable profile selection changed var changed_variable_name = voxel.SelectedVariableProfile.Variable; //TODO respond to change, use QueuedTask if needed } else if (args.EventHints.Any(hint => hint == MapMemberEventHint.Renderer)) { //This can fire when a renderer becomes ready on a new layer; the selected variable profile //is changed; visualization is changed, etc. var renderer = voxel.SelectedVariableProfile.Renderer; //TODO respond to change, use QueuedTask if needed } }); ArcGIS.Desktop.Mapping.Voxel.Events.VoxelAssetChangedEvent.Subscribe((args) => { //An asset changed on a voxel layer System.Diagnostics.Debug.WriteLine(""); System.Diagnostics.Debug.WriteLine("VoxelAssetChangedEvent"); System.Diagnostics.Debug.WriteLine($" AssetType: {args.AssetType}, ChangeType: {args.ChangeType}"); if (args.ChangeType == VoxelAssetEventArgs.VoxelAssetChangeType.Remove) return; //Get "what"changed - add or update //eg IsoSurface VoxelLayer voxelLayer = null; if (args.AssetType == VoxelAssetEventArgs.VoxelAssetType.Isosurface) { var surface = MapView.Active.GetSelectedIsosurfaces().FirstOrDefault(); //there will only be one selected... if (surface != null) { voxelLayer = surface.Layer; //TODO respond to change, use QueuedTask if needed } } //Repeat for Slices, Sections, LockedSections... //GetSelectedSlices(), GetSelectedSections(), GetSelectedLockedSections(); });
//var voxelLayer = ... ; //Must be on the QueuedTask.Run() var sel_profile = voxelLayer.SelectedVariableProfile; //Get the variable profile name var profile_name = sel_profile.Variable;
//var voxelLayer = ... ; //Must be on the QueuedTask.Run() var profiles = voxelLayer.GetVariableProfiles(); //Select any profile as long as it is not the current selected variable var not_selected = profiles.Where(p => p.Variable != sel_profile.Variable).ToList(); if (not_selected.Count() > 0) { voxelLayer.SetSelectedVariableProfile(not_selected.First()); }
Target Platforms: Windows 11, Windows 10