protected override async void OnClick() { var usHighwaysLayer = MapView.Active.Map.GetLayersAsFlattenedList().FirstOrDefault((fl) => fl.Name == "USHighways") as FeatureLayer; if (usHighwaysLayer == null) { MessageBox.Show("Please add the US HIghways layer to the TOC", "Cannot find US Highways"); return; } await QueuedTask.Run(() => { if (_layerCimRenderer == null) { _layerCimRenderer = CreateniqueValueRendererForUSHighwaysUsingDefinition(usHighwaysLayer); } //For examination in the debugger... var renderer = usHighwaysLayer.GetRenderer(); //We will use a UniqueValue renderer on the US Highways if ((renderer as CIMUniqueValueRenderer) == null) { usHighwaysLayer.SetRenderer(_layerCimRenderer); } //Now, create the symbol levels SetUpSymbolLevelsForUSHighways(usHighwaysLayer); }); }
protected override async void OnClick() { var usStatesLayer = MapView.Active.Map.GetLayersAsFlattenedList().FirstOrDefault((fl) => fl.Name == "States") as FeatureLayer; if (usStatesLayer == null) { MessageBox.Show("Please add the US States layer to the TOC", "Cannot find US States"); return; } await QueuedTask.Run(() => { if (_layerCimRenderer == null) { _layerCimRenderer = CreateniqueValueRendererForUSStatesUsingDefinition(usStatesLayer); } //For examination in the debugger... var renderer = usStatesLayer.GetRenderer(); string xmlDef = renderer.ToXml(); string xmlDef2 = _layerCimRenderer.ToXml(); usStatesLayer.SetRenderer(_layerCimRenderer); }); }
public async Task ApplyColorRampAsync(FeatureLayer featureLayer, string[] fields) { StyleProjectItem style = Project.Current.GetItems <StyleProjectItem>().FirstOrDefault(s => s.Name == "ColorBrewer Schemes (RGB)"); if (style == null) { return; } var colorRampList = await QueuedTask.Run(() => style.SearchColorRamps("Red-Gray (10 Classes)")); if (colorRampList == null || colorRampList.Count == 0) { return; } CIMColorRamp cimColorRamp = null; CIMRenderer renderer = null; await QueuedTask.Run(() => { cimColorRamp = colorRampList[0].ColorRamp; var rendererDef = new UniqueValueRendererDefinition(fields, null, cimColorRamp); renderer = featureLayer?.CreateRenderer(rendererDef); featureLayer?.SetRenderer(renderer); }); }
private void GetRenderer(CIMRenderer renderer, XmlNode node, string outputDir) { XmlNode nd = node.SelectSingleNode("//URI"); string _URIPath = nd.InnerText.Replace("CIMPATH=", ""); string _outPath = System.IO.Path.Combine(outputDir, System.IO.Path.GetDirectoryName(_URIPath)); string _URIFileName = System.IO.Path.GetFileNameWithoutExtension(_URIPath); string _imgPath = System.IO.Path.Combine(_outPath, "img\\" + _URIFileName); string _imgPathRelative = "/img" + _URIFileName; string _imgFullPath = ""; switch (renderer.GetType().Name) { case "CIMSimpleRenderer": var simpleRenderer = renderer as CIMSimpleRenderer; //CIMSymbol symbol = SymbolFactory.Instance.ConstructPointSymbol(ColorFactory.Instance.GreenRGB, 1.0, SimpleMarkerStyle.Circle); //You can generate a swatch for a text symbols also. _imgFullPath = System.IO.Path.Combine(_imgPath, _URIFileName + "_Default.png"); BitmapSource bs_simpleRenderer = SavePicturetoFile3(simpleRenderer.Symbol.Symbol, _imgFullPath); XmlNode nd_simpleRenderer = node.SelectSingleNode("Renderer/Symbol/Symbol"); XmlNode nd2 = nd_simpleRenderer.AppendChild(XmlUtility.CreateTextElement(nd_simpleRenderer, "picture", ToBase64(bs_simpleRenderer, "PNG"))); XmlNode nd5 = nd_simpleRenderer.AppendChild(XmlUtility.CreateTextElement(nd2, "picturePath", _imgPathRelative + _URIFileName + "_Default.png")); bs_simpleRenderer = null; //nd_simpleRenderer.AppendChild(nd2); break; case "CIMUniqueValueRenderer": _imgFullPath = System.IO.Path.Combine(_imgPath, _URIFileName + "_Default.png"); var uniqueValueRenderer = renderer as CIMUniqueValueRenderer; BitmapSource bs_uniqueValueRenderer = SavePicturetoFile3(uniqueValueRenderer.DefaultSymbol.Symbol, _imgFullPath); XmlNode nd_uniqueValueRenderer = node.SelectSingleNode("Renderer/DefaultSymbol/Symbol"); XmlNode nd3 = nd_uniqueValueRenderer.AppendChild(XmlUtility.CreateTextElement(nd_uniqueValueRenderer, "picture", ToBase64(bs_uniqueValueRenderer, "PNG"))); XmlNode nd6 = nd_uniqueValueRenderer.AppendChild(XmlUtility.CreateTextElement(nd3, "picturePath", _imgPathRelative + _URIFileName + "_Default.png")); bs_uniqueValueRenderer = null; foreach (CIMUniqueValueGroup uvg in uniqueValueRenderer.Groups) { foreach (CIMUniqueValueClass uvc in uvg.Classes) { _imgFullPath = System.IO.Path.Combine(_imgPath, _URIFileName + "_" + (string.IsNullOrEmpty(uvc.Label) ? System.IO.Path.GetRandomFileName() : MakeValidFileName(uvc.Label) + ".png")); BitmapSource bs_uniqueValueClass = SavePicturetoFile3(uvc.Symbol.Symbol, _imgFullPath); XmlNode nd_uniqueValueClass = node.SelectSingleNode("//CIMUniqueValueClass[Label='" + uvc.Label + "']"); XmlNode nd4 = nd_uniqueValueClass.AppendChild(XmlUtility.CreateTextElement(nd_uniqueValueClass, "picture", ToBase64(bs_uniqueValueClass, "PNG"))); XmlNode nd7 = nd_uniqueValueClass.AppendChild(XmlUtility.CreateTextElement(nd4, "picturePath", _imgPathRelative + _URIFileName + "_" + (string.IsNullOrEmpty(uvc.Label) ? System.IO.Path.GetRandomFileName() : MakeValidFileName(uvc.Label) + ".png"))); bs_uniqueValueClass = null; } } break; default: break; } }
protected override async void OnClick() { var usHighwaysLayer = MapView.Active.Map.GetLayersAsFlattenedList().FirstOrDefault((fl) => fl.Name == "USHighways") as FeatureLayer; if (usHighwaysLayer == null) { MessageBox.Show("Please add the US HIghways layer to the TOC", "Cannot find US Highways"); return; } await QueuedTask.Run(() => { if (_layerCimRenderer == null) _layerCimRenderer = CreateniqueValueRendererForUSHighwaysUsingDefinition(usHighwaysLayer); //For examination in the debugger... var renderer = usHighwaysLayer.GetRenderer(); //We will use a UniqueValue renderer on the US Highways if ((renderer as CIMUniqueValueRenderer) == null) usHighwaysLayer.SetRenderer(_layerCimRenderer); //Now, create the symbol levels SetUpSymbolLevelsForUSHighways(usHighwaysLayer); }); }
protected override async void OnClick() { var usStatesLayer = MapView.Active.Map.GetLayersAsFlattenedList().FirstOrDefault((fl) => fl.Name == "States") as FeatureLayer; if (usStatesLayer == null) { MessageBox.Show("Please add the 'States' layer to the TOC - with a 'STATE_NAME' field containing state names.", "Cannot find US States"); return; } await QueuedTask.Run(() => { if (_layerCimRenderer == null) { _layerCimRenderer = CreateUniqueValueRendererForUSStates(); } //For examination in the debugger... var renderer = usStatesLayer.GetRenderer(); usStatesLayer.SetRenderer(_layerCimRenderer); }); }
protected override async void OnClick() { var usStatesLayer = MapView.Active.Map.GetLayersAsFlattenedList().FirstOrDefault((fl) => fl.Name == "States") as FeatureLayer; if (usStatesLayer == null) { MessageBox.Show("Please add the 'States' layer to the TOC - with a 'STATE_NAME' field containing state names.", "Cannot find US States"); return; } await QueuedTask.Run(() => { if (_layerCimRenderer == null) _layerCimRenderer = CreateUniqueValueRendererForUSStates(); //For examination in the debugger... var renderer = usStatesLayer.GetRenderer(); string xmlDef = renderer.ToXml(); string xmlDef2 = _layerCimRenderer.ToXml(); usStatesLayer.SetRenderer(_layerCimRenderer); }); }
private ImageSource getSymbolPicture(CIMRenderer renderer) { ImageSource _symbolPicture = null; switch (renderer.GetType().Name) { case "CIMSimpleRenderer": var simpleRenderer = renderer as CIMSimpleRenderer; //CIMSymbol symbol = SymbolFactory.Instance.ConstructPointSymbol(ColorFactory.Instance.GreenRGB, 1.0, SimpleMarkerStyle.Circle); //You can generate a swatch for a text symbols also. var si = new SymbolStyleItem() { Symbol = simpleRenderer.Symbol.Symbol, PatchHeight = 32, PatchWidth = 32 }; _symbolPicture = si.PreviewImage; break; case "CIMUniqueValueRenderer": var uniqueValueRenderer = renderer as CIMUniqueValueRenderer; var si1 = new SymbolStyleItem() { Symbol = uniqueValueRenderer.DefaultSymbol.Symbol, PatchHeight = 32, PatchWidth = 32 }; _symbolPicture = si1.PreviewImage; break; default: break; } return(_symbolPicture); }
//Exporting logic public static async Task Export3DMarkerSymbols() { var activeMapView = ArcGIS.Desktop.Mapping.MapView.Active; if (activeMapView == null) { return; } CIMObjectMarker3D mrkr3D = null; var selectedLayers = activeMapView.GetSelectedLayers(); if (selectedLayers.Count == 0) { ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Select at least one point feature layer in the Contents pane."); return; } string outputFolder = SetOutputFolder(); if (outputFolder == "") { return; } await QueuedTask.Run(() => { foreach (Layer layer in selectedLayers) { if (layer is FeatureLayer) { FeatureLayer ftrLayer = layer as FeatureLayer; CIMRenderer currentRenderer = ftrLayer.GetRenderer(); if (currentRenderer is CIMSimpleRenderer) { //Get simple renderer from feature layer CIMSimpleRenderer simpleRenderer = currentRenderer as CIMSimpleRenderer; CIMPointSymbol ptSymbol = simpleRenderer.Symbol.Symbol as CIMPointSymbol; if (ptSymbol != null) { var symbolLayers = ptSymbol.SymbolLayers; int count = 0; foreach (CIMSymbolLayer s in symbolLayers) { mrkr3D = s as CIMObjectMarker3D; if (mrkr3D != null) { string output = outputFolder + "\\" + ftrLayer.Name + "_" + count.ToString() + ".json"; if (File.Exists(output)) { ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Following file already exists: " + output); } else { bool success = mrkr3D.ExportWeb3DObjectResource(output); if (!success) { //Export will fail if the 3D marker symbol being exported is a restricted symbol ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Export failed for: " + output); } } count++; } } } } else if (currentRenderer is CIMUniqueValueRenderer) { //Get unique value renderer from feature layer CIMUniqueValueRenderer uniqueRenderer = currentRenderer as CIMUniqueValueRenderer; CIMUniqueValueGroup[] uv_group = uniqueRenderer.Groups; foreach (CIMUniqueValueGroup v in uv_group) { CIMUniqueValueClass[] uv_classes = v.Classes; foreach (CIMUniqueValueClass uv_class in uv_classes) { CIMPointSymbol ptSymbol = uv_class.Symbol.Symbol as CIMPointSymbol; if (ptSymbol != null) { var symbolLayers = ptSymbol.SymbolLayers; int count = 0; foreach (CIMSymbolLayer s in symbolLayers) { mrkr3D = s as CIMObjectMarker3D; if (mrkr3D != null) { string output = outputFolder + "\\" + ftrLayer.Name + "_" + uv_class.Label + "_" + count.ToString() + ".json"; if (File.Exists(output)) { ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Following file already exists: " + output); } else { bool success = mrkr3D.ExportWeb3DObjectResource(output); if (!success) { //Export will fail if the 3D marker symbol being exported is a restricted symbol ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Export failed for: " + output); } } count++; } } } } } } } } }); }
public async Task <string> GenerateGmlAsync() { MapView mapView = MapView.Active; Map map = mapView?.Map; SpatialReference mapSpatRef = map?.SpatialReference; MySpatialReference myCyclSpatRef = _settings.CycloramaViewerCoordinateSystem; SpatialReference cyclSpatRef = (myCyclSpatRef == null) ? mapSpatRef : (myCyclSpatRef.ArcGisSpatialReference ?? (await myCyclSpatRef.CreateArcGisSpatialReferenceAsync())); Unit unit = cyclSpatRef?.Unit; double factor = unit?.ConversionFactor ?? 1; Color color = Color.White; string result = "<wfs:FeatureCollection xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:wfs=\"http://www.opengis.net/wfs\" xmlns:gml=\"http://www.opengis.net/gml\">"; await QueuedTask.Run(async() => { SpatialReference layerSpatRef = Layer.GetSpatialReference(); IList <IList <Segment> > geometries = new List <IList <Segment> >(); ICollection <Viewer> viewers = _viewerList.Viewers; foreach (var viewer in viewers) { double distance = viewer.OverlayDrawDistance; RecordingLocation recordingLocation = viewer.Location; if (recordingLocation != null) { if (cyclSpatRef?.IsGeographic ?? true) { distance = distance * factor; } else { distance = distance / factor; } double x = recordingLocation.X; double y = recordingLocation.Y; double xMin = x - distance; double xMax = x + distance; double yMin = y - distance; double yMax = y + distance; Envelope envelope = EnvelopeBuilder.CreateEnvelope(xMin, yMin, xMax, yMax, cyclSpatRef); Envelope copyEnvelope = envelope; if (layerSpatRef.Wkid != 0) { ProjectionTransformation projection = ProjectionTransformation.Create(cyclSpatRef, layerSpatRef); copyEnvelope = GeometryEngine.Instance.ProjectEx(envelope, projection) as Envelope; } Polygon copyPolygon = PolygonBuilder.CreatePolygon(copyEnvelope, layerSpatRef); ReadOnlyPartCollection polygonParts = copyPolygon.Parts; IEnumerator <ReadOnlySegmentCollection> polygonSegments = polygonParts.GetEnumerator(); IList <Segment> segments = new List <Segment>(); while (polygonSegments.MoveNext()) { ReadOnlySegmentCollection polygonSegment = polygonSegments.Current; foreach (Segment segment in polygonSegment) { segments.Add(segment); } } geometries.Add(segments); } } GC.Collect(); Polygon polygon = PolygonBuilder.CreatePolygon(geometries, layerSpatRef); using (FeatureClass featureClass = Layer?.GetFeatureClass()) { string uri = Layer?.URI; SpatialQueryFilter spatialFilter = new SpatialQueryFilter { FilterGeometry = polygon, SpatialRelationship = SpatialRelationship.Intersects, SubFields = "*" }; using (RowCursor existsResult = featureClass?.Search(spatialFilter, false)) { while (existsResult?.MoveNext() ?? false) { Row row = existsResult.Current; long objectId = row.GetObjectID(); if ((_selection == null) || (!_selection.Contains(objectId))) { Feature feature = row as Feature; var fieldvalues = new Dictionary <string, string> { { FieldUri, uri }, { FieldObjectId, objectId.ToString() } }; Geometry geometry = feature?.GetShape(); GeometryType geometryType = geometry?.GeometryType ?? GeometryType.Unknown; Geometry copyGeometry = geometry; if ((geometry != null) && (layerSpatRef.Wkid != 0)) { ProjectionTransformation projection = ProjectionTransformation.Create(layerSpatRef, cyclSpatRef); copyGeometry = GeometryEngine.Instance.ProjectEx(geometry, projection); } if (copyGeometry != null) { string gml = string.Empty; switch (geometryType) { case GeometryType.Envelope: break; case GeometryType.Multipatch: break; case GeometryType.Multipoint: break; case GeometryType.Point: MapPoint point = copyGeometry as MapPoint; if (point != null) { gml = $"<gml:Point {GmlDimension(copyGeometry)}><gml:coordinates>{await GmlPointAsync(point)}</gml:coordinates></gml:Point>"; } break; case GeometryType.Polygon: Polygon polygonGml = copyGeometry as Polygon; if (polygonGml != null) { ReadOnlyPartCollection polygonParts = polygonGml.Parts; IEnumerator <ReadOnlySegmentCollection> polygonSegments = polygonParts.GetEnumerator(); while (polygonSegments.MoveNext()) { ReadOnlySegmentCollection segments = polygonSegments.Current; gml = $"{gml}<gml:MultiPolygon><gml:PolygonMember><gml:Polygon {GmlDimension(copyGeometry)}><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>"; for (int i = 0; i < segments.Count; i++) { if (segments[i].SegmentType == SegmentType.Line) { MapPoint polygonPoint = segments[i].StartPoint; gml = $"{gml}{((i == 0) ? string.Empty : " ")}{await GmlPointAsync(polygonPoint)}"; if (i == (segments.Count - 1)) { polygonPoint = segments[i].EndPoint; gml = $"{gml} {await GmlPointAsync(polygonPoint)}"; } } } gml = $"{gml}</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:PolygonMember></gml:MultiPolygon>"; } } break; case GeometryType.Polyline: Polyline polylineGml = copyGeometry as Polyline; if (polylineGml != null) { ReadOnlyPartCollection polylineParts = polylineGml.Parts; IEnumerator <ReadOnlySegmentCollection> polylineSegments = polylineParts.GetEnumerator(); while (polylineSegments.MoveNext()) { ReadOnlySegmentCollection segments = polylineSegments.Current; gml = $"{gml}<gml:MultiLineString><gml:LineStringMember><gml:LineString {GmlDimension(copyGeometry)}><gml:coordinates>"; for (int i = 0; i < segments.Count; i++) { if (segments[i].SegmentType == SegmentType.Line) { MapPoint linePoint = segments[i].StartPoint; gml = $"{gml}{((i == 0) ? string.Empty : " ")}{await GmlPointAsync(linePoint)}"; if (i == (segments.Count - 1)) { linePoint = segments[i].EndPoint; gml = $"{gml} {await GmlPointAsync(linePoint)}"; } } } gml = $"{gml}</gml:coordinates></gml:LineString></gml:LineStringMember></gml:MultiLineString>"; } } break; case GeometryType.Unknown: break; } string fieldValueStr = fieldvalues.Aggregate(string.Empty, (current, fieldvalue) => string.Format("{0}<{1}>{2}</{1}>", current, fieldvalue.Key, fieldvalue.Value)); result = $"{result}<gml:featureMember><xs:Geometry>{fieldValueStr}{gml}</xs:Geometry></gml:featureMember>"; } } } } } CIMRenderer renderer = Layer.GetRenderer(); CIMSimpleRenderer simpleRenderer = renderer as CIMSimpleRenderer; CIMUniqueValueRenderer uniqueValueRendererRenderer = renderer as CIMUniqueValueRenderer; CIMSymbolReference symbolRef = simpleRenderer?.Symbol ?? uniqueValueRendererRenderer?.DefaultSymbol; CIMSymbol symbol = symbolRef?.Symbol; CIMColor cimColor = symbol?.GetColor(); double[] colorValues = cimColor?.Values; int red = ((colorValues != null) && (colorValues.Length >= 1)) ? ((int)colorValues[0]) : 255; int green = ((colorValues != null) && (colorValues.Length >= 2)) ? ((int)colorValues[1]) : 255; int blue = ((colorValues != null) && (colorValues.Length >= 3)) ? ((int)colorValues[2]) : 255; int alpha = ((colorValues != null) && (colorValues.Length >= 4)) ? ((int)colorValues[3]) : 255; color = Color.FromArgb(alpha, red, green, blue); }); GmlChanged = (Color != color); Color = color; string newGml = $"{result}</wfs:FeatureCollection>"; GmlChanged = ((newGml != Gml) || GmlChanged); return(Gml = newGml); }
public void btnChangeLineSymbology(object sender, EventArgs e) { var lineSymbology = ((RadioButton)sender).Tag; QueuedTask.Run(() => { //Get the active map's definition - CIMMap. if (lineSymbology.ToString() == "None") { var cimMap = MapView.Active.Map.GetDefinition(); //FeatureLayer a = MapView.Active.Map.Layers[1] as FeatureLayer; var lyr = MapView.Active.Map.GetLayersAsFlattenedList().OfType <FeatureLayer>().FirstOrDefault(s => s.ShapeType == esriGeometryType.esriGeometryPolyline); SimpleRendererDefinition renderer = new SimpleRendererDefinition() { SymbolTemplate = new CIMSymbolReference() { Symbol = SymbolFactory.Instance.ConstructLineSymbol( ColorFactory.Instance.WhiteRGB, 0.5, SimpleLineStyle.Null) } }; var r = lyr.CreateRenderer(renderer); lyr.SetRenderer(r); } if (lineSymbology.ToString() == "Gray") { var cimMap = MapView.Active.Map.GetDefinition(); //FeatureLayer a = MapView.Active.Map.Layers[1] as FeatureLayer; var lyr = MapView.Active.Map.GetLayersAsFlattenedList().OfType <FeatureLayer>().FirstOrDefault(s => s.ShapeType == esriGeometryType.esriGeometryPolyline); SimpleRendererDefinition renderer = new SimpleRendererDefinition() { SymbolTemplate = new CIMSymbolReference() { Symbol = SymbolFactory.Instance.ConstructLineSymbol( ColorFactory.Instance.GreyRGB, 0.5, SimpleLineStyle.Solid) } }; var r = lyr.CreateRenderer(renderer); lyr.SetRenderer(r); } if (lineSymbology.ToString() == "Multicolor") { var cimMap = MapView.Active.Map.GetDefinition(); //FeatureLayer a = MapView.Active.Map.Layers[1] as FeatureLayer; var lyr = MapView.Active.Map.GetLayersAsFlattenedList().OfType <FeatureLayer>().FirstOrDefault(s => s.ShapeType == esriGeometryType.esriGeometryPolyline); CIMUniqueValueRenderer renderer = lyr.GetRenderer() as CIMUniqueValueRenderer; // color ramp CIMICCColorSpace colorSpace = new CIMICCColorSpace() { URL = "Default RGB" }; CIMRandomHSVColorRamp randomHSVColorRamp = new CIMRandomHSVColorRamp() { ColorSpace = colorSpace, MinAlpha = 100, MaxAlpha = 100, MinH = 0, MaxH = 360, MinS = 15, MaxS = 30, MinV = 99, MaxV = 100, Seed = 0, }; UniqueValueRendererDefinition uvr = new UniqueValueRendererDefinition() { ValueFields = new string[] { "OBJECTID" }, //multiple fields in the array if needed. ColorRamp = randomHSVColorRamp //Specify color ramp }; CIMRenderer r = lyr.CreateRenderer(uvr); var t = r.ToXml(); Debug.WriteLine(t); lyr.SetRenderer(r); } }); }