public async Task <double> GetOffsetZAsync()
 {
     return(await QueuedTask.Run(() =>
     {
         CIMBaseLayer cimBaseLayer = Layer?.GetDefinition();
         CIMBasicFeatureLayer cimBasicFeatureLayer = cimBaseLayer as CIMBasicFeatureLayer;
         CIMLayerElevationSurface layerElevation = cimBasicFeatureLayer?.LayerElevation;
         return (layerElevation?.OffsetZ ?? 0.0);
     }));
 }
        // Set range for feature layer
        // Map Exploration Team Routine
        private Task SetRangeProperties(FeatureLayer ftrLyr, string fieldName, bool hasCustomRange = false, double customMin = 0, double customMax = 1, bool inSingleValueMode = false, int rangeStepCount = 0)
        {
            return(QueuedTask.Run(() =>
            {
                //Get min/max values for the field
                double minValue = 0;
                double maxValue = 0;

                //Calculate min/max if custom range is not defined
                if (!hasCustomRange)
                {
                    int ftrCount = 0;
                    RowCursor rows = ftrLyr.Search(null);
                    while (rows.MoveNext())
                    {
                        ftrCount++;
                    }
                    double[] fieldVals = new double[ftrCount];
                    rows = ftrLyr.Search(null);
                    //Looping through to count
                    int i = 0;
                    while (rows.MoveNext())
                    {
                        using (var currentRow = rows.Current)
                        {
                            object origVal = currentRow.GetOriginalValue(rows.FindField(fieldName));
                            if (!(origVal is DBNull))
                            {
                                fieldVals[i] = System.Convert.ToDouble(origVal);
                            }
                            i++;
                        }
                    }
                    if (fieldVals.Count() > 0)
                    {
                        minValue = fieldVals.Min();
                        maxValue = fieldVals.Max();
                    }
                }
                else
                {
                    minValue = customMin;
                    maxValue = customMax;
                }

                CIMBasicFeatureLayer baseLyr = (CIMBasicFeatureLayer)ftrLyr.GetDefinition();
                CIMFeatureTable ftrTable = baseLyr.FeatureTable;

                //CIMRange theRange = new CIMRange();
                CIMRangeDefinition[] rangeDefn = new CIMRangeDefinition[1];
                rangeDefn[0] = new CIMRangeDefinition();
                rangeDefn[0].FieldName = fieldName;
                rangeDefn[0].Name = fieldName;
                rangeDefn[0].CustomFullExtent = new CIMRange();
                rangeDefn[0].CustomFullExtent.Min = minValue;
                rangeDefn[0].CustomFullExtent.Max = maxValue;

                //Set current range with either step count == 1 OR for some cases with step count == 0
                rangeDefn[0].CurrentRange = new CIMRange();
                rangeDefn[0].CurrentRange.Min = minValue;
                //rangeDefn[0].CurrentRange.Max = (rangeStepCount == 1) ? minValue + 1 : minValue;

                //set range step to 0 if in single value mode and to rangeStepCount otherwise
                rangeDefn[0].CurrentRange.Max = (inSingleValueMode) ? minValue : minValue + rangeStepCount;
                //rangeDefn[0].CurrentRange.Max = maxValue;

                ftrTable.RangeDefinitions = rangeDefn;
                ftrTable.ActiveRangeName = fieldName;
                baseLyr.FeatureTable = ftrTable;
                ftrLyr.SetDefinition(baseLyr);
            }));
        }
Exemplo n.º 3
0
        internal List <HierarchyRow> GetRelationshipChildrenFromLayer(BasicFeatureLayer member,
                                                                      long objectID)
        {
            var children = new List <HierarchyRow>();

            CIMBasicFeatureLayer bfl = member.GetDefinition() as CIMBasicFeatureLayer;
            var relates = bfl.FeatureTable.Relates;

            if (relates == null || relates.Length == 0)
            {
                return(children);
            }

            foreach (var relate in relates)
            {
                if (!(relate.DataConnection is CIMStandardDataConnection) &&
                    !(relate.DataConnection is CIMFeatureDatasetDataConnection))
                {
                    continue;//Not supported in this sample
                }
                var sdc     = relate.DataConnection as CIMStandardDataConnection;
                var fdc     = relate.DataConnection as CIMFeatureDatasetDataConnection;
                var factory = sdc?.WorkspaceFactory ?? fdc.WorkspaceFactory;
                var path    = sdc?.WorkspaceConnectionString ?? fdc.WorkspaceConnectionString;
                if (string.IsNullOrEmpty(path))
                {
                    continue;//No connection information we can use
                }
                path = path.Replace("DATABASE=", "");
                var dstype = sdc?.DatasetType ?? fdc.DatasetType;

                if (dstype != esriDatasetType.esriDTFeatureClass &&
                    dstype != esriDatasetType.esriDTTable)
                {
                    continue;//Not supported in the sample
                }

                var dsname          = sdc?.Dataset ?? fdc.Dataset;
                var featDatasetName = fdc?.FeatureDataset ?? "";

                Geodatabase gdb = null;
                if (factory == WorkspaceFactory.FileGDB)
                {
                    gdb = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(path, UriKind.Absolute)));
                }
                else if (factory == WorkspaceFactory.SDE)
                {
                    gdb = new Geodatabase(new DatabaseConnectionFile(new Uri(path, UriKind.Absolute)));
                }

                Table table = null;
                //We have to open a type specific dataset - FeatureClass or Table
                //We cannot simply use 'Table' for both
                if (dstype == esriDatasetType.esriDTFeatureClass)
                {
                    table = GetDatasetFromGeodatabase <FeatureClass>(gdb, dsname, featDatasetName);
                }
                else
                {
                    table = GetDatasetFromGeodatabase <Table>(gdb, dsname, featDatasetName);
                }
                if (table == null)
                {
                    continue;//Related dataset not found
                }
                //Get any related rows
                var qry_fld = table.GetDefinition().GetFields().FirstOrDefault(f => f.Name == relate.ForeignKey);
                if (qry_fld == null)
                {
                    continue;//We cannot find the designated foreign key
                }
                //Load relevant values
                var inspector = new Inspector();
                inspector.Load(member, objectID);

                var need_quotes = qry_fld.FieldType == FieldType.String;
                var quote       = need_quotes ? "'" : "";
                var where = $"{relate.ForeignKey} = {quote}{inspector[relate.PrimaryKey]}{quote}";
                var qf = new QueryFilter()
                {
                    WhereClause = where,
                    SubFields   = $"{table.GetDefinition().GetObjectIDField()}, {relate.ForeignKey}"
                };

                var childHRow = new HierarchyRow()
                {
                    name = dsname,
                    type = $"{inspector[relate.PrimaryKey]}"
                };

                using (var rc = table.Search(qf))
                {
                    while (rc.MoveNext())
                    {
                        using (var row = rc.Current)
                        {
                            var id   = row.GetObjectID();
                            var HRow = new HierarchyRow()
                            {
                                name = $"{id}",
                                type = relate.ForeignKey
                            };
                            childHRow.children.Add(HRow);
                        }
                    }
                }
                children.Add(childHRow);
            }
            return(children);
        }
Exemplo n.º 4
0
 // All layers type that yield have subLayes (IsGroup = true) should have no
 // connection properties and have "Group" in the data type to get the group icon.
 private void InitBasicFeature(CIMBasicFeatureLayer layer)
 {
     InitDataConnection(layer.FeatureTable.DataConnection);
     GeometryType = BuildGeometryType(layer);
 }
Exemplo n.º 5
0
        private string BuildGeometryType(CIMBasicFeatureLayer layer)
        {
            if (layer is CIMAnnotationLayer)
            {
                return("Annotation");
            }
            if (layer is CIMDimensionLayer)
            {
                return("Dimension");
            }
            if (layer is CIMFeatureLayer featureLayer)
            {
                string symbolName = null;
                if (layer.SelectionSymbol != null)
                {
                    symbolName = layer.SelectionSymbol.Symbol.GetType().Name;
                }
                else
                {
                    if (featureLayer.Renderer is CIMSimpleRenderer sRenderer)
                    {
                        try
                        {
                            symbolName = sRenderer.Symbol.Symbol.GetType().Name;
                        }
                        catch { }
                    }
                    else if (featureLayer.Renderer is CIMUniqueValueRenderer uRenderer)
                    {
                        try
                        {
                            symbolName = uRenderer.Groups[0].Classes[0].Symbol.Symbol.GetType().Name;
                        }
                        catch { }
                    }
                    else if (featureLayer.Renderer is CIMClassBreaksRenderer cRenderer)
                    {
                        try
                        {
                            symbolName = cRenderer.Breaks[0].Symbol.Symbol.GetType().Name;
                        }
                        catch { }
                    }
                }
                switch (symbolName)
                {
                case "CIMLineSymbol": return("Polyline");

                case "CIMMeshSymbol": return("Mesh");

                case "CIMPointSymbol": return("Point");

                case "CIMPolygonSymbol": return("Polygon");

                case "CIMTextSymbol": return("Annotation");

                default: return(null);
                }
            }
            return(null);
        }