欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Revit 二次开发 Curve线的CreateOffset方法

程序员文章站 2022-07-12 14:20:13
...

后面解释,先上代码:

		double lineOffset=10;
		Curve copyCurve = curve.CreateOffset(lineOffset, getNormal(curve));

		/// <summary>
        /// 传入一根线,根据右手定则,返回可以得到负z轴偏移方向的向量。!!注意,我的线是在xy平面,
        /// 想把线往负z轴偏移,所以这样做。根据需求自己改方法体
        /// </summary>
        /// <param name="geometryCurve"></param>
        /// <returns></returns>
        private XYZ getNormal(Curve curve)
        {
            XYZ sPoint = curve.GetEndPoint(0);
            XYZ ePoint = curve.GetEndPoint(1);

            double res = 1;//这个是下面外扩的长度,随便取正数即可
            //往curve第一个端点外扩展2个点,简单的几何比例
            XYZ p0 = new XYZ(sPoint.X - (ePoint.Y - sPoint.Y) * (res / curve.ApproximateLength), sPoint.Y + (ePoint.X - sPoint.X) * (res / curve.ApproximateLength), sPoint.Z);
            XYZ p1 = new XYZ(sPoint.X + (ePoint.Y - sPoint.Y) * (res / curve.ApproximateLength), sPoint.Y - (ePoint.X - sPoint.X) * (res / curve.ApproximateLength), sPoint.Z);

            return Line.CreateBound(p0, p1).Direction;
        }

CreateOffset的原型是这样:
public Curve CreateOffset(double offsetDist, XYZ normal);

API手册里面对于normal参数解释是“The normal of the plane defining the offset direction.
”,翻译过来是“定义偏移方向的平面的法线。”。反正我是有点难理解的。。自己动手测试验证到底是什么样。
比如我有这样一根curve:
Revit 二次开发 Curve线的CreateOffset方法
我在上面的getNormal方法代码里面,构造了一根这样的线p0->p1:
Revit 二次开发 Curve线的CreateOffset方法
就是p0指向p1的Line。就返回这个的Direction。

那,偏移方向是这样的:
Revit 二次开发 Curve线的CreateOffset方法

相关标签: revit二次开发