ILayerFile lyrFile = new LayerFile(); lyrFile.Open("mylayer.lyr"); IGeoFeatureLayer storedGeoLayer = lyrFile.Layer as IGeoFeatureLayer; IGeoFeatureLayer targetGeoLayer = featureLayer as IGeoFeatureLayer; targetGeoLayer.Renderer = storedGeoLayer.Renderer; //Force the table of contents and currently drawn map to refresh using the new symbology ArcMap.Document.UpdateContents(); ArcMap.Document.ActiveView.Refresh();
IFeatureSelection storedSelProps = storedGeoLayer as IFeatureSelection; IFeatureSelection targetSelProps = targetGeoLayer as IFeatureSelection; targetSelProps.SelectionSymbol = storedSelProps.SelectionSymbol;
ILayerFile lyrFile = new LayerFile(); lyrFile.New("mylayer.lyr"); lyrFile.ReplaceContents(featureLayer); lyrFile.Save();
ILayerFile lyrFile = new LayerFile(); lyrFile.Open("mylayer.lyr"); IFeatureLayer featureLayer = lyrFile.Layer; ArcMap.Document.AddLayer(featureLayer);
//Save selection set after saving .lyr file IFeatureSelection featSel = featureLayer as IFeatureSelection; IEnumIDs enumIDs = featSel.SelectionSet.IDs; List<int> listIDs = new List<int>(); int id = enumIDs.Next(); while (id > -1) { listIDs.Add(id); id = enumIDs.Next(); } System.IO.File.WriteAllText("mylayer.set", string.Join(",", listIDs));
//Load selection set after loading .lyr file IFeatureSelection featSel = featureLayer as IFeatureSelection; ISelectionSet selSet = featSel.SelectionSet; IEnumerable<string> strIDs = System.IO.File.ReadAllText("mylayer.set").Split(','); int id; foreach (string strID in strIDs) { if (int.TryParse(strID, out id)) { selSet.Add(id); } } featSel.SelectionChanged();
Thanks Robert for your reply.I could try to store the layer properties in a .lyr-file, but that gives a lot of overhead, and it takes time to open a .lyr-file, as it contains also a reference to the source (if the source can't be found, the symbology is invalid).
Dim layerFile As ILayerFile = New LayerFile layerFile.Open(layerFilePath) Dim templateLayer As ILayer = layerFile.Layer() Dim objectCopy As IObjectCopy = New ObjectCopy Dim renderer As IRasterRenderer = DirectCast(objectCopy.Copy(DirectCast(templateLayer, IRasterLayer).Renderer), IRasterRenderer) rasterLayer.Renderer = renderer
private IFeatureLayer FeatureLayerFromFeatureClass(IFeatureClass featureClass, string layername) { IFeatureLayer featureLayer = new FeatureLayerClass(); featureLayer.Name = layerName; featureLayer.FeatureClass = featureClass; IFeatureSelection featureSelection = featureLayer as IFeatureSelection; if (File.Exists(_layerFilePath)) { // open the layer from the .lyr-file ILayerFile layerFile = new LayerFileClass(); layerFile.Open(_layerFilePath); IGeoFeatureLayer sourceGeoFeatureLayer = layerFile.Layer as IGeoFeatureLayer; // destination IGeoFeatureLayer destinationGeoFeatureLayer = featureLayer as IGeoFeatureLayer; // copier IObjectCopy objectCopy = new ObjectCopyClass(); // get the symbology IFeatureRenderer featureRenderer = objectCopy.Copy(sourceGeoFeatureLayer.Renderer) as IFeatureRenderer; destinationGeoFeatureLayer.Renderer = featureRenderer; // get the feature selectionsymbol IFeatureSelection sourceFeatureSelection = sourceGeoFeatureLayer as IFeatureSelection; featureSelection.SelectionSymbol = objectCopy.Copy(sourceFeatureSelection.SelectionSymbol) as ISymbol; featureSelection.SetSelectionSymbol = true; // close nicely layerFile.Close(); } return featureLayer; }
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.