首页 > 其他分享 >ArcGIS Pro SDK (七)编辑 9 使用草图

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

时间:2024-07-05 15:01:46浏览次数:3  
标签:草图 Pro args vertexOptions ArcGIS var 工具 true SDK

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

文章目录

环境: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 属性为 true
        FireSketchEvents = 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);
}

标签:草图,Pro,args,vertexOptions,ArcGIS,var,工具,true,SDK
From: https://blog.csdn.net/szy13323042191/article/details/140124703

相关文章

  • 基于Kube-Prometheus/v0.13.0的K8S监控部署
    Kube-Prometheus不同版本支持的Kubernetes版本信息如下:kube-prometheusstackKubernetes1.22Kubernetes1.23Kubernetes1.24Kubernetes1.25Kubernetes1.26Kubernetes1.27Kubernetes1.28release-0.10✔✔✗✗xxxrelease-0.11✗✔✔✗xxx......
  • vmware workstation pro 17官方下载
    官网下载地址:https://www.vmware.com/content/vmware/vmware-published-sites/us/products/workstation-player/workstation-player-evaluation.html.html然后,点击下载链接。它会跳转到另一个网站,还不能下载,需要你注册才行。好烦人。 官方把下载搞得这么麻烦干嘛,搞不懂啊。后......
  • DispatcherServlet类关于protected HandlerAdapter getHandlerAdapter解释
    /** *ReturntheHandlerAdapterforthishandlerobject. *@paramhandlerthehandlerobjecttofindanadapterfor *@throwsServletExceptionifnoHandlerAdaptercanbefoundforthehandler.Thisisafatalerror. */ protectedHandlerAdapter......
  • 【VMware vSAN】vSAN Data Protection Part 4:脚本部署。
    之前“vSANDataProtectionPart1:安装部署。”这篇文章介绍了如何通过手动导入OVA模板并部署VMwareSnapshotServiceAppliance设备,还补充了安装过程中对于配置应该注意的一些事项。其实,我们也可以通过脚本自动化部署这一过程,这里使用了VMware工程师WilliamLam的Powe......
  • 结合ArcGIS+SWAT模型+Century模型:流域生态系统水-碳-氮耦合过程模拟教程
    原文链接:结合ArcGIS+SWAT模型+Century模型:流域生态系统水-碳-氮耦合过程模拟教程https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247608293&idx=1&sn=89a9107a2826d99985f9f1db448751ee&chksm=fa826602cdf5ef14a4d3df00b7e7dac464252a4e37a2b2cb52d07725562b4c9aef56......
  • springboot 中推荐使用哪些比较好的 web 客户端 SDK
    在SpringBoot中,有几种常用和推荐的Web客户端SDK,可以用于与RESTful或其他类型的Web服务进行交互。1.SpringWebClientSpringWebClient是Spring5中引入的非阻塞、响应式的Web客户端,推荐用于现代SpringBoot应用。特点响应式编程:支持响应式编程模型,适用于需......
  • Asp .Net Core 系列:基于 Castle DynamicProxy + Autofac 实践 AOP 以及实现事务、用户
    目录什么是AOP?.NetCore中有哪些AOP框架?基于CastleDynamicProxy实现AOPIOC中使用CastleDynamicProxy实现事务管理实现用户自动填充什么是AOP?AOP(Aspect-OrientedProgramming,面向切面编程)是一种编程范式,旨在通过将横切关注点(cross-cuttingconcerns)从主要业务逻辑......
  • 香橙派 AIpro搭建1Panel运维管理面板实现高效直观的设备状态监控
    ......
  • flutter状态管理 provider使用
    provider是flutter官方推荐的状态管理插件,是基于InheritedWidget实现的。下面我们来讲一个provider的使用方法。1.在pubspec.yaml文件中添加provider:^6.1.2开发文档:https://pub-web.flutter-io.cn/packages/provider可以查看使用方法和最新版本号。添加完成后,进行保......
  • 微信SDK与Unity的Addressables发生引用冲突的解决办法
    当我使用Unity的Addressables和微信的minigame-SDK时,会发生一个CS0433的报错,如下图所示: 关于CS0433错误,微软的官方文档中是这么描述的: 因此,根据报错信息,我揣测是Unity的Compat与mscorlib发生了重复,所以将mscorlib.dll文件全部删除了,但是问题没有得到解决,后面在一个大佬的帮......