我正在尝试使用基于RhinoCommon SDK的DivideByLength
方法,但我无法理解第三个参数是什么。我试图根据此方法编写下面的代码,但我收到以下错误消息:Error: 'Rhino.Geometry.Point3d' is a 'type' but is used like a 'variable'
我认为第三个参数是指定我想要点作为输出而不是双倍。我做错了什么?
方法:
Public Function DivideByLength ( _
segmentLength As Double, _
includeStart As Boolean, _
<OutAttribute> ByRef points As Point3d() _
) As Double()
代码:
List<Point3d> pts = new List<Point3d>();
for(int i = 0; i < crv.Count;i = i + 2)
{
pts.Add(crv[i].DivideByLength(nb, true, out Point3d()));
}
答案 0 :(得分:7)
看起来这就是你要找的东西:
List<Point3d[]> pts = new List<Point3d[]>();
for(int i = 0; i < crv.Count;i = i + 2)
{
Point3d[] pointArray;
crv[i].DivideByLength(nb, true, out pointArray);
pts.Add(pointArray);
}
有关详细信息,请参阅out parameter documentation。
答案 1 :(得分:2)
尝试在c#中使用:
List<Point3d[]> ptlist = new List<Point3d[]>();
Point3d[] pts;
for(int i = 0; i < crv.Count;i = i + 2)
{
crv[i].DivideByLength(nb, true, out pts);
ptlist.add(pts);
}
使用new并没有错,但是没用,因为函数将数组作为输出返回。
答案 2 :(得分:2)
我认为这可能是你所追求的。您的out
参数是Point3d
个对象的数组,看起来您想要获取所有返回数组中所有对象的列表。所以你有你的清单,需要AddRange
结果。
List<Point3d> pts = new List<Point3d>();
for(int i = 0; i < crv.Count;i = i + 2)
{
Point3d[] arr;
crv[i].DivideByLength(nb, true, out arr);
pts.AddRange(arr);
}
答案 3 :(得分:1)
您需要new Point3d()
代替Point3d()
,您需要对Point3d进行实例化,而不是传递Point3d
Point3d objPoint3d = new Point3d();
pts.Add(crv[i].DivideByLength(nb, true, out objPoint3d));