再帰関数を使用して、結果の値のリストを出力しようとしています。これは私が思いついたコードですが、それは私に与えます
エラー (CS0161): 'Script_Instance.wrapper(int, int, Grasshopper.DataTree, System.Collections.Generic.List)': すべてのコード パスが値を返すわけではありません (87 行目)
public List<int> wrapper(int br, int depth, DataTree<int> topo, List<double> vals)
{
List<int> collection = new List<int>();
collection.Add(br);
if (depth > 0)
{
double[] area = new double[vals.Count - 1];
for (int i = 0;i < topo.Branches[br].Count;i++)
{
area[i] = vals[topo.Branch(br)[i]];
}
double Im = area.Max();
int IofMaxArea = area.ToList().IndexOf(Im);
collection.Add(IofMaxArea);
// wrapper(topo.Branch(br)[IofMaxArea], de, topo, vals);
wrapper(topo.Branch(br)[IofMaxArea], depth-1, topo, vals);
}
if (depth == 0)
{
return collection;
}
}
正常に動作するが、私のニーズには遅すぎる python スクリプトを改善しようとしています。これはパイソンコードです。
import Grasshopper.DataTree as ghdt
import ghpythonlib.components as ghcomp
import rhinoscriptsyntax as rs
newTree = ghdt[object]()
def wrapper(br,depth):
if depth>0:
area = []
for k in range(topo.Branch(br).Count):
ar = vals[topo.Branch(br)[k]]
#polygonC = rs.CloseCurve(polygon)
area.append(ar)
IofMaxArea = area.index(max(area))
collection.append([pts[topo.Branch(br)[IofMaxArea]],topo.Branch(br)[IofMaxArea]])
#[topo.Branch(br)[IofMaxArea]
wrapper(topo.Branch(br)[IofMaxArea],depth-1)
else: return None
def isovister(b,d):
global collection
collection = []
collection.append([pts[b],b])
wrapper(b,d)
return collection
if topo.Branch(item).Count !=0:
results = isovister(item,de)
a = tuple(x[0] for x in results)
b = tuple(x[1] for x in results)
else:
a = None
b = None
これは Rhino3d+Grasshopper 内にあります。