private double AngleBewteenEdges(Edge edgeA, Edge edgeB)
{
XYZ vecteorA = null;
XYZ vecteorB = null;
XYZ pointA1 = edgeA.Evaluate(0);
XYZ pointA2 = edgeA.Evaluate(1);
XYZ pointB1 = edgeB.Evaluate(0);
XYZ pointB2 = edgeB.Evaluate(1);
if (pointA1.IsAlmostEqualTo(pointB1))
{
vecteorA = edgeA.ComputeDerivatives(0).BasisX.Normalize();
vecteorB = edgeB.ComputeDerivatives(0).BasisX.Normalize();
}
else if (pointA1.IsAlmostEqualTo(pointB2))
{
vecteorA = edgeA.ComputeDerivatives(0).BasisX.Normalize();
vecteorB = edgeB.ComputeDerivatives(1).BasisX.Normalize();
}
else if (pointA2.IsAlmostEqualTo(pointB1))
{
vecteorA = edgeA.ComputeDerivatives(1).BasisX.Normalize();
vecteorB = edgeB.ComputeDerivatives(0).BasisX.Normalize();
}
else if (pointA2.IsAlmostEqualTo(pointB2))
{
vecteorA = edgeA.ComputeDerivatives(1).BasisX.Normalize();
vecteorB = edgeB.ComputeDerivatives(1).BasisX.Normalize();
}
if (pointA2.IsAlmostEqualTo(pointB1)) vecteorA = vecteorA.Negate();
if (null == vecteorA || null == vecteorB)
{
return 0d;
}
return Math.Acos(vecteorA.DotProduct(vecteorB));
}
revit二次开发,夹角计算
最新推荐文章于 2024-10-10 00:04:23 发布