首页 > 其他分享 >ArcGIS Pro SDK (四)框架 1

ArcGIS Pro SDK (四)框架 1

时间:2024-06-18 09:32:22浏览次数:14  
标签:info FrameworkApplication Pro AppendLine ArcGIS pane sb 窗格 SDK

ArcGIS Pro SDK 框架 1

目录

1 如何在停靠窗格可见或隐藏时订阅和取消订阅事件

private SubscriptionToken _eventToken = null;
// 当DockPane的可见性改变时调用
protected override void OnShow(bool isVisible)
{
  if (isVisible && _eventToken == null) // 当dockpane可见时订阅事件
  {
    _eventToken = MapSelectionChangedEvent.Subscribe(OnMapSelectionChangedEvent);
  }

  if (!isVisible && _eventToken != null) // 当dockpane关闭时取消订阅
  {
    MapSelectionChangedEvent.Unsubscribe(_eventToken);
    _eventToken = null;
  }
}
// MapSelection事件触发时的事件处理程序
private void OnMapSelectionChangedEvent(MapSelectionChangedEventArgs obj)
{
  MessageBox.Show("选择发生了变化");
}

2 执行命令

IPlugInWrapper wrapper = FrameworkApplication.GetPlugInWrapper("esri_editing_ShowAttributes");
var command = wrapper as ICommand; // 工具和命令(按钮)支持此功能

if ((command != null) && command.CanExecute(null))
  command.Execute(null);

3 设置当前工具

// 使用 SetCurrentToolAsync
FrameworkApplication.SetCurrentToolAsync("esri_mapping_selectByRectangleTool");

// 或使用 ICommand.Execute
ICommand cmd = FrameworkApplication.GetPlugInWrapper("esri_mapping_selectByRectangleTool") as ICommand;
if ((cmd != null) && cmd.CanExecute(null))
  cmd.Execute(null);

4 激活选项卡

FrameworkApplication.ActivateTab("esri_mapping_insertTab");

5 激活/停用状态 - 修改条件

// 根据状态在DAML文件中定义条件
if (activate)
  FrameworkApplication.State.Activate("someState");
else
  FrameworkApplication.State.Deactivate("someState");

6 确定应用程序是否繁忙

// 如果一个任务当前正在主工作线程上运行,或者任何窗格或停靠窗格报告它正在繁忙或正在初始化,则认为该应用程序繁忙。

// 许多Pro的样式(如Esri_SimpleButton)确保在框架应用程序时禁用按钮。IsBusy为true
// 您可以使用此属性绑定到dockpane或窗格上控件(例如listbox)的IsEnabled属性,以便在应用程序繁忙时禁用它。
bool isbusy = FrameworkApplication.IsBusy;

7 获取应用程序主窗口

System.Windows.Window window = FrameworkApplication.Current.MainWindow;

Rect rect = System.Windows.SystemParameters.WorkArea;
FrameworkApplication.Current.MainWindow.Left = rect.Left + (rect.Width - FrameworkApplication.Current.MainWindow.ActualWidth) / 2;
FrameworkApplication.Current.MainWindow.Top = rect.Top + (rect.Height - FrameworkApplication.Current.MainWindow.ActualHeight) / 2;

8 关闭 ArcGIS Pro

FrameworkApplication.Close();

9 获取 ArcGIS 专业版

// “GetEntryAssembly”应该是ArcGISPro.exe
string version = System.Reflection.Assembly.GetEntryAssembly()
                                       .GetName().Version.ToString();

10 关闭特定窗格

string _viewPaneID = "my pane"; // pane 的 DAML ID
                                // 窗格可以有多个实例(InstanceIDs)。
                                // 因此,您可以遍历窗格以只获取“您的”窗格
IList<uint> myPaneInstanceIDs = new List<uint>();
foreach (Pane pane in FrameworkApplication.Panes)
{
  if (pane.ContentID == _viewPaneID)
  {
    myPaneInstanceIDs.Add(pane.InstanceID); // pane的InstanceID,可以是多个,所以构建集合       
  }
}
foreach (var instanceID in myPaneInstanceIDs) // 关闭每个“你的”窗格。
{
  FrameworkApplication.Panes.ClosePane(instanceID);
}

11 激活窗格

var mapPanes = ProApp.Panes.OfType<IMapPane>();
foreach (Pane pane in mapPanes)
{
  if (pane.Caption == "MyMap")
  {
    pane.Activate();
    break;
  }
}

12 获取有关当前安装的加载项的信息

var addin_infos = FrameworkApplication.GetAddInInfos();
StringBuilder sb = new StringBuilder();

foreach (var info in addin_infos)
{
  if (info == null)
    break;

  sb.AppendLine($"Addin: {info.Name}");
  sb.AppendLine($"Description {info.Description}");
  sb.AppendLine($"ImagePath {info.ImagePath}");
  sb.AppendLine($"Author {info.Author}");
  sb.AppendLine($"Company {info.Company}");
  sb.AppendLine($"Date {info.Date}");
  sb.AppendLine($"Version {info.Version}");
  sb.AppendLine($"FullPath {info.FullPath}");
  sb.AppendLine($"DigitalSignature {info.DigitalSignature}");
  sb.AppendLine($"IsCompatible {info.IsCompatible}");
  sb.AppendLine($"IsDeleted {info.IsDeleted}");
  sb.AppendLine($"TargetVersion {info.TargetVersion}");
  sb.AppendLine($"ErrorMsg {info.ErrorMsg}");
  sb.AppendLine($"ID {info.ID}");
  sb.AppendLine("");
}
System.Diagnostics.Debug.WriteLine(sb.ToString());
MessageBox.Show(sb.ToString(), "Addin Infos");

13 查找码头窗格

// 根据DAML id找到dockpane
var pane = FrameworkApplication.DockPaneManager.Find("esri_core_ProjectDockPane");

14 码头窗格属性和方法

// 根据DAML id找到dockpane
var pane = FrameworkApplication.DockPaneManager.Find("esri_core_ProjectDockPane");

// 控制可见性
bool visible = pane.IsVisible;

// 使dockpane激活
pane.Activate();

// 控制dockpane状态
DockPaneState state = pane.DockState;

// 钉住
pane.Pin();

// 隐藏
pane.Hide();

15 码头窗格撤消/重做

var pane = FrameworkApplication.DockPaneManager.Find("esri_core_contentsDockPane");

// 获取撤销栈
OperationManager manager = pane.OperationManager;
if (manager != null)
{
  // 撤销操作
  if (manager.CanUndo)
    await manager.UndoAsync();

  // 重做操作
  if (manager.CanRedo)
    await manager.RedoAsync();

  // 清除特定类别操作的撤销和重做栈
  manager.ClearUndoCategory("Some category");
  manager.ClearRedoCategory("Some category");
}

16 查找停靠窗格并获取其视图模型

// 下面是一个定义了dockpane的DAML示例。找到dockpane后,可以将其转换为dockpane viewModel,该viewModel由className属性定义。
//<dockPanes>
//  <dockPane id="MySample_Dockpane" caption="Dockpane 1" className="Dockpane1ViewModel" dock="bottom" height="5">
//    <content className="Dockpane1View" />
//  </dockPane>
//</dockPanes>

Dockpane1ViewModel vm = FrameworkApplication.DockPaneManager.Find("MySample_Dockpane") as Dockpane1ViewModel;

17 打开“后台”选项卡

// 打开后台到“关于ArcGIS Pro”选项卡。
FrameworkApplication.OpenBackstage("esri_core_aboutTab");

标签:info,FrameworkApplication,Pro,AppendLine,ArcGIS,pane,sb,窗格,SDK
From: https://blog.csdn.net/szy13323042191/article/details/139761053

相关文章

  • OpenHarmony、API、DevEco Studio三者版本对应关系以及full-sdk的下载和配置
     IDE上通常默认下载的是PublicSDK。如果开发涉及到系统相关高权限API,需要使用FullSDK,可以从每日构建上下载。每日构建下载地址:https://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist 如上图所示,可以从分支那里选择所需要的OpenHarmony版本,然后找到ohos-sdk-......
  • 启动应用程序出现NetProj.exe找不到问题解决
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个NetProj.exe文件(挑选合适的版本文件)把它放......
  • (11.3)iic串口读写EEPROM实验:程序设计
    一、实验任务二、架构框图其中:i2c驱动模块: bit_ctrl:0代表发送8位字节地址;1代表发送16位字节地址(本实验采用)i2c_addr[15:0]:16位字节地址,当bit_ctrl为0时只有低8位是有效的i2c_data_w[7:0]:向EEPROM写入的8位数据i2c_exec:拉高代表当前进行......
  • Modbus转Profibus网关接热传感器配置攻略
    一、前言在工业自动化控制领域,Modbus协议和Profibus协议是两种常见的通讯协议,它们在设备之间传输数据起着至关重要的作用。而Modbus转Profibus网关(XD-MDPB100)设备,则扮演着连接不同通讯协议的桥梁角色。本文将介绍如何通过Modbus转Profibus网关来接入热传感器,实现数据采集和监控的......
  • Orb Producer软件最新版下载【安装详细图文教程】
    OrbProducer是一个全面的和创新的AI驱动的插件套件,支持音乐制作人轻松创建高质量的音乐模式和循环。该套件由四个插件组成:OrbMelody、OrbBass、OrbArpeggios和OrbSynth,每个插件都提供了独特的特性和功能。​安装包获取地址:OrbProducerSuiteMac版:​​https://wm......
  • 功能强大的多功能文档转换工具Neevia Document Converter Pro 7.5.0.241
    NeeviaDocumentConverterPro是一款功能强大的Windows软件,旨在将文档转换为各种格式,包括PDF、TIFF、JPEG和许多其他格式。该程序专为在企业环境中使用而设计,提供文档转换和处理过程的自动化,这使其成为处理大量文档的组织的***工具。NeeviaDocumentConverterPro的主要功......
  • Unity接入Epic Online Service上架Epic游戏商城 登录和支付SDK配置与接入
    前言现在越来越多的游戏都开始上架EPIC(虽然大部分人上E宝只是为了白嫖包括我自己0-0)多多少少的开始有接入EPIC的需求今天就来简述下接入的主要两个流程登录和支付 分享不易还请大佬轻喷如果有帮助到你的话可以的话帮我点个免费的赞和收藏吧SDK下载下载链接如下......
  • NginxProxyManager 数据库迁移记录
    原因家里服务器的NginxMangerProxy使用的是SQLite作为数据库的。虽然数据不是很重要,但是丢了也是挺蛋疼的。考虑改为MySQL作为数据库,然后使用定时备份的策略来做数据库多备份。升级步骤1.保存sqlite的database文件NginxProxyManager是使用Portainer拉起的容器,可......
  • Docker搭建FRP+OPENVPN+Prometheus+Grafana 实现内网穿透以及流量监控
    Docker搭建FRP+OPENVPN+Prometheus+Grafana实现内网穿透以及流量监控文章目录Docker搭建FRP+OPENVPN+Prometheus+Grafana实现内网穿透以及流量监控一、搭建Docker基础环境二、配置FRP,实现端口映射2.1使用Docker部署FRPFrps服务端(拥有公网IP)Frpc客户端(内网IP)三、搭建......
  • VMware Fusion Pro 13 mac版:一键掌控虚拟世界
    VMwareFusionPro13是一款功能卓越的虚拟化软件,专为Mac操作系统量身打造。这款软件为用户提供了一个一站式的虚拟化解决方案,能够满足各种多样化的需求。→→↓↓载VMwareFusionPro13MacVMwareFusionPro13的强大之处在于其采用了最先进的虚拟化技术,确保在Mac上提供高......