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