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

ArcGIS Pro SDK (九)几何 10 弧

ArcGIS Pro SDK (九)几何 10 弧

文章目录

  • ArcGIS Pro SDK (九)几何 10 弧
    • 1 构造圆弧 - 使用内部点
    • 2 构造圆弧 - 使用弦长度和方位
    • 3 构建圆弧 - 使用中心点、角度和半径
    • 4 构造椭圆弧 - 使用中心点和旋转角度
    • 5 构造圆弧 - 使用中心点和方向
    • 6 构造圆弧 - 使用两个线段和半径
    • 7 构造圆
    • 8 构造椭圆
    • 9 椭圆构建器属性
    • 10 椭圆弧属性

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

1 构造圆弧 - 使用内部点

// 从 (2, 1) 到 (1, 2) 构造圆弧,内部点为 (1 + sqrt(2)/2, 1 + sqrt(2)/2)。
// 使用 builderEx 的便捷方法或使用 builderEx 构造函数。MapPoint fromPt = MapPointBuilderEx.CreateMapPoint(2, 1);
MapPoint toPt = MapPointBuilderEx.CreateMapPoint(1, 2);
Coordinate2D interiorPt = new Coordinate2D(1 + Math.Sqrt(2) / 2, 1 + Math.Sqrt(2) / 2);// BuilderEx 的便捷方法不需要在 MCT 上运行。
EllipticArcSegment circularArc = EllipticArcBuilderEx.CreateCircularArc(fromPt, toPt, interiorPt);// BuilderEx 的构造函数不需要在 MCT 上运行。
EllipticArcBuilderEx eab = new EllipticArcBuilderEx(fromPt, toPt, interiorPt);
// 使用生成器执行操作EllipticArcSegment anotherCircularArc = eab.ToSegment();

2 构造圆弧 - 使用弦长度和方位

// Construct a circular arc counterclockwise from (2, 1) to (1, 2) such that the embedded 
// circle has center point at (1, 1) and radius = 1.
// Use a builderEx convenience method or use a builderEx constructor.MapPoint fromPt = MapPointBuilderEx.CreateMapPoint(2, 1, SpatialReferences.WGS84);
double chordLength = Math.Sqrt(2);
double chordBearing = 3 * Math.PI / 4;
double radius = 1;
ArcOrientation orientation = ArcOrientation.ArcCounterClockwise;
MinorOrMajor minorOrMajor = MinorOrMajor.Minor;// BuildeExr convenience methods don't need to run on the MCT.
EllipticArcSegment circularArc = EllipticArcBuilderEx.CreateCircularArc(fromPt, chordLength, chordBearing, radius, orientation, minorOrMajor);// BuilderEx constructors need to run on the MCT.
EllipticArcBuilderEx cab = new EllipticArcBuilderEx(fromPt, chordLength, chordBearing, radius, orientation, minorOrMajor);
// do something with the builderEllipticArcSegment anotherCircularArc = cab.ToSegment();

3 构建圆弧 - 使用中心点、角度和半径

// 构造一个圆弧,中心点在 (0, 0),起始角度为 0,中心角为 pi/2,半径为 1。
// 使用 builderEx 的便捷方法或使用 builderEx 构造函数。SpatialReference sr4326 = SpatialReferences.WGS84;
Coordinate2D centerPt = new Coordinate2D(0, 0);
double fromAngle = 0;
double centralAngle = Math.PI / 2;
double radius = 1;// BuilderEx 的便捷方法不需要在 MCT 上运行。
EllipticArcSegment circularArc = EllipticArcBuilderEx.CreateCircularArc(fromAngle, centralAngle, centerPt, radius, sr4326);// BuilderEx 的构造函数不需要在 MCT 上运行。
EllipticArcBuilderEx cab = new EllipticArcBuilderEx(fromAngle, centralAngle, centerPt, radius, sr4326);
EllipticArcSegment otherCircularArc = cab.ToSegment();

4 构造椭圆弧 - 使用中心点和旋转角度

// 构造一个中心在 (1, 1) 的椭圆弧,起始角度为 0,中心角为 PI/2,旋转角为 0,半长轴为 1,短长轴比为 0.5。
// 使用 builderEx 的便捷方法或使用 builderEx 构造函数。Coordinate2D centerPt = new Coordinate2D(1, 1);// BuilderEx 的便捷方法不需要在 MCT 上运行。
EllipticArcSegment circularArc = EllipticArcBuilderEx.CreateEllipticArcSegment(centerPt, 0, Math.PI / 2, 0, 1, 0.5);double semiMajor;
double semiMinor;
circularArc.GetAxes(out semiMajor, out semiMinor);
// semiMajor = 1, semiMinor = 0.5// BuilderEx 的构造函数不需要在 MCT 上运行。
EllipticArcBuilderEx cab = new EllipticArcBuilderEx(centerPt, 0, Math.PI / 2, 0, 1, 0.5);
cab.GetAxes(out semiMajor, out semiMinor);
EllipticArcSegment otherCircularArc = cab.ToSegment();

5 构造圆弧 - 使用中心点和方向

// 从 (2, 1) 到 (1, 2) 构造一个圆弧,中心点在 (1, 1),方向为逆时针。
// 使用 builderEx 的便捷方法或使用 builderEx 构造函数。MapPoint toPt = MapPointBuilderEx.CreateMapPoint(1, 2);
MapPoint fromPt = MapPointBuilderEx.CreateMapPoint(2, 1);
Coordinate2D centerPtCoord = new Coordinate2D(1, 1);// BuilderEx 的便捷方法不需要在 MCT 上运行。
EllipticArcSegment circularArc = EllipticArcBuilderEx.CreateCircularArc(fromPt, toPt, centerPtCoord, ArcOrientation.ArcCounterClockwise);// BuilderEx 的构造函数需要在 MCT 上运行。
EllipticArcBuilderEx cab = new EllipticArcBuilderEx(fromPt, toPt, centerPtCoord, ArcOrientation.ArcCounterClockwise);
EllipticArcSegment otherCircularArc = cab.ToSegment();

6 构造圆弧 - 使用两个线段和半径

// 从 (100, 100) 到 (50, 50) 构造一条线段,另一条线段从 (100, 100) 到 (150, 50)。
// 使用 builderEx 的便捷方法或使用 builderEx 构造函数。LineSegment segment1 = LineBuilderEx.CreateLineSegment(new Coordinate2D(100, 100), new Coordinate2D(50, 50));
LineSegment segment2 = LineBuilderEx.CreateLineSegment(new Coordinate2D(100, 100), new Coordinate2D(150, 50));// 构造提示点以确定圆弧将在哪里构造。
Coordinate2D hintPoint = new Coordinate2D(100, 75);// 调用 QueryFilletRadius 以获取可与这些线段一起使用的最小和最大半径。
var minMaxRadii = EllipticArcBuilderEx.QueryFilletRadiusRange(segment1, segment2, hintPoint);// 使用最大半径创建圆弧。
double maxRadius = minMaxRadii.Item2;// BuilderEx 的便捷方法不需要在 MCT 上运行。
// 在 2.x 版本中 - EllipticArcSegment circularArc = EllipticArcBuilderEx.CreateEllipticArcSegment(segment1, segment2, maxRadius, hintPoint);
EllipticArcSegment circularArc = EllipticArcBuilderEx.CreateCircularArc(segment1, segment2, maxRadius, hintPoint);// BuilderEx 的构造函数需要在 MCT 上运行。
EllipticArcBuilderEx cab = new EllipticArcBuilderEx(segment1, segment2, maxRadius, hintPoint);
EllipticArcSegment otherCircularArc = cab.ToSegment();

7 构造圆

// 构造一个圆,中心在 (-1,-1),半径为 2,方向为顺时针。
// 使用 builderEx 的便捷方法或使用 builderEx 构造函数。Coordinate2D centerPtCoord = new Coordinate2D(-1, -1);// Builder 便捷方法不需要在 MCT 上运行。
EllipticArcSegment circle = EllipticArcBuilderEx.CreateCircle(centerPtCoord, 2, ArcOrientation.ArcClockwise);
// circle.IsCircular = true
// circle.IsCounterClockwise = false
// circle.IsMinor = falsedouble startAngle, rotationAngle, centralAngle, semiMajor, semiMinor;
Coordinate2D actualCenterPt;
circle.QueryCoords(out actualCenterPt, out startAngle, out centralAngle, out rotationAngle, out semiMajor, out semiMinor);// semiMajor = 2.0
// semiMinor = 2.0
// startAngle = PI/2
// centralAngle = -2*PI
// rotationAngle = 0
// endAngle = PI/2// BuilderEx 的构造函数需要在 MCT 上运行。
EllipticArcBuilderEx builder = new EllipticArcBuilderEx(centerPtCoord, 2, ArcOrientation.ArcClockwise);
EllipticArcSegment otherCircle = builder.ToSegment();

8 构造椭圆

// 构造一个中心在 (1, 2) 的椭圆,旋转角为 -pi/6,半长轴为 5,短长轴比为 0.2,方向为顺时针。
// 使用 builderEx 的便捷方法或使用 builderEx 构造函数。Coordinate2D centerPt = new Coordinate2D(1, 2);// BuilderEx 的便捷方法不需要在 MCT 上运行。
EllipticArcSegment ellipse = EllipticArcBuilderEx.CreateEllipse(centerPt, -1 * Math.PI / 6, 5, 0.2, ArcOrientation.ArcClockwise);// BuilderEx 的构造函数需要在 MCT 上运行。
EllipticArcBuilderEx builder = new EllipticArcBuilderEx(centerPt, -1 * Math.PI / 6, 5, 0.2, ArcOrientation.ArcClockwise);
EllipticArcSegment anotherEllipse = builder.ToSegment();

9 椭圆构建器属性

// 获取曲线的属性
EllipticArcBuilderEx builder = new EllipticArcBuilderEx(arcSegment);
MapPoint startPt = builder.StartPoint;
MapPoint endPt = builder.EndPoint;
Coordinate2D centerPt = builder.CenterPoint;
bool isCircular = builder.IsCircular;
bool isMinor = builder.IsMinor;
double startAngle = builder.StartAngle;
double endAngle = builder.EndAngle;
double centralAngle = builder.CentralAngle;
double rotationAngle = builder.RotationAngle;
ArcOrientation orientation = builder.Orientation;

10 椭圆弧属性

// 获取曲线的控制点
EllipticArcSegment arc = EllipticArcBuilderEx.CreateEllipticArcSegment(arcSegment);
MapPoint startPt = arc.StartPoint;
MapPoint endPt = arc.EndPoint;
Coordinate2D centerPt = arc.CenterPoint;
bool isCircular = arc.IsCircular;
bool isMinor = arc.IsMinor;
bool isCounterClockwise = arc.IsCounterClockwise;
bool isCurve = arc.IsCurve;
double len = arc.Length;
double ratio = arc.MinorMajorRatio;double semiMajorAxis, semiMinorAxis;
// 获取轴
arc.GetAxes(out semiMajorAxis, out semiMinorAxis);
// 或者使用属性
// semiMajorAxis = arc.SemiMajorAxis;
// semiMinorAxis = arc.SemiMinorAxis;double startAngle, centralAngle, rotationAngle;
// 或者使用 QueryCoords 获取完整信息
arc.QueryCoords(out centerPt, out startAngle, out centralAngle, out rotationAngle, out semiMajorAxis, out semiMinorAxis);// 使用属性获取角度信息
// double endAngle = arc.EndAngle;
// centralAngle = arc.CentralAngle;
// rotationAngle = arc.RotationAngle;
// startAngle = arc.StartAngle;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【数据结构】初识数据结构
  • AI、AGI、AIGC与AIGC、NLP、LLM,ChatGPT区分
  • Nature子刊 | ATAC-seq、RNA-seq和蛋白组联合分析揭示脂质激活转录因子PPARα在肾脏代偿性肥大的作用机制
  • pdf怎么压缩的小一点?PDF压缩变小的6种方法(2024全新)
  • 数学基础【俗说矩阵】:初等矩阵和矩阵的初等行变化关系推导
  • 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【26】【内网穿透】cpolar
  • python内置zip函数详解
  • Linux——多路复用之poll
  • ACM中国图灵大会专题 | 图灵奖得主Manuel Blum教授与仓颉团队交流 | 华为论坛:面向全场景应用编程语言精彩回顾
  • arcgis紧凑型切片缓存(解决大范围切片,文件数量大的问题)
  • 三、初识C语言(3)
  • 【Apache Doris】周FAQ集锦:第 14 期
  • 第六章 Spring框架深入学习(2023版本IDEA)
  • ArcGIS Pro SDK (九)几何 8 线段
  • 十七、【机器学习】【非监督学习】- K-均值 (K-Means)
  • 2017 年终总结 —— 在路上
  • android 一些 utils
  • iOS | NSProxy
  • java8-模拟hadoop
  • JavaScript学习总结——原型
  • JSDuck 与 AngularJS 融合技巧
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Terraform入门 - 1. 安装Terraform
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 关于List、List?、ListObject的区别
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 数组大概知多少
  • 微信小程序填坑清单
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 2017年360最后一道编程题
  • 正则表达式-基础知识Review
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • !!java web学习笔记(一到五)
  • #QT(TCP网络编程-服务端)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $.each()与$(selector).each()
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (floyd+补集) poj 3275
  • (pojstep1.1.2)2654(直叙式模拟)
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (学习总结16)C++模版2
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)LINQ之路
  • (转)Linux整合apache和tomcat构建Web服务器
  • .Net 6.0 处理跨域的方式
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .net下的富文本编辑器FCKeditor的配置方法
  • /var/lib/dpkg/lock 锁定问题
  • @我的前任是个极品 微博分析