ArcGIS Pro SDK (七)编辑 13 注解

ArcGIS Pro SDK (七)编辑 13 注解

环境:Visual Studio 2022 + .NET6 + ArcGIS Pro SDK 3.0

1 注释构建工具

// 在您的 config.daml 中设置 categoryRefID
// <tool id="..." categoryRefID="esri_editing_construction_annotation" caption="Create Anno" ...>

// 在构造函数中选择 Sketch 类型 Point 或 Line 或 BezierLine...
internal class AnnoConstructionTool : MapTool
{
    public AnnoConstructionTool()
    {
        IsSketchTool = true;
        UseSnapping = true;
        SketchType = SketchGeometryType.Point;
    }

    protected async override Task<bool> OnSketchCompleteAsync(Geometry geometry)
    {
        if (CurrentTemplate == null || geometry == null)
            return false;

        // 创建编辑操作
        var createOperation = new EditOperation();
        createOperation.Name = string.Format("Create {0}", CurrentTemplate.Layer.Name);
        createOperation.SelectNewFeatures = true;

        var insp = CurrentTemplate.Inspector;
        var result = await QueuedTask.Run(
            () =>
            {
                // 获取注释属性类
                AnnotationProperties annoProperties = insp.GetAnnotationProperties();
                // 设置自定义注释属性
                annoProperties.TextString = "自定义文本";
                annoProperties.Color = ColorFactory.Instance.RedRGB;
                annoProperties.FontSize = 24;
                annoProperties.FontName = "Arial";
                annoProperties.HorizontalAlignment = ArcGIS.Core.CIM.HorizontalAlignment.Right;
                annoProperties.Shape = geometry;
                // 将注释属性分配回检查器
                insp.SetAnnotationProperties(annoProperties);

                // 队列特征创建
                createOperation.Create(CurrentTemplate.Layer, insp);

                // 执行操作
                return createOperation.Execute();
            });
        return result;
    }

2 以编程方式启动编辑批注

var plugin = FrameworkApplication.GetPlugInWrapper("esri_editing_EditVerticesText");
if (plugin.Enabled)
    ((ICommand)plugin).Execute(null);

3 更新批注文本

await QueuedTask.Run(() =>
{
    // annoLayer 是您的注释图层...

    // 使用检查器方法学
    // 在 2.x 版本中 - var insp = new Inspector(true);
    var insp = new Inspector();
    insp.Load(annoLayer, oid);

    // 获取注释属性
    AnnotationProperties annoProperties = insp.GetAnnotationProperties();
    // 设置属性
    annoProperties.TextString = "Hello World";
    // 将注释属性分配回检查器
    insp.SetAnnotationProperties(annoProperties);

    // 创建和执行编辑操作
    EditOperation op = new EditOperation();
    op.Name = "Update annotation";
    op.Modify(insp);
    op.Execute();
});

4 修改批注形状

await QueuedTask.Run(
    () =>
    {
        // 不要使用 'Shape'....Shape 是注释文本的边界框,这不是您想要的...

        // 在 2.x 版本中 - var insp = new Inspector(true);
        var insp = new Inspector();
        insp.Load(annoLayer, oid);

        AnnotationProperties annoProperties = insp.GetAnnotationProperties();
        var shape = annoProperties.Shape;
        if (shape.GeometryType != GeometryType.GeometryBag)
        {
            var newGeometry = GeometryEngine.Instance.Move(shape, 10, 10);
            annoProperties.Shape = newGeometry;
            insp.SetAnnotationProperties(annoProperties);

            EditOperation op = new EditOperation();
            op.Name = "Change annotation angle";
            op.Modify(insp);
            op.Execute();
        }
    });

5 修改批注文本图形

await QueuedTask.Run(
    () =>
    {
        var selection = annoLayer.GetSelection();
        if (selection.GetCount() == 0)
            return;

        // 使用第一个选中的要素
        // 在 2.x 版本中 - var insp = new Inspector(true);
        var insp = new Inspector();
        insp.Load(annoLayer, selection.GetObjectIDs().FirstOrDefault());

        // 如果不是注释要素,则应返回 null 的 getAnnoProperties
        AnnotationProperties annoProperties = insp.GetAnnotationProperties();
        // 获取文本图形
        CIMTextGraphic textGraphic = annoProperties.TextGraphic;

        // 修改文本
        textGraphic.Text = "Hello world";

        // 通过符号设置 x、y 偏移量
        var symbol = textGraphic.Symbol.Symbol;
        var textSymbol = symbol as CIMTextSymbol;
        textSymbol.OffsetX = 2;
        textSymbol.OffsetY = 3;
        textSymbol.HorizontalAlignment = HorizontalAlignment.Center;

        // 加载更新后的文本图形
        annoProperties.LoadFromTextGraphic(textGraphic);
        // 将注释属性分配回去
        insp.SetAnnotationProperties(annoProperties);

        EditOperation op = new EditOperation();
        op.Name = "modify symbol";
        op.Modify(insp);
        bool result = op.Execute();
    });

6 接地到网格

CIMGroundToGridCorrection correction = null;
bool isCorecting = correction.IsCorrecting();   // 等同于 correction != null && correction.Enabled;
bool UsingOffset = correction.UsingDirectionOffset();   // 等同于 correction.IsCorrecting() && correction.UseDirection;
double dOffset = correction.GetDirectionOffset(); // 等同于 correction.UsingDirectionOffset() ? correction.Direction : DefaultDirectionOffset;
bool usingDistanceFactor = correction.UsingDistanceFactor();  // 等同于 correction.IsCorrecting() && correction.UseScale;
bool usingElevation = correction.UsingElevationMode(); // 等同于 correction.UsingDistanceFactor() && c.ScaleType == GroundToGridScaleType.ComputeUsingElevation;
bool usingSFactor = correction.UsingConstantScaleFactor();  //; 等同于 correction.UsingDistanceFactor() && correction.ScaleType == GroundToGridScaleType.ConstantFactor;
double dSFactor = correction.GetConstantScaleFactor(); // 等同于 correction.UsingDistanceFactor() ? correction.ConstantScaleFactor : DefaultConstantScaleFactor;
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ArcGIS Pro SDK是用于创建ArcGIS Pro加载项的开发工具包。您可以使用ArcGIS Pro SDK来扩展ArcGIS Pro的功能,添加自定义工具、面板、任务和其他功能。\[1\] 要安装ArcGIS Pro SDK 3.0,您需要使用Visual Studio 2022,并从Visual Studio Marketplace搜索并安装以下三个扩展:ArcGIS Pro SDK for .NET,ArcGIS Pro SDK for .NET(Utilities),ArcGIS Pro SDK for .NET(Migration)\[1\]。请注意,ArcGIS Pro SDK for .NET扩展只能集成到Visual Studio 2022中,建议使用版本17.2或更高版本\[2\]。 ArcGIS Pro SDK for .NET提供了三个不同的扩展名(.vsix文件):ArcGIS Pro SDK for .NET用于创建ArcGIS Pro加载项的工程和项模板的集合,ArcGIS Pro SDK for .NET(Utilities)用于帮助创建ArcGIS Pro加载项的实用程序的集合,ArcGIS Pro SDK for .NET(Migration)用于将ArcGIS Pro SDK 2.x扩展模块迁移到ArcGIS Pro SDK 3.0 for .NET\[3\]。 总结来说,ArcGIS Pro SDK是用于创建ArcGIS Pro加载项的开发工具包,您可以使用它来扩展ArcGIS Pro的功能。要安装ArcGIS Pro SDK 3.0,您需要使用Visual Studio 2022,并从Visual Studio Marketplace安装相应的扩展。 #### 引用[.reference_title] - *1* *2* *3* [VS2022中ArcGIS Pro SDK for .NET安装和卸载指南](https://blog.csdn.net/u012685544/article/details/126317090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WineMonk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值