当前位置: 首页 > news >正文

ArcGIS Pro SDK (七)编辑 10 捕捉

ArcGIS Pro SDK (七)编辑 10 捕捉

文章目录

  • ArcGIS Pro SDK (七)编辑 10 捕捉
    • 1 配置捕捉 - 打开或关闭捕捉
    • 2 配置捕捉 - 应用程序捕捉模式
    • 3 配置捕捉 - 图层捕捉可捕捉性
    • 4 配置捕捉 - 图层捕捉模式
    • 5 配置捕捉 - 组合示例
    • 6 捕捉选项

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

1 配置捕捉 - 打开或关闭捕捉

// 启用捕捉
ArcGIS.Desktop.Mapping.Snapping.IsEnabled = true;// 禁用捕捉
ArcGIS.Desktop.Mapping.Snapping.IsEnabled = false;

2 配置捕捉 - 应用程序捕捉模式

// 仅设置点和边捕捉模式,清除其他所有模式
// 在 2.x 版本中 - ArcGIS.Desktop.Mapping.Snapping.SetSnapModes(SnapMode.Point, SnapMode.Edge);
ArcGIS.Desktop.Mapping.Snapping.SetSnapModes(new List<SnapMode>() { SnapMode.Point, SnapMode.Edge });// 清除所有捕捉模式
// 在 2.x 版本中 - ArcGIS.Desktop.Mapping.Snapping.SetSnapModes();
ArcGIS.Desktop.Mapping.Snapping.SetSnapModes(null);// 一次设置一个捕捉模式
ArcGIS.Desktop.Mapping.Snapping.SetSnapMode(SnapMode.Edge, true);
ArcGIS.Desktop.Mapping.Snapping.SetSnapMode(SnapMode.End, true);
ArcGIS.Desktop.Mapping.Snapping.SetSnapMode(SnapMode.Intersection, true);// 获取当前捕捉模式
var snapModes = ArcGIS.Desktop.Mapping.Snapping.SnapModes;// 获取特定捕捉模式的状态
bool isOn = ArcGIS.Desktop.Mapping.Snapping.GetSnapMode(SnapMode.Vertex);

3 配置捕捉 - 图层捕捉可捕捉性

// 图层是否可捕捉?
bool isSnappable = fLayer.IsSnappable;// 设置特定图层的可捕捉性 - 需要在 MCT 上运行
await QueuedTask.Run(() =>{// 使用扩展方法fLayer.SetSnappable(true);// 或直接使用 CIM//var layerDef = fLayer.GetDefinition() as ArcGIS.Core.CIM.CIMGeoFeatureLayerBase;//layerDef.Snappable = true;//fLayer.SetDefinition(layerDef);});// 关闭所有图层的可捕捉性
layerList = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>();
await QueuedTask.Run(() =>{foreach (var layer in layerList){layer.SetSnappable(false);}});

4 配置捕捉 - 图层捕捉模式

layerList = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>();// 按图层配置
foreach (var layer in layerList)
{// 查找图层捕捉模式的状态var lsm = ArcGIS.Desktop.Mapping.Snapping.GetLayerSnapModes(layer);bool vertexOn = lsm.Vertex;// 或使用vertexOn = lsm.GetSnapMode(SnapMode.Vertex);bool edgeOn = lsm.Edge;// 或使用edgeOn = lsm.GetSnapMode(SnapMode.Edge);bool endOn = lsm.End;// 或使用endOn = lsm.GetSnapMode(SnapMode.End);// 更新一些捕捉模式// 关闭顶点捕捉lsm.SetSnapMode(SnapMode.Vertex, false);// 开启交点捕捉lsm.SetSnapMode(SnapMode.Intersection, true);// 并设置回图层ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layer, lsm);// 一次分配一个捕捉模式ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layer, SnapMode.Vertex, false);// 打开所有捕捉模式ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layer, true);// 关闭所有捕捉模式ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layer, false);
}// 为一组图层配置// 为一组图层设置顶点、边、结束捕捉,其他捕捉模式为 false
var vee = new LayerSnapModes(false);
vee.Vertex = true;
vee.Edge = true;
vee.End = true;
ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layerList, vee);// 确保一组图层的交点捕捉开启而不更改其他任何捕捉模式// 获取一组图层的捕捉模式
var dictLSM = ArcGIS.Desktop.Mapping.Snapping.GetLayerSnapModes(layerList);
foreach (var layer in dictLSM.Keys)
{var lsm = dictLSM[layer];lsm.Intersection = true;
}
ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(dictLSM);// 为一组图层关闭所有捕捉模式
ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(layerList, false);

5 配置捕捉 - 组合示例

// 仅对特定感兴趣的图层的顶点进行捕捉,而不对其他图层的顶点进行捕捉
// 所有其他捕捉模式应关闭。// 必须启用捕捉
ArcGIS.Desktop.Mapping.Snapping.IsEnabled = true;// 关闭所有应用程序捕捉模式
// 在 2.x 版本中 - ArcGIS.Desktop.Mapping.Snapping.SetSnapModes();
ArcGIS.Desktop.Mapping.Snapping.SetSnapModes(null);// 设置应用程序捕捉模式顶点开启
ArcGIS.Desktop.Mapping.Snapping.SetSnapMode(SnapMode.Vertex, true);// 确保图层捕捉开启
await QueuedTask.Run(() =>
{fLayer.SetSnappable(true);
});// 仅设置顶点捕捉
var vertexOnly = new LayerSnapModes(false);
vertexOnly.Vertex = true;// 仅对特定图层设置顶点捕捉,清除其他所有捕捉模式
var dict = new Dictionary<Layer, LayerSnapModes>();
dict.Add(fLayer, vertexOnly);
ArcGIS.Desktop.Mapping.Snapping.SetLayerSnapModes(dict, true);  // true = 重置其他图层

6 捕捉选项

//通过 get/set 选项设置捕捉选项
var snapOptions = ArcGIS.Desktop.Mapping.Snapping.GetOptions(myMap);
// 在 2.x 版本中 - snapOptions.SnapToSketchEnabled = true;
snapOptions.IsSnapToSketchEnabled = true;
snapOptions.XYTolerance = 100;
// 在 2.x 版本中 - snapOptions.ZToleranceEnabled = true;
snapOptions.IsZToleranceEnabled = true;
snapOptions.ZTolerance = 0.6;// 开启捕捉提示显示部分
snapOptions.SnapTipDisplayParts = (int)SnapTipDisplayPart.SnapTipDisplayLayer + (int)SnapTipDisplayPart.SnapTipDisplayType;// 关闭所有捕捉提示
//snapOptions.SnapTipDisplayParts = (int)SnapTipDisplayPart.SnapTipDisplayNone;// 仅开启图层显示
//snapOptions.SnapTipDisplayParts = (int)SnapTipDisplayPart.SnapTipDisplayLayer;// 在 2.x 版本中 - snapOptions.GeometricFeedbackColor = ColorFactory.Instance.RedRGB;
snapOptions.SnapTipColor = ColorFactory.Instance.RedRGB;ArcGIS.Desktop.Mapping.Snapping.SetOptions(myMap, snapOptions);
http://www.lryc.cn/news/391399.html

相关文章:

  • 开始尝试从0写一个项目--后端(一)
  • STM32第十二课:ADC检测烟雾浓度(MQ2)
  • 1975react社区问答管理系统开发mysql数据库web结构node.js编程计算机网页源码
  • SSL/CA 证书及其相关证书文件解析
  • 鸿蒙小案例-自定义键盘
  • STM32智能农业监控系统教程
  • 分子AI预测赛笔记
  • 003 线程的暂停和中断
  • mysql在部署时的问题
  • Flutter集成高德导航SDK(Android篇)(JAVA语法)
  • 代码随想录Day76(图论Part11)
  • 工程化:Commitlint / 规范化Git提交消息格式
  • 电脑有线网卡和无线网卡的MAC地址
  • 代码随想录-DAY②-数组——leetcode 977 | 209
  • 稀疏数组搜索
  • 存储器类型介绍
  • 论文学习笔记1:Federated Graph Neural Networks: Overview, Techniques, and Challenges
  • [数据集][目标检测]轮椅检测数据集VOC+YOLO格式13826张1类别
  • 视频剪辑音乐自动卡点Pr插件 BeatEdit v2.2 免费下载
  • 【INTEL(ALTERA)】为什么Nios® II构建流程报告无法在 Windows WSL 上确定程序大小?
  • 2024年第十四届APMCM亚太地区大学生数学建模竞赛
  • 删除账户相关信息
  • JavaSE (Java基础):面向对象(下)
  • Element中的日期时间选择器DateTimePicker和级联选择器Cascader
  • Construct公司 从 0 到 1 基于 Kitex+Istio 的微服务系统建设
  • day04-组织架构
  • Web3 开发者入门手册:技能、工具和职业前景
  • 元宇宙虚拟实景展馆树立客户对企业的信任和好感
  • 【C语言】宏定义在 a.c 中定义,如何在 b.c 中使用?
  • vue3 滚动条滑动到元素位置时,元素加载