这里是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){
}
答案 0 :(得分:1)
这是一个非常古老的问题,但我会继续并完成它以完成它的缘故。在任何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>
看起来像这样:
我将incomming myArray.ToArray()
更改为组件列表。在第二种方式中,您的原始代码几乎相同。
希望这有助于回答一个老问题!