This seems like a simple operation, but I just can't put the pieces together. I'm trying to view the symbol (it happens to be a simple fill symbol) associated with a feature (it happens to use unique value symbology). In other words, I want to construct a UniqueValueRenderer that will tell me what the symbology of this feature is.
Solved! Go to Solution.
Thanks to everyone who tried to help me with this. I finally stumbled over what I needed. VB.Net code fragment:
Dim pLayer As ESRI.ArcGIS.Carto.ILayer
Dim pFeatureLayer As ESRI.ArcGIS.Carto.IFeatureLayer
Dim pGFL As ESRI.ArcGIS.Carto.IGeoFeatureLayer ' This was the missing piece
Dim pUniqueRenderer As ESRI.ArcGIS.Carto.IUniqueValueRenderer
Dim pSymbol as ESRI.ArcGIS.Display.ISymbol
pLayer = ...
pFeatureLayer = pLayer
pGFL = pFeatureLayer
pUniqueRenderer = pGFL.Renderer
pSymbol = pUniqueRenderer.Symbol(pUniqueRenderer.Value(n))
I forgot to mention the environment: ArcGIS 10.3 with .Net SDK.
Hey,
Depending on the scenario you can use create Swatches from the symbol to create image from it (provide geometry type as a parameter) or check Legend and SymbolDisplay controls. If you can tell me a bit more on the scenario, i might be able to help a bit more.
You can pass the feature into the renderer to get the symbol. Ex:
Symbol symbol = myUniqueValueRenderer.GetSymbol(myFeature); ImageSource swatch = await symbol.CreateSwatchAsync();
Thanks for the reply, Morten. But here is my basic problem: I don't know how to create the unique value renderer in the first place. If I could do that, then getting the symbol would be quite straightforward. There has to be some combination of casts that will allow me to create a UVR for this feature set. Or maybe you're suggesting that I use something like a static UVR?
There is a UniqueValueRenderer sample in the SDK that demonstrates how to build a UniqueValueRenderer by code.
Basically:
- instantiate a UniqueValueRenderer object
- set the Fields collection with the fields that participate to the renderer
- set the Infos collection with the set of { values, symbol}
Thanks for replying, Dominique. I don't think I've been clear regarding what I want to do. I want to see what the current symbol is associated with a feature. I don't want to change it. So I can't follow the SDK example, since it requires me to know the symbol associated with each value. That is exactly what I am trying to discover.
Looking at the ArcMap user interface, I can see each symbol associated with each value of my feature set. I just want to do the same in code.
Thanks to everyone who tried to help me with this. I finally stumbled over what I needed. VB.Net code fragment:
Dim pLayer As ESRI.ArcGIS.Carto.ILayer
Dim pFeatureLayer As ESRI.ArcGIS.Carto.IFeatureLayer
Dim pGFL As ESRI.ArcGIS.Carto.IGeoFeatureLayer ' This was the missing piece
Dim pUniqueRenderer As ESRI.ArcGIS.Carto.IUniqueValueRenderer
Dim pSymbol as ESRI.ArcGIS.Display.ISymbol
pLayer = ...
pFeatureLayer = pLayer
pGFL = pFeatureLayer
pUniqueRenderer = pGFL.Renderer
pSymbol = pUniqueRenderer.Symbol(pUniqueRenderer.Value(n))
Note: The above code is for ArcObjects, and not code for the ArcGIS Runtime .NET SDK - that probably explains a lot of the confusion.