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; }
Přihlášení členové mohou přispívat, sledovat aktualizace a další. Jste tu noví? Zaregistrujte si bezplatný účet.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.