[英]Working with arrays/list with C# components in Grasshopper 3D
這里是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){
}
這是一個非常古老的問題,但我會繼續並完成它以完成它的緣故。 在任何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()
因為它作為組件的列表進入。 在第二種方式中,您的原始代碼幾乎相同。
希望這有助於回答一個老問題!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.