当前位置: 首页 > news >正文

ArcGIS Pro SDK (七)编辑 13 注解

ArcGIS Pro SDK (七)编辑 13 注解

文章目录

  • ArcGIS Pro SDK (七)编辑 13 注解
    • 1 注释构建工具
    • 2 以编程方式启动编辑批注
    • 3 更新批注文本
    • 4 修改批注形状
    • 5 修改批注文本图形
    • 6 接地到网格

环境: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 的 getAnnoPropertiesAnnotationProperties 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;
http://www.lryc.cn/news/393108.html

相关文章:

  • 模拟面试001-Java开发工程师+简历+问题+回答
  • 微信小程序 ——入门介绍及简单的小程序编写
  • ubuntu20.04安装lio-sam
  • Kafka系列之Kafka知识超强总结
  • 第32讲:K8S集群与Cephfs文件系统集成
  • 服务器数据恢复—DS5300存储raid5阵列数据恢复案例
  • 使用Ubuntu 22.04安装Frappe-Bench【二】
  • MySQL增删改查
  • Java跳出循环的四种方式
  • 直播预告|飞思实验室暑期公益培训7月10日正式开启,报名从速!
  • 3-2 梯度与反向传播
  • 【qt】如何获取本机的IP地址?
  • 芯片的PPA-笔记
  • 2024阿里巴巴全球数学竞赛决赛中的数列题解析(分析与方程方向第4题)
  • 学java的第3天 后端商城小程序工作
  • DevOps实战:使用GitLab+Jenkins+Kubernetes(k8s)建立CI_CD解决方案
  • Apache Seata配置管理原理解析
  • 深入理解C# log4Net日志框架:功能、使用方法与性能优势
  • BDD 100K dataset 的标签数据结构(json文件)
  • AcWing 1550:完全二叉搜索树
  • 使用kali Linux启动盘轻松破解Windows电脑密码
  • Vue2中跨组件共享公共属性的方法、优缺点与实现
  • 2024亚太杯数学建模竞赛(B题)的全面解析
  • 【PWN · ret2syscall | GoPwn】[2024CISCN · 华中赛区]go_note
  • 关于学习方法的优化
  • 万界星空科技MES系统中的排版排产功能
  • kubeadm离线部署kubernetesv1.30.0
  • 【PYG】dataloader和densedataloader
  • 完美解决ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)
  • ForkJoinPool 简介