0
点赞
收藏
分享

微信扫一扫

ArcGIS Pro注记编辑

阿尚青子自由写作人 2022-05-16 阅读 71
internal class ChangeSymbol : Button
{
protected async override void OnClick()
{
var annoLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<AnnotationLayer>().FirstOrDefault();
if (annoLayer == null)
return;

await QueuedTask.Run(() => {

var select = annoLayer.GetSelection();
if (select.GetObjectIDs().Count() > 0)
{
var oid = select.GetObjectIDs().First();
QueryFilter qf = new QueryFilter()
{
WhereClause = $"OBJECTID = {oid}"
};
var rowCursor = annoLayer.GetTable().Search(qf, false);
rowCursor.MoveNext();
var annoFeature = rowCursor.Current as ArcGIS.Core.Data.Mapping.AnnotationFeature;
var graphic = annoFeature.GetGraphic();
var textGraphic = graphic as CIMTextGraphic;

var op = new EditOperation();
op.Name = "Change Anno";
op.Callback((context) => {
//make the callout for the circle
var callOut = new CIMPointSymbolCallout();
callOut.PointSymbol = new CIMPointSymbol();
//Circle outline
var circle_outline = SymbolFactory.Instance.ConstructMarker(40, "ESRI Default Marker") as CIMCharacterMarker;
circle_outline.Size = 30;
//eliminate the outline
foreach (var layer in circle_outline.Symbol.SymbolLayers)
{
if (layer is CIMSolidStroke) {
((CIMSolidStroke) layer).Width = 0;
}
}

//Circle fill
var circle_fill = SymbolFactory.Instance.ConstructMarker(172, "ESRI Default Marker") as CIMCharacterMarker;
circle_fill.Size = 30;
//eliminate the outline, make sure the fill is white
foreach (var layer in circle_fill.Symbol.SymbolLayers) {
if (layer is CIMSolidFill) {
((CIMSolidFill)layer).Color = ColorFactory.Instance.WhiteRGB;
}
else if (layer is CIMSolidStroke)
{
((CIMSolidStroke)layer).Width = 0;
}
}

var calloutLayers = new List<CIMSymbolLayer>();
calloutLayers.Add(circle_outline);
calloutLayers.Add(circle_fill);
//set the layers on the callout
callOut.PointSymbol.SymbolLayers = calloutLayers.ToArray();

//set the callout on the text symbol
var textSym = textGraphic.Symbol.Symbol as CIMTextSymbol;
textSym.Callout = callOut;
textSym.Height = 8;//adjust as needed

//now set the text
textGraphic.Text = "12 <SUP><UND>00</UND></SUP>";
annoFeature.SetGraphic(textGraphic);
annoFeature.Store();
context.Invalidate(annoFeature);
}, annoLayer.GetTable());

op.Execute();
}
});
}
}‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Related

Text Annotation displaying problem
Formatting in Add-in Description
Dynamic text renderer
How to access or set Text Symbol from Table Frame ...
Number format in colorizer

Related Tags

arcgis pro sdkarcgis procarcgisprosdkpro sdkarcgisprosdkarcgis pro sdk for .netarcgisarcgis pro sdk 2.5

View All ≫


举报

相关推荐

0 条评论