您的位置:首页 > 房产 > 家装 > ArcGIS Pro SDK (四)框架 1

ArcGIS Pro SDK (四)框架 1

2025/4/22 10:52:46 来源:https://blog.csdn.net/szy13323042191/article/details/139761053  浏览:    关键词:ArcGIS Pro SDK (四)框架 1

ArcGIS Pro SDK 框架 1

目录

  • ArcGIS Pro SDK 框架 1
    • 1 如何在停靠窗格可见或隐藏时订阅和取消订阅事件
    • 2 执行命令
    • 3 设置当前工具
    • 4 激活选项卡
    • 5 激活/停用状态 - 修改条件
    • 6 确定应用程序是否繁忙
    • 7 获取应用程序主窗口
    • 8 关闭 ArcGIS Pro
    • 9 获取 ArcGIS 专业版
    • 10 关闭特定窗格
    • 11 激活窗格
    • 12 获取有关当前安装的加载项的信息
    • 13 查找码头窗格
    • 14 码头窗格属性和方法
    • 15 码头窗格撤消/重做
    • 16 查找停靠窗格并获取其视图模型
    • 17 打开“后台”选项卡

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");
elseFrameworkApplication.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");

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com