簡體   English   中英

在Grasshopper 3D中使用帶有C#組件的數組/列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM