ArcGIS Pro SDK (七)编辑 9 使用草图

ArcGIS Pro SDK (七)编辑 9 使用草图

文章目录

  • ArcGIS Pro SDK (七)编辑 9 使用草图
    • 1 切换草图选择模式
    • 2 聆听草图修改事件
    • 3 收听草图完成前事件并修改草图
    • 4 收听草图完成事件
    • 5 触发草图事件的自定义构造工具
    • 6 自定义自定义草图工具的草图符号

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

1 切换草图选择模式

//UseSelection = true; (UseSelection 必须在工具构造函数或工具激活中设置为 true)
private bool _inSelMode = false;public bool IsShiftKey(MapViewKeyEventArgs k)
{return (k.Key == System.Windows.Input.Key.LeftShift ||k.Key == System.Windows.Input.Key.RightShift);
}protected override async void OnToolKeyDown(MapViewKeyEventArgs k)
{//使用自定义键切换草图选择模式if (k.Key == System.Windows.Input.Key.W){if (!_inSelMode){k.Handled = true;// 切换工具到选择模式。// 如果 UseSelection = true 则保存草图;if (await ActivateSelectAsync(true))_inSelMode = true;}}else if (!_inSelMode){// 禁用 Shift 在基类中的效果。// 将键事件标记为已处理以防止进一步处理k.Handled = IsShiftKey(k);}
}protected override void OnToolKeyUp(MapViewKeyEventArgs k)
{if (k.Key == System.Windows.Input.Key.W){if (_inSelMode){_inSelMode = false;k.Handled = true; //处理这个// 切换回草图模式。如果 UseSelection = true// 草图将被恢复ActivateSelectAsync(false);}}else if (_inSelMode){// 禁用 Shift 在基类中的效果。// 将键事件标记为已处理以防止进一步处理k.Handled = IsShiftKey(k);}
}

2 聆听草图修改事件

// SketchModified 事件由以下工具触发:
//  - COTS 构造工具(除注释、尺寸几何类型外), 
//  - 编辑顶点、重塑、对齐要素
//  - 触发 FireSketchEvents = true 的第三方工具//订阅草图修改事件
//ArcGIS.Desktop.Mapping.Events.SketchModifiedEvent.Subscribe(OnSketchModified);private void OnSketchModified(ArcGIS.Desktop.Mapping.Events.SketchModifiedEventArgs args)
{// 如果不是撤销操作if (!args.IsUndo){// 修改前的草图是什么?var prevSketch = args.PreviousSketch;// 当前的草图是什么?var currentSketch = args.CurrentSketch;if (currentSketch is Polyline polyline){// 检查线段草图中的当前(最后)顶点var lastSketchPoint = polyline.Points.Last();// 对最后一个点进行一些操作}}
}

3 收听草图完成前事件并修改草图

// BeforeSketchCompleted 事件由以下工具触发:
//  - COTS 构造工具(除注释、尺寸几何类型外), 
//  - 编辑顶点、重塑、对齐要素
//  - 触发 FireSketchEvents = true 的第三方工具//订阅草图完成前事件
//ArcGIS.Desktop.Mapping.Events.BeforeSketchCompletedEvent.Subscribe(OnBeforeSketchCompleted);private Task OnBeforeSketchCompleted(BeforeSketchCompletedEventArgs args)
{// 从默认表面分配草图 Z 值并设置草图几何var modifiedSketch = args.MapView.Map.GetZsFromSurfaceAsync(args.Sketch).Result;args.SetSketchGeometry(modifiedSketch.Geometry);return Task.CompletedTask;
}

4 收听草图完成事件

// SketchCompleted 事件由以下工具触发:
//  - COTS 构造工具(除注释、尺寸几何类型外), 
//  - 编辑顶点、重塑、对齐要素
//  - 触发 FireSketchEvents = true 的第三方工具//订阅草图完成事件
//ArcGIS.Desktop.Mapping.Events.SketchCompletedEvent.Subscribe(OnSketchCompleted);private void OnSketchCompleted(SketchCompletedEventArgs args)
{// 获取草图var finalSketch = args.Sketch;// 对草图进行一些操作 - 例如审计跟踪
}

5 触发草图事件的自定义构造工具

internal class ConstructionTool1 : MapTool
{public ConstructionTool1(){IsSketchTool = true;UseSnapping = true;// 选择要实现的构造工具类型。  // 确保工具在 daml 中正确注册到正确的组件类别类型SketchType = SketchGeometryType.Line;// 获取或设置草图是否用于创建要素并应使用 CurrentTemplate。UsesCurrentTemplate = true;// 设置 FireSketchEvents 属性为 trueFireSketchEvents = true;}//  ...
}

6 自定义自定义草图工具的草图符号

//自定义工具可以更改在绘制新要素时使用的符号。
//可以使用正确的设置方法修改草图段符号和顶点符号。
//这在工具的激活方法中设置。
protected override Task OnToolActivateAsync(bool active)
{QueuedTask.Run(() =>{// 获取当前的草图段符号选项var segmentOptions = GetSketchSegmentSymbolOptions();// 修改段符号选项的主颜色和次颜色以及宽度var deepPurple = new CIMRGBColor();deepPurple.R = 75;deepPurple.G = 0;deepPurple.B = 110;segmentOptions.PrimaryColor = deepPurple;segmentOptions.Width = 4;segmentOptions.HasSecondaryColor = true;var pink = new CIMRGBColor();pink.R = 219;pink.G = 48;pink.B = 130;segmentOptions.SecondaryColor = pink;// 创建一个新的顶点符号选项实例,并使用你想要的值var vertexOptions = new VertexSymbolOptions(VertexSymbolType.RegularUnselected);var yellow = new CIMRGBColor();yellow.R = 255;yellow.G = 215;yellow.B = 0;var purple = new CIMRGBColor();purple.R = 148;purple.G = 0;purple.B = 211;vertexOptions.AngleRotation = 45;vertexOptions.Color = yellow;vertexOptions.MarkerType = VertexMarkerType.Star;vertexOptions.OutlineColor = purple;vertexOptions.OutlineWidth = 3;vertexOptions.Size = 5;// 设置草图段符号选项的值SetSketchSegmentSymbolOptions(segmentOptions);// 使用上面创建的 vertexOptions 实例设置常规未选中顶点的顶点符号选项的值。SetSketchVertexSymbolOptions(VertexSymbolType.RegularUnselected, vertexOptions);});return base.OnToolActivateAsync(active);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch添加自定义算子之(10)-mmdeploy编译流程

整体参考 一、mmcv的编译安装 见上一篇 opencv的安装 $env:OpenCV_DIR = "D:\git_clone\opencv\build" # 我这里下载解压之后的地址 $env:path = "$env:OpenCV_DIR\x64\vc15\bin;" + $env:path $env:path = "D:\git_clone\opencv\build\OpenCVConf…

后仿真中《SDF反标必懂连载篇》之 多个SDF 文件反标疑问

设计经过综合之后会生成门级网表,在门级网表里面包含了时序信息,这时的验证称之为后仿,除了验证功能是否满足,还要验证时序是否有违例的情况。 门级网表又分为,pr前和pr后,后端做完布局布线之后的,修改好timing的网表称为带时序的pr网表,pr网表进行仿真时,后端布局布…

嵌入式UI开发-lvgl+wsl2+vscode系列:8、控件(Widgets)(一)

一、前言 这里将介绍一系列控件,了解后就可以开始基础的开发了。 二、示例 1、Base Obj(基础对象) 1.1、示例1 #include "../../lv_examples.h" #if LV_BUILD_EXAMPLESvoid lv_example_obj_1(void) {lv_obj_t * obj1;obj1 lv…

Python容器 之 列表--列表的常用操作方法

1.查询相关方法:index()、count() (1)index() 说明: 和 字符串中的 find() 的作用是一样 列表中是没有 find() 方法的, 只有 index() 方法;字符串中 同时存在 find() 和 index() 方法 格式:列表.index(要查…

Linux时间子系统8:clock_event_device

1、前言 上一篇我们谈到了timer,在详细分析hrtimer的实现之前,我们先追根溯源来谈一下clockevent。先抛开clockevent这个概念,如果硬件要支持定时功能,那么硬件必然要能够支持产生定时时间,通过异步中断的方式通知CPU&…

计算机科学中的接口(Interface)介绍

计算机科学中的接口(Interface)介绍 计算机科学中,接口是一个广泛的概念,在不同上下文中有不同含义: 1.任何两电路或设备间的连接电路,用于连接CPU与内存、CPU与外设之间。这是一个重要的硬件层面的接口概…

你必须要知道的自闭症知识,推荐收藏

自闭症,一种日益受到关注的神经发育障碍,对于许多人来说,仍充满了神秘和误解。以下是 12 个你必须知道的关于自闭症的重要知识点: 1、自闭症并非心理问题 自闭症是一种生理上的神经发育障碍,不是由于孩…

Linux: security: openssh: ssh 登陆变慢又一例;strace的使用

文章目录 问题分析解决问题 今天遇到一个问题,ssh登陆服务器比平时慢了20秒。 分析 这种问题的分析,首先要靠strace,trace sshd的服务进程,看看有没有卡在某个系统调用上。 确实抓到了慢的原因;这里sshd向169.254.195.0:1812 发送了一个消息,然后接下来使用select,等…

亚马逊TM商标跟卖,同行截流采集,人工手动跟卖选品更方便!

区分TM标,软件自动查询,人工手动查询方便。 大家好,跟大家说下如何区分TM标。 选择相对于的站点,选择TM。 软件采集出来的已备案、未备案TMR标,现在点击TM标就会跳到美国商标局。 可以清晰的看到这个地方只有一个序…

张颂文百花提名,男配界笑出“颂”彩

在这个星光熠熠的百花奖舞台上, 张颂文老师犹如一坛陈年老酒,越品越有味, 竟不声不响地提名了最佳男配角!这下可好, 男配界仿佛一夜之间被“颂”风吹得花枝乱颤,笑料百出。你说张颂文老师这演技&#xf…

DreamTech联合南大和牛津发布最强3D内容生成大模型——Direct3D

文章链接:https://arxiv.org/pdf/2405.14832 github链接:https://nju-3dv.github.io/projects/Direct3D/ 从文本和图像生成高质量的3D资产一直是一项挑战,主要是由于缺乏能够捕捉复杂几何分布的可扩展3D表示。在这项工作中,介绍…

详解反向传播(BP)算法

文章目录 what(是什么)where(用在哪)How(原理&&怎么用)原理以及推导过程pytorch中的反向传播 what(是什么) 反向传播算法(Backpropagation)是一种用于…

自动驾驶水泥搅拌车在梁场的应用(下)

自动驾驶水泥搅拌车在梁场的应用(下) 北京渡众机器人科技有限公司的自动驾驶水泥搅拌车在梁场(也称为预制梁场)的应用可以带来多方面的优势和效益: 1. 自动化搅拌和运输 在梁场中,通常需要大量的混凝土搅…

自动化一些操作

下拉选择框 from selenium import webdriver from time import sleep # 导包 from selenium.webdriver.support.select import Select driver webdriver.Edge() driver.get(r"D:\WORK\ww\web自动化_day01_课件笔记资料代码\web自动化_day01_课件笔记资料代码\02_其他资料…

调试支付分回调下载平台证书

之前的原生代码放到webman里面,死活跑不通 没办法,只能用esayWeChat6.7 (自行下载) 它里面配置要用到平台证书 平台证书又要用到 composer require wechatpay/wechatpay 但是请求接口之前,你先要用到一个临时的平台…

配置atuin记录

https://atuin.sh/ 运行 curl --proto https --tlsv1.2 -LsSf https://setup.atuin.sh | sh报错 $ curl --proto https --tlsv1.2 -LsSf https://setup.atuin.sh | sh curl: (77) error setting certificate verify locations:CAfile: /etc/ssl/certs/ca-certificates.crtCAp…

同时安装JDK8和JDK17+环境变量默认无法修改

一、问题描述 当在windows系统中,同时安装JDK8和JDK17,环境变量默认就为jdk17,且从jdk17切换为jdk8后不生效,使用"java -version"命令查看后还是17版本。 解决方法 首先,产生的原因是,在安装…

2024最新源代码加密软件丨五款企业级软件评测

程序源代码作为企业的核心成果,一旦泄密将产生重大的损失,加密源代码至关重要。 可以防止他人未经授权使用、复制或修改源代码,保护开发者的劳动成果。 可以防止源代码被黑客或竞争对手获取和分析,减少漏洞被发现和利用的风险。…

通过MATLAB控制TI毫米波雷达的工作状态之实时数据采集

前言 前一章博主介绍了如何基于MATLAB的各种前面板组件结合MATLAB代码来发送CFG指令控制毫米波雷达的工作状态,这一章节博主将介绍如何基于这些组件结合MATLAB代码来实现TI毫米波雷达数据的实时采集。目前大部分TI毫米波雷达的数据采集均是仅可以采集一段数据又或者利用DAC10…

JAVA极简图书管理系统,初识springboot后端项目

前提条件: 具备基础的springboot 知识 Java基础 废话不多说! 创建项目 配置所需环境 将application.properties>application.yml 配置以下环境 数据库连接MySQL 自己创建的数据库名称为book_test server:port: 8080 spring:datasource:url:…