Revit 二次开发 异常:Curve must be in the plane Parameter name: curve
程序员文章站
2022-03-19 21:37:41
...
画详图线的时候有时候会出现异常Curve must be in the plane Parameter name: curve。
看这异常的意思,是线段必需在平面内,那这是为什么呢?
这是因为,详图线是画在XY平面上的,其中只有X,Y轴是有效的,如果Start点和End点的Z值不一样,那实际上Start点和End点就构成了两个平行于XY平面的平面,由Start点和End点定义的线段就横跨了这两个平面,所以才会抛出这个异常。其实这个异常的意思是线段必需在XY平面内,当然这个平面不一定是处于原点的XY平面(Z值为0),只要平行于XY平面的平面都是可以的,这就要求Start点和End点的Z值必需一致。
再深处一点,我们来探究以下的情况,看代码:
//由min和max定义一个BoundingBoxXYZ
min = new XYZ(-1, -1, -1);
max = new XYZ(1, 1, 1);
//再由定义的BoundingBoxXYZ画投影到XY平面上的线框
//线1
XYZ xyzStart = min;
XYZ xyzEnd = new XYZ(max.X, min.Y, min.Z);
DrawLine(sheet, xyzStart, xyzEnd);
//线2
xyzStart = min;
xyzEnd = new XYZ(min.X, max.Y, min.Z);
DrawLine(sheet, xyzStart, xyzEnd);
//线3
xyzStart = max;
xyzEnd = new XYZ(min.X, max.Y, max.Z);
DrawLine(sheet, xyzStart, xyzEnd);
//线4
xyzStart = max;
xyzEnd = new XYZ(max.X, min.Y, max.Z);
DrawLine(sheet, xyzStart, xyzEnd);
由上面代码可看到,线1和线2是画在Z值为-1的XY平面上,线3和线4是来在Z值为1的XY平面上。生成的效果如下图:
上图中,选中的线段就是线1,当我们把其拖住上下移动,左右两条线的长度是会跟着变化的。所以其实Revit在生成详图线的时候,会自动把所有线都生成在一个XY平面中。
查看线1的左右端点的坐标值,如下图:
其Z值都是0,所以,Revit在生成详图线的时候,会自动把所有线都生成在处于原点的XY平面中。