Работа с массивами / списком с компонентами C# в 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;
}

Вышеупомянутый статический метод суммирует все значения массива.

Исходя из моего понимания компонентов сценариев C# в Grasshopper, вы не можете создавать статические методы, так как все является невозвратным методом void. Вы назначаете переменную (выход) как псевдо-возвращение, это правильно?

Зная это - как мне реализовать мой скрипт выше, например, для компонента C#?

Вместо "возврата" я просто назначил переменную, например, A в качестве суммы. Но я столкнулся с некоторыми проблемами, например, с некоторыми методами C#, такими как.Length не работает.

Формат метода в компоненте C# Grasshopper 3D следующий:

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

1 ответ

Это довольно старый вопрос, но я сделаю это ради завершения. В любом компоненте GH Scripting есть две зоны для написания кода. На картинке вы видите приватный метод 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() так как он входит в список для компонента. Таким образом, ваш исходный код почти такой же.

Надеюсь, это поможет ответить на старый вопрос!

Другие вопросы по тегам