目前在使用ProfileElement.Create1为一个Alignment添加纵断面线的时候发现了一个问题。
ProfileElement.Create1在某些参数的情况下会导致ORD异常崩溃,这个函数有三个参数:
public static ProfileElement Create1(double startStation, double endStation, DPoint3d[] tSZPoint);
会导致ORD崩溃的参数组合:
ProfileElement Create1(0, 2970, points);
points的值为:
{<DPoint3d xyz="594,100,0"/>}{<DPoint3d xyz="1188,100,0"/>}{<DPoint3d xyz="1782,100,0"/>}{<DPoint3d xyz="2376,100,0"/>}
经过调试,我发现将points里面每个点的y值进行一些变化就可以让函数正常运行:
ProfileElement.Create1(0, 2970, points);
{<DPoint3d xyz="594,100,0"/>}{<DPoint3d xyz="1188,101,0"/>}{<DPoint3d xyz="1782,102,0"/>}{<DPoint3d xyz="2376,103,0"/>}
所以这意味着Create1的第三个参数DPoint3d[] tSZPoint中的点的高程不能完全一样?
你第一种方式就是一条水平直线,你就给个起终点,{<DPoint3d xyz="594,100,0"/>} 和 {<DPoint3d xyz="2376,100,0"/>}。
好像不行,张总。我测试了一下,这样设置的话虽然没有报错,但是得到的element是一个空值:
您试试用下面这个方法创建:
ProfileLine profileLine = new ProfileLine(DPoint3d.FromXYZ(100 * mUor, 0, 0), DPoint3d.FromXYZ(200 * mUor, 0, 0));
刚抽空测试了下,Bentley.CifNET.LinearGeometry.ProfileElement.Create1这种方法只适用于多个高程不同的点集合来构造profile,如果是一条直线建议用ProfileLine .
Answer Verified By: fanghua wei
好的,张总,我测试下看看。
张总,我测试了下,这个函数可以使用。
但是,如果说我已经存在了导入的地形的话,是不是还是要用Create1更好啊?
这么说,如果你的纵断面的线不是一条直线,而是根据不同的高程点构成的曲线,那么用Create1,反之如果是直线,那么建议用ProfileLine 构造,目前看来Create1针对直线不适用。