1

我正在尝试使用DivideByLength以下基于RhinoCommon SDK 的方法,但我无法理解第三个参数是什么。我尝试基于此方法编写以下代码,但收到以下错误消息: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

4 回答 4

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 参数文档

于 2012-11-09T16:05:17.790 回答
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 没有错,但没用,因为函数将数组作为输出返回。

于 2012-11-09T16:05:52.240 回答
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);
}
于 2012-11-09T16:13:07.637 回答
1

你需要new Point3d()而不是Point3d()你需要实例化 Point3d 而不是传递 Point3d

Point3d objPoint3d = new Point3d();

pts.Add(crv[i].DivideByLength(nb, true, out objPoint3d));
于 2012-11-09T16:04:39.350 回答