在Grasshopper 3D中使用带有C#组件的数组/列表

时间:2013-11-13 16:04:25

标签: c# grasshopper

这里是Grasshopper 3D的新用户,我需要一些C#语法帮助在Grasshopper 3D中进行编码。 我有一个脚本,例如,粘贴在下面:

public static int arraySum(int[] myArray){
    int someValue = 0;
    for(int i = 0; i < myArray.Length; i++){
       someValue += myArray[i];
    }
    return someValue;
}

上面的静态方法总结了数组的所有值。

根据我对Grasshopper中C#的脚本组件的理解,你不能创建静态方法,因为一切都是非返回的void方法。您将变量(输出)指定为伪造的返回,是否正确?

知道 - 如何实现我的上述脚本,例如,实现C#组件?

我只是分配了一个变量,例如A作为总和,而不是“返回”。但是我遇到了一些问题,例如,使用了一些C#方法,比如.Length不起作用。

Grasshopper 3D的C#组件中的方法格式如下:

private void RunScript(int x, ref object A){
}

1 个答案:

答案 0 :(得分:1)

这是一个非常古老的问题,但我会继续并完成它以完成它的缘故。在任何GH脚本组件中,都有两个区域来编写代码。在图片中,您会看到私有方法RunScript// <Custom Additional Code>中的其他区域 enter image description here

所以我可以在RunScript方法中编写代码,如下所示:

 private void RunScript(List<int> myArray, ref object A)
 {

    int someValue = 0;
    for(int i = 0; i < myArray.Count; i++){
      someValue += myArray[i];
    }

    A = someValue;

 }

请注意,我将myArray重新定义为类似int的列表,如脚本组件输入: enter image description here

由于它是一个列表,我在循环中使用myArray.Count。最后,我使用A = someValue将结果输出到组件的输出中。

我也可以在// <Custom additional code>区域中编写方法:

  private void RunScript(List<int> myArray, ref object A)
  {

    A = arraySum(myArray.ToArray());

  }

  // <Custom additional code> 

  public static int arraySum(int[] myArray){
    int someValue = 0;
    for(int i = 0; i < myArray.Length; i++){
      someValue += myArray[i];
    }
    return someValue;
  }

  // </Custom additional code>

看起来像这样: enter image description here

我将incomming myArray.ToArray()更改为组件列表。在第二种方式中,您的原始代码几乎相同。

希望这有助于回答一个老问题!