0

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){
}
4

1 回答 1

2

这是一个很老的问题,但为了完成,我会继续完成它。在任何 GH 脚本组件中,都有两个区域可以编写代码。在图像中,您可以看到私有方法RunScript和其他区域// <Custom Additional Code> 在此处输入图像描述

所以我可以在 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 类型的列表,就像在脚本组件输入中一样: 在此处输入图像描述

因为它是一个列表,所以我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>

看起来像这样: 在此处输入图像描述

我更改了传入myArray.ToArray(),因为它作为组件的列表出现。在第二种方式中,您的原始代码几乎相同。

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

于 2015-06-10T16:35:55.320 回答