ArcGIS Pro 3.4 API Reference Guide
ArcGIS.Desktop.Mapping Namespace / Layer Class / SetDefinition Method
ArcGIS.Core.CIM.CIMBaseLayer
Example Version

    SetDefinition Method (Layer)
    Updates the layer's CIM definition. This method must be called on the MCT. Use QueuedTask.Run.
    Syntax
    public void SetDefinition( 
       CIMBaseLayer baseLayer
    )

    Parameters

    baseLayer
    ArcGIS.Core.CIM.CIMBaseLayer
    Exceptions
    ExceptionDescription
    This method or property must be called within the lambda passed to QueuedTask.Run.
    Example
    Hide or show editing tools on templates
    QueuedTask.Run(() =>
    {
      //hide all tools except line tool on layer
      var featLayer = MapView.Active.Map.FindLayers("Roads").First();
    
      var editTemplates = featLayer.GetTemplates();
      var newCIMEditingTemplates = new List<CIMEditingTemplate>();
    
      foreach (var et in editTemplates)
      {
        //initialize template by activating default tool
        et.ActivateDefaultToolAsync();
        var cimEditTemplate = et.GetDefinition();
        //get the visible tools on this template
        var allTools = et.ToolIDs.ToList();
        //add the hidden tools on this template
        allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList());
        //hide all the tools then allow the line tool
      
        //At 2.x -
        //allTools.AddRange(cimEditTemplate.GetExcludedToolDamlIds().ToList());
        allTools.AddRange(cimEditTemplate.GetExcludedToolIDs().ToList());
        
        //At 2.x - 
        //cimEditTemplate.SetExcludedToolDamlIds(allTools.ToArray());
        //cimEditTemplate.AllowToolDamlID("esri_editing_SketchLineTool");
        
        cimEditTemplate.SetExcludedToolIDs(allTools.ToArray());
        cimEditTemplate.AllowToolID("esri_editing_SketchLineTool");
        newCIMEditingTemplates.Add(cimEditTemplate);
      }
      //update the layer templates
      var layerDef = featLayer.GetDefinition() as CIMFeatureLayer;
      // Set AutoGenerateFeatureTemplates to false for template changes to stick
      layerDef.AutoGenerateFeatureTemplates = false;
      layerDef.FeatureTemplates = newCIMEditingTemplates.ToArray();
      featLayer.SetDefinition(layerDef);
    });
    Edit Color Modulation
    //Must be called on the MCT
    //var pcsl = ...;
    var def = pcsl.GetDefinition() as CIMPointCloudLayer;
    //Get the ColorModulation off the renderer
    var modulation = def.Renderer.ColorModulation;
    if (modulation == null)
      modulation = new CIMColorModulationInfo();
    //Set the minimum and maximum intensity as needed
    modulation.MinValue = 0;
    modulation.MaxValue = 100.0;
    //apply back
    def.Renderer.ColorModulation = modulation;
    //Commit changes back to the CIM
    pcsl.SetDefinition(def);
    
    Edit The Renderer to use Fixed Size
    //Must be called on the MCT
    //var pcsl = ...;
    var def = pcsl.GetDefinition() as CIMPointCloudLayer;
    
    //Set the point shape and sizing on the renderer
    def.Renderer.PointShape = PointCloudShapeType.DiskShaded;
    var pointSize = new CIMPointCloudFixedSizeAlgorithm()
    {
      UseRealWorldSymbolSizes = false,
      Size = 8
    };
    def.Renderer.PointSizeAlgorithm = pointSize;
    //Commit changes back to the CIM
    pcsl.SetDefinition(def);
    Edit the Renderer to Scale Size
    //Must be called on the MCT
    //var pcsl = ...;
    var def = pcsl.GetDefinition() as CIMPointCloudLayer;
    
    //Set the point shape and sizing on the renderer
    def.Renderer.PointShape = PointCloudShapeType.DiskFlat;//default
    var scaleSize = new CIMPointCloudSplatAlgorithm()
    {
      MinSize = 8,
      ScaleFactor = 1.0 //100%
    };
    def.Renderer.PointSizeAlgorithm = scaleSize;
    //Commit changes back to the CIM
    pcsl.SetDefinition(def);
    Edit Density settings
    //Must be called on the MCT
    //var pcsl = ...;
    var def = pcsl.GetDefinition() as CIMPointCloudLayer;
    //PointsBudget - corresponds to Display Limit on the UI
    // - the absolute maximum # of points to display
    def.PointsBudget = 1000000;
    
    //PointsPerInch - corresponds to Density Min --- Max on the UI
    // - the max number of points per display inch to renderer
    def.PointsPerInch = 15;
    //Commit changes back to the CIM
    pcsl.SetDefinition(def);
    
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3 or higher.
    See Also