ArcGIS Pro SDK (四)框架 2

2024-06-18 14:52
文章标签 arcgis pro sdk 框架

本文主要是介绍ArcGIS Pro SDK (四)框架 2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ArcGIS Pro SDK 框架 2

目录

  • ArcGIS Pro SDK 框架 2
    • 18 访问当前主题
    • 19 显示Pro消息框
    • 20 添加吐司通知
    • 21 更改按钮标题或图像
    • 22 获取按钮的工具提示标题
    • 23 订阅活动工具更改事件
    • 24 进度器 - 简单且不可取消
    • 25 进度器 - 可取消
    • 26 自定义按钮或工具的 disabedText 属性
    • 27 从当前程序集获取图像资源
    • 28 阻止 ArcGIS Pro 关闭
    • 29 如何在 MapView 中定位可嵌入控件
    • 30 激活选项卡时命令搜索中建议的命令选项。
    • 31 从命令行启动 ArcGIS Pro
    • 32 获取命令行参数
    • 33 应用程序加速器(快捷键)
    • 34 使用专业样式在 DAML 中定义控件

18 访问当前主题

// 获取应用程序的主题
var theme = FrameworkApplication.ApplicationTheme;
// 主题
if (FrameworkApplication.ApplicationTheme == ApplicationTheme.Dark)
{// 黑暗主题
}if (FrameworkApplication.ApplicationTheme == ApplicationTheme.HighContrast)
{// 高对比度
}
if (FrameworkApplication.ApplicationTheme == ApplicationTheme.Default)
{// 明亮/默认主题
}

19 显示Pro消息框

ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Some Message", "Some title", MessageBoxButton.YesNo, MessageBoxImage.Information, MessageBoxResult.Yes);

20 添加吐司通知

Notification notification = new Notification();
notification.Title = FrameworkApplication.Title;
notification.Message = "Notification 1";
notification.ImageUrl = @"pack://application:,,,/ArcGIS.Desktop.Resources;component/Images/ToastLicensing32.png";ArcGIS.Desktop.Framework.FrameworkApplication.AddNotification(notification);

21 更改按钮标题或图像

private void ChangeCaptionImage()
{IPlugInWrapper wrapper = FrameworkApplication.GetPlugInWrapper("MyAddin_MyCustomButton");if (wrapper != null){wrapper.Caption = "new caption";// 确保T-Rex16和T-Rex32包含在你的插件中的images文件夹下,并设置生成`操作 = 资源`和`复制到输出目录 = 不复制`wrapper.SmallImage = BuildImage("T-Rex16.png");wrapper.LargeImage = BuildImage("T-Rex32.png");}
}private ImageSource BuildImage(string imageName)
{return new BitmapImage(PackUriForResource(imageName));
}private Uri PackUriForResource(string resourceName)
{string asm = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().Location);return new Uri(string.Format("pack://application:,,,/{0};component/Images/{1}", asm, resourceName), UriKind.Absolute);
}

22 获取按钮的工具提示标题

// 传入按钮的daml id。或者传入任何Pro按钮ID。
IPlugInWrapper wrapper = FrameworkApplication.GetPlugInWrapper("button_id_from daml");
var buttonTooltipHeading = wrapper.TooltipHeading;

23 订阅活动工具更改事件

private void SubscribeEvent()
{ArcGIS.Desktop.Framework.Events.ActiveToolChangedEvent.Subscribe(OnActiveToolChanged);
}
private void UnSubscribeEvent()
{ArcGIS.Desktop.Framework.Events.ActiveToolChangedEvent.Unsubscribe(OnActiveToolChanged);
}
private void OnActiveToolChanged(ArcGIS.Desktop.Framework.Events.ToolEventArgs args)
{string prevTool = args.PreviousID;string newTool = args.CurrentID;
}

24 进度器 - 简单且不可取消

public async Task Progressor_NonCancelable()
{ArcGIS.Desktop.Framework.Threading.Tasks.ProgressorSource ps = new ArcGIS.Desktop.Framework.Threading.Tasks.ProgressorSource("Doing my thing...", false);int numSecondsDelay = 5;// 如果您在调试器中运行此程序,则不会看到对话框await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() => Task.Delay(numSecondsDelay * 1000).Wait(), ps.Progressor);
}

25 进度器 - 可取消

public async Task Progressor_Cancelable()
{ArcGIS.Desktop.Framework.Threading.Tasks.CancelableProgressorSource cps =new ArcGIS.Desktop.Framework.Threading.Tasks.CancelableProgressorSource("Doing my thing - cancelable", "Canceled");int numSecondsDelay = 5;// 如果您在调试器中运行此程序,则不会看到对话框// 模拟做一些可以取消的工作await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>{cps.Progressor.Max = (uint)numSecondsDelay;// 每秒钟检查一次while (!cps.Progressor.CancellationToken.IsCancellationRequested){cps.Progressor.Value += 1;cps.Progressor.Status = "Status " + cps.Progressor.Value;cps.Progressor.Message = "Message " + cps.Progressor.Value;if (System.Diagnostics.Debugger.IsAttached){System.Diagnostics.Debug.WriteLine(string.Format("RunCancelableProgress Loop{0}", cps.Progressor.Value));}if (cps.Progressor.Value == cps.Progressor.Max) break;// 阻塞一秒钟Task.Delay(1000).Wait();}System.Diagnostics.Debug.WriteLine(string.Format("RunCancelableProgress: Canceled {0}",cps.Progressor.CancellationToken.IsCancellationRequested));}, cps.Progressor);
}

26 自定义按钮或工具的 disabedText 属性

// 在config.daml中将工具的loadOnClick属性设置为“false”。
// 这将允许在Pro启动时创建工具,以便disabledText属性可以在启动时显示自定义文本。
// 从工具中删除“condition”属性。使用下面的OnUpdate方法设置工具的启用/禁用状态。
// 添加OnUpdate方法到工具中。
// 注意:由于OnUpdate调用非常频繁,您应该避免在此方法中进行冗长的操作
// 因为这将降低应用程序用户界面的响应性。
internal class SnippetButton : ArcGIS.Desktop.Framework.Contracts.Button
{protected override void OnUpdate(){bool enableSate = true; //TODO: 编写你的启用状态bool criteria = true;  //TODO: 评估disabledText的标准if (enableSate){this.Enabled = true;  // 工具已启用}else{this.Enabled = false;  // 工具已禁用// 在这里自定义你的disabledTextif (criteria)this.DisabledTooltip = "Missing criteria 1";}}
}

27 从当前程序集获取图像资源

public static void ExampleUsage()
{// 图片` Dino32.png `,并设置生成`操作 = 资源`和`复制到输出目录 = 不复制`var img = ForImage("Dino32.png");// 使用图片…
}public static BitmapImage ForImage(string imageName)
{return new BitmapImage(PackUriForResource(imageName));
}
public static Uri PackUriForResource(string resourceName, string folderName = "Images")
{string asm = System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetExecutingAssembly().Location);string uriString = folderName.Length > 0? string.Format("pack://application:,,,/{0};component/{1}/{2}", asm, folderName, resourceName): string.Format("pack://application:,,,/{0};component/{1}", asm, resourceName);return new Uri(uriString, UriKind.Absolute);
}

28 阻止 ArcGIS Pro 关闭

// 有两种方法可以防止ArcGIS Pro关闭
// 1. 覆盖加载项模块上的CanUnload方法并返回false。
// 2. 订阅ApplicationClosing事件,并在收到它时取消该事件internal class Module1 : Module
{// 在ArcGIS Pro关闭时被框架调用protected override bool CanUnload(){// 返回false 取消应用程序关闭return false;}internal class Module2 : Module{public Module2(){ArcGIS.Desktop.Framework.Events.ApplicationClosingEvent.Subscribe(OnApplicationClosing);}~Module2(){ArcGIS.Desktop.Framework.Events.ApplicationClosingEvent.Unsubscribe(OnApplicationClosing);}private Task OnApplicationClosing(System.ComponentModel.CancelEventArgs args){args.Cancel = true;return Task.FromResult(0);}// cref: ARCGIS.DESKTOP.CORE.EVENTS.PROJECTOPENEDEVENT// cref: ARCGIS.DESKTOP.CORE.EVENTS.PROJECTOPENEDEVENT.SUBSCRIBE// cref: ARCGIS.DESKTOP.CORE.EVENTS.PROJECTOPENEDEVENT.UNSUBSCRIBE// cref: ARCGIS.DESKTOP.FRAMEWORK.CONTRACTS.MODULE.INITIALIZE// cref: ARCGIS.DESKTOP.FRAMEWORK.CONTRACTS.MODULE.UNINITIALIZE#region 如何确定项目何时打开protected override bool Initialize() // 在模块初始化时调用。{ProjectOpenedEvent.Subscribe(OnProjectOpened); // 订阅项目打开事件return base.Initialize();}private void OnProjectOpened(ProjectEventArgs obj) // 项目打开事件处理程序{MessageBox.Show($"{Project.Current} has opened"); // 显示您的消息框}protected override void Uninitialize() // 取消订阅项目打开的事件{ProjectOpenedEvent.Unsubscribe(OnProjectOpened); // 取消订阅return;}

29 如何在 MapView 中定位可嵌入控件

public ProSnippetMapTool()
{// 在构造函数中将MapTool基类的OverlayControlID设置为可嵌入控件的DAML idthis.OverlayControlID = "ProAppModule1_EmbeddableControl1";
}protected override void OnToolMouseDown(MapViewMouseButtonEventArgs e)
{if (e.ChangedButton == System.Windows.Input.MouseButton.Left)e.Handled = true;
}protected override Task HandleMouseDownAsync(MapViewMouseButtonEventArgs e)
{return QueuedTask.Run(() =>{// 将屏幕坐标点分配给MapTool基类的OverlayControlLocation属性。this.OverlayControlPositionRatio = e.ClientPoint;});
}

30 激活选项卡时命令搜索中建议的命令选项。

//在 module class..
public override string[] GetSuggestedCMDIDs(string activeTabID)
{//返回您希望成为(建议)的daml id的静态列表//默认值与给定选项卡相关。它可以是none、some或all of//与activeTabID相关的命令。//在这个例子中,有两个选项卡。这个例子是任意的//标识每个选项卡上只有一个命令作为默认显示在//命令搜索列表(when _that_ particular tab is active)switch (activeTabID){case "CommandSearch_Example_Tab1":return new string[] { "CommandSearch_Example_Button2" };case "CommandSearch_Example_Tab2":return new string[] { "CommandSearch_Example_Button4" };}return new string[] { "" };
}

31 从命令行启动 ArcGIS Pro

C:\>"C:\Program Files\ArcGIS Pro\bin\ArcGISPro.exe"

32 获取命令行参数

如果您的外接程序需要使用自定义命令行参数,则参数的格式必须为“/argument” - 请注意正斜杠“/”。不能有空格。如果命令行包含要打开的项目(请参阅从命令行打开项目),则必须将自定义参数或开关放在项目文件名参数之前。

string[] args = System.Environment.GetCommandLineArgs();
foreach (var arg in args)
{// 寻找你的命令行开关
}

33 应用程序加速器(快捷键)

可以使用加速器/插入加速器 DAML 元素将应用程序加速器添加到外接程序 config.daml 中,该元素具有要与加速器关联的元素的 refID(即快捷方式)。

<accelerators><insertAccelerator refID="esri_core_openProjectButton" flags="Ctrl" key="O" /><insertAccelerator refID="esri_core_redoButton" flags="Ctrl" key="Y" /><insertAccelerator refID="esri_core_undoButton" flags="Ctrl" key="Z" />
</accelerators>

注意:使用 updateModule 元素中的 deleteAccelerator 和 updateAccelerator DAML 元素分别删除或更改应用程序加速器。 标志可以是以下之一:Shift、Ctrl、Alt、Ctrl+Shift、Alt+Shift、Ctrl+Alt、Ctrl+Alt+Shift

34 使用专业样式在 DAML 中定义控件

定义了许多 ArcGIS Pro 样式,这些样式可应用于窗格和停靠窗格上的按钮、标注和其他控件,以使加载项的外观与 ArcGIS Pro 无缝衔接。下面列出了一些最常见的样式。有关更多样式和颜色,请参阅社区示例存储库中的使用 ArcGIS Pro 设置样式示例。

按钮样式

<Button Content="Button" Style="{StaticResource Esri_SimpleButton}" ToolTip="Button">
<Button Content="Button" Style="{StaticResource Esri_BackButton}" ToolTip="Button">
<Button Content="Button" Style="{StaticResource Esri_BackButtonSmall}" ToolTip="Button">
<Button Content="Button" Style="{StaticResource Esri_CloseButton}" ToolTip="Button">

码头窗格标题样式

<TextBlock Text="MyDockPane" Style="{StaticResource DockPaneHeading}" VerticalAlignment="Center" HorizontalAlignment="Center"/>

这篇关于ArcGIS Pro SDK (四)框架 2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072305

相关文章

[分布式网络通讯框架]----Zookeeper客户端基本操作----ls、get、create、set、delete

Zookeeper数据结构 zk客户端常用命令 进入客户端 在bin目录下输入./zkCli.sh 查看根目录下数据ls / 注意:要查看哪一个节点,必须把路径写全 查看节点数据信息 get /第一行代码数据,没有的话表示没有数据 创建节点create /sl 20 /sl为节点的路径,20为节点的数据 注意,不能跨越创建,也就是说,创建sl2的时候,必须确保sl

【服务器08】之【游戏框架】之【加载主角】

首先简单了解一下帧率 FixedUpdate( )   >   Update( )   >   LateUpdate( ) 首先FixedUpdate的设置值 默认一秒运行50次 虽然默认是0.02秒,但FiexedUpdate并不是真的0.02秒调用一次,因为在脚本的生命周期内,FixedUpdate有一个小循环,这个循环也是通过物理时间累计看是不是大于0.02了,然后调用一次。有

Java中的集合框架使用技巧

Java中的集合框架使用技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中集合框架的使用技巧,这些技巧能够帮助我们更高效地处理数据和优化程序性能。 Java集合框架概述 Java集合框架提供了一组实现了各种集合接口的类和接口,用于存储和操作数据。它包括列表、集合、队列和映射等数据结构,能够满足不

[分布式网络通讯框架]----ZooKeeper下载以及Linux环境下安装与单机模式部署(附带每一步截图)

首先进入apache官网 点击中间的see all Projects->Project List菜单项进入页面 找到zookeeper,进入 在Zookeeper主页的顶部点击菜单Project->Releases,进入Zookeeper发布版本信息页面,如下图: 找到需要下载的版本 进行下载既可,这里我已经下载过3.4.10,所以以下使用3.4.10进行演示其他的步骤。

C# 日志框架Serilog使用

1、框架和说明        C#日志框架Serilog支持多种场景输出,简单验证了一下,比较方便        包的安装,推荐直接使用“推荐NuGet包管理器”安装Serilog.AspNetCore,常见的组件都已经集成在一个包中,使用比较方便 2、配置文件        Serilog可以由配置文件来定义行为,而且配置文件的修改即时生效。参考配置文件如下: {"Serilog":

Pytest和Unitest框架对比

在学到自动化的时候,很多同学都遇到了Pytest和Unitest框架,有的人是两个都学,但是学的不精只是知道分别怎么用.不了解两个区别是什么.有的是犹豫到底要学习那个框架.其实要做好自动化测试,是有必要了解不同框架之间的差异化的. Pytest 特点: Pytest采用了更简洁、更灵活的语法风格,使用“assert”语句来进行断言,Pytest可以自动发现并执行以“test_”开头的函数

mysql-mmm框架2

简介 MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程

MySQL-MMM框架

一、环境简述 1、工作逻辑图 2、MySQL-MMM优缺点 优点:高可用性,扩展性好,出现故障自动切换,对于主主同步,在同一时间只提供一台数据库写操作,保证的数据的一致性。 缺点:Monitor节点是单点,可以结合Keepalived实现高可用。 3、MySQL-MMM工作原理 MMM(Master-Master replication managerfor Mys

基于LangChain框架搭建知识库

基于LangChain框架搭建知识库 说明流程1.数据加载2.数据清洗3.数据切分4.获取向量5.向量库保存到本地6.向量搜索7.汇总调用 说明 本文使用openai提供的embedding模型作为框架基础模型,知识库的搭建目的就是为了让大模型减少幻觉出现,实现起来也很简单,假如你要做一个大模型的客服问答系统,那么就把历史客服问答数据整理好,先做数据处理,在做数据向量化,最后保

简单 使用 的makefile编写 框架

1、指定编译器,如海思平台:CROSS_COMPILE=arm-hisiv100nptl-linux-; 2、指定编译工具:GCC=$(CROSS_COMPILE)gcc   CC=$(CROSS_COMPILE)g++; 3、使用 export 导出 子makefile 要用的变量; 4、定义变量的形式  指定 工程源文件 需要使用到的 “宏”,在后面的 LDFLAGS 里面使用 -D将其