コード例 #1
0
        public async void Examples1_b()
        {
            var pcsl = MapView.Active.Map.GetLayersAsFlattenedList().OfType <PointCloudSceneLayer>().FirstOrDefault();

            await QueuedTask.Run(() =>
            {
                #region Create and Set a ClassBreaks Renderer
                //Must be called on the MCT
                //var pcsl = ...;

                var fields        = pcsl.QueryAvailablePointCloudRendererFields(PointCloudRendererType.ClassBreaksRenderer);
                var classBreakDef = new PointCloudRendererDefinition(PointCloudRendererType.ClassBreaksRenderer)
                {
                    //ELEVATION or INTENSITY
                    Field = fields[0]
                };
                //create the renderer
                var cbr = pcsl.CreateRenderer(classBreakDef) as CIMPointCloudClassBreaksRenderer;
                //Set up a color scheme to use
                var style     = Project.Current.GetItems <StyleProjectItem>().First(s => s.Name == "ArcGIS Colors");
                var rampStyle = style.LookupItem(
                    StyleItemType.ColorRamp, "Spectrum By Wavelength-Full Bright_Multi-hue_2")
                                as ColorRampStyleItem;
                var colorScheme = rampStyle.ColorRamp;
                //Set up 6 manual class breaks
                var breaks = 6;
                var colors = ColorFactory.Instance.GenerateColorsFromColorRamp(
                    colorScheme, breaks);
                var classBreaks = new List <CIMColorClassBreak>();
                var min         = cbr.Breaks[0].UpperBound;
                var max         = cbr.Breaks[cbr.Breaks.Count() - 1].UpperBound;
                var step        = (max - min) / (double)breaks;

                //add in the class breaks
                double upper = min;
                for (int b = 1; b <= breaks; b++)
                {
                    double lower = upper;
                    upper        = b == breaks ? max : min + (b *step);
                    var cb       = new CIMColorClassBreak()
                    {
                        UpperBound = upper,
                        Label      = string.Format("{0:#0.0#} - {1:#0.0#}", lower, upper),
                        Color      = colors[b - 1]
                    };
                    classBreaks.Add(cb);
                }
                cbr.Breaks = classBreaks.ToArray();
                pcsl.SetRenderer(cbr);

                #endregion
            });
        }
コード例 #2
0
        public async void Examples()
        {
            #region Name of PointCloudSceneLayer
            var pcsl           = MapView.Active.Map.GetLayersAsFlattenedList().OfType <PointCloudSceneLayer>().FirstOrDefault();
            var scenelayerName = pcsl?.Name;
            #endregion

            #region Get Data Source type for PointCloudSceneLayer
            //var pcsl = ...;
            ISceneLayerInfo          slInfo         = pcsl as ISceneLayerInfo;
            SceneLayerDataSourceType dataSourceType = slInfo.GetDataSourceType();
            if (dataSourceType == SceneLayerDataSourceType.Service)
            {
                //TODO...
            }
            else if (dataSourceType == SceneLayerDataSourceType.SLPK)
            {
            }
            #endregion

            await QueuedTask.Run(() =>
            {
                #region Query all class codes and lables in the PointCloudSceneLayer
                //Must be called on the MCT
                //var pcsl = ...;
                Dictionary <int, string> classCodesAndLabels = pcsl.QueryAvailableClassCodesAndLabels();
                #endregion

                #region Set a Filter for PointCloudSceneLayer
                //Must be called on the MCT
                //var pcsl = ...;
                //Retrieve the available classification codes
                var dict = pcsl.QueryAvailableClassCodesAndLabels();

                //Filter out low noise and unclassified (7 and 1 respectively)
                //consult https://pro.arcgis.com/en/pro-app/help/data/las-dataset/storing-lidar-data.htm
                var filterDef = new PointCloudFilterDefinition()
                {
                    ClassCodes   = dict.Keys.Where(c => c != 7 && c != 1).ToList(),
                    ReturnValues = new List <PointCloudReturnType> {
                        PointCloudReturnType.FirstOfMany
                    }
                };
                //apply the filter
                pcsl.SetFilters(filterDef.ToCIM());

                #endregion

                #region Update the ClassFlags for PointCloudSceneLayer
                //Must be called on the MCT
                //var pcsl = ...;
                var filters = pcsl.GetFilters();
                PointCloudFilterDefinition fdef = null;
                if (filters.Count() == 0)
                {
                    fdef = new PointCloudFilterDefinition()
                    {
                        //7 is "edge of flight line" - exclude
                        ClassFlags = new List <ClassFlag> {
                            new ClassFlag(7, ClassFlagOption.Exclude)
                        }
                    };
                }
                else
                {
                    fdef = PointCloudFilterDefinition.FromCIM(filters);
                    //keep any include or ignore class flags
                    var keep = fdef.ClassFlags.Where(cf => cf.ClassFlagOption != ClassFlagOption.Exclude).ToList();
                    //7 is "edge of flight line" - exclude
                    keep.Add(new ClassFlag(7, ClassFlagOption.Exclude));
                    fdef.ClassFlags = keep;
                }
                //apply
                pcsl.SetFilters(fdef.ToCIM());

                #endregion

                #region Get the filters for PointCloudSceneLayer
                //Must be called on the MCT
                //var pcsl = ...;
                IReadOnlyList <CIMPointCloudFilter> updatedFilter = pcsl.GetFilters();
                foreach (var filter in updatedFilter)
                {
                    //There is either 0 or 1 of each
                    if (filter is CIMPointCloudReturnFilter returnFilter)
                    {
                        PointCloudFilterDefinition pcfl = PointCloudFilterDefinition.FromCIM(updatedFilter);
                        List <PointCloudReturnType> updatedReturnValues = pcfl.ReturnValues;
                    }
                    if (filter is CIMPointCloudValueFilter classCodesFilter)
                    {
                        // do something
                    }

                    if (filter is CIMPointCloudBitFieldFilter classFlagsFilter)
                    {
                        // do something
                    }
                }
                #endregion

                #region Clear filters in PointCloudSceneLayer
                //Must be called on the MCT
                //var pcsl = ...;
                pcsl.ClearFilters();
                #endregion

                #region Get PointCloudSceneLayer Renderer and RendererType
                //Must be called on the MCT
                //var pcsl = ...;
                CIMPointCloudRenderer cimGetPCLRenderer = pcsl.GetRenderer();
                //Can be one of Unknown, Stretch, ClassBreaks, UniqueValue, RGB
                PointCloudRendererType pclRendererType = pcsl.RendererType;

                #endregion

                #region Query PointCloudSceneLayer Renderer fields
                //Must be called on the MCT
                //var pcsl = ...;
                IReadOnlyList <string> flds = pcsl.QueryAvailablePointCloudRendererFields(
                    PointCloudRendererType.UniqueValueRenderer);
                var fldCount = flds.Count;

                #endregion

                #region Create and Set a Stretch Renderer
                //Must be called on the MCT
                //var pcsl = ...;

                var fields     = pcsl.QueryAvailablePointCloudRendererFields(PointCloudRendererType.StretchRenderer);
                var stretchDef = new PointCloudRendererDefinition(PointCloudRendererType.StretchRenderer)
                {
                    //Will be either ELEVATION or INTENSITY
                    Field = fields[0]
                };
                //Create the CIM Renderer
                var stretchRenderer = pcsl.CreateRenderer(stretchDef) as CIMPointCloudStretchRenderer;
                //Apply a color ramp
                var style                 = Project.Current.GetItems <StyleProjectItem>().First(s => s.Name == "ArcGIS Colors");
                var colorRamp             = style.SearchColorRamps("").First();
                stretchRenderer.ColorRamp = colorRamp.ColorRamp;
                //Apply modulation
                stretchRenderer.ColorModulation = new CIMColorModulationInfo()
                {
                    MinValue = 0,
                    MaxValue = 100
                };
                //apply the renderer
                pcsl.SetRenderer(stretchRenderer);

                #endregion
            });
        }