Revit 二次开发 Curve线的CreateOffset方法

后面解释,先上代码:

		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:
在这里插入图片描述
我在上面的getNormal方法代码里面,构造了一根这样的线p0->p1:
在这里插入图片描述
就是p0指向p1的Line。就返回这个的Direction。

那,偏移方向是这样的:
在这里插入图片描述
2020.10.19发现了线偏移的另一种方法:

int hight = 100;
Transform tsf = Transform.CreateTranslation(new XYZ(0, 0, 1).Multiply(hight));
Curve newCurve = oldCurve.CreateTransformed(tsf);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值