期望什么作为这种方法的论据?

时间:2012-11-09 16:01:58

标签: c# methods arguments rhino3d

我正在尝试使用基于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()));
}

4 个答案:

答案 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));