Arc 打断拆分成多个线段

公司插件的梁齐斜板功能更新,设计师提出需求可以拆分弧梁,并能对齐到板顶。

本文只讨论拆分弧梁,椭圆再后续更新。

  1. 首先看以下弧形的创建api在这里插入图片描述
    API中提供了三种方法
    第一种时指定起点与终点,最后选择顶点形成的弧形
    第二种是指定面,半径,起点角度与终点角度
    第三种则是弧形中心点,半径,起点角度,终点角度,x向量,y向量

  2. 拆分弧形,意思就是如果遇到板边界需要拆分,需要将此弧形按照板边界划分成两个弧形,第一种办法肯定无法实现,后两种的化就需要了解什么是起点角度与终点角度,并如何计算

  3. 下面是我的理解,后面彻底完成后再继续补充,可能有些混乱,怕后面忘记(所有的弧形是逆时针旋转)

    • 弧形内部有三个参数(xDir,yDir,normal),这三个参数代表横向向量,纵向向量,和法向量
    • 下面是两个相反的值比较,可以发现法向量在俩面决定了整个弧形方向,此处可以使用右手法则理解
      在这里插入图片描述
      在这里插入图片描述
  • 也就是说,此处如果按照常规布置,我们可以求startangle和endangle,公式如下所示:
 var dir0 = (arc.GetEndPoint(0) - arc.Center).Normalize();
                    var dir1 = (arc.GetEndPoint(1) - arc.Center).Normalize();

在这里插入图片描述

  • 从上图可以看出α代表的startAngle大于β的endAngle,整个角度大小是整相反,所以我们拆分的时候可以反方向拆分便可以获得相应的新弧线
		double endAngle = dir0.AngleOnPlaneTo(arc.XDirection, arc.Normal);
        double startAngle = dir1.AngleOnPlaneTo(arc.XDirection, arc.Normal);
        double intersectAngle = dir.AngleOnPlaneTo(arc.XDirection, arc.Normal);
  • 前文说到法向量和Y关系右手法则
  • 倒叙组合便能够形成新的arc弧形,完成拆分
var fakeNewLine = Arc.Create(arc.Center, arc.Radius, startAngle, intersectAngle, arc.XDirection,
                                -arc.YDirection);
newLine = fakeNewLine.CreateReversed();
var fakeLine = Arc.Create(arc.Center, arc.Radius, intersectAngle, endAngle, arc.XDirection,
                                -arc.YDirection);
 line = fakeLine.CreateReversed();
  • 此处还没有完成梁齐斜板,因为我们是逆时针去拆分,所以需要将整个arc倒置以下才能够完成最后的样式转换,下面是结果图
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41059339/article/details/130704974
arc