解析結果データを作成する

解析結果データを作成する

プリミティブが SpatialFieldManager に追加されると、UpdateSpatialFieldPrimitive()メソッドを使い解析結果を作成し、解析結果コンテナに追加できます。このメソッドは、結果を計算する一連のドメインの点(FieldDomainPoints)と各点の一連の値(FieldValues)を取得します。FieldValues の数はドメインの点の数に対応している必要があります。ただし、各ドメインの点には、この点における個別の計測の値の配列を持つことができます。

次の例では、ユーザが選択した要素の面に簡単な解析結果のセットを作成します。SDK サンプル SpatialFieldGradient は、各点が複数の関連する値を持つ、より複雑な使用例を示しています。

コード領域 27-1: 解析結果を作成

Document doc = commandData.Application.ActiveUIDocument.Document;
UIDocument uiDoc = commandData.Application.ActiveUIDocument;

SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(doc.ActiveView);
if (null == sfm)
{
        sfm = SpatialFieldManager.CreateSpatialFieldManager(doc.ActiveView, 1);
}

Reference reference = uiDoc.Selection.PickObject(ObjectType.Face, "Select a face");
int idx = sfm.AddSpatialFieldPrimitive(reference);

Face face = doc.GetElement(reference).GetGeometryObjectFromReference(reference) as Face;

IList<UV> uvPts = new List<UV>();
BoundingBoxUV bb = face.GetBoundingBox();
UV min = bb.Min;
UV max = bb.Max;
uvPts.Add(new UV(min.U,min.V));
uvPts.Add(new UV(max.U,max.V));

FieldDomainPointsByUV pnts = new FieldDomainPointsByUV(uvPts);

List<double> doubleList = new List<double>();
IList<ValueAtPoint> valList = new List<ValueAtPoint>();
doubleList.Add(0);
valList.Add(new ValueAtPoint(doubleList));
doubleList.Clear();
doubleList.Add(10);
valList.Add(new ValueAtPoint(doubleList));

FieldValues vals = new FieldValues(valList);

AnalysisResultSchema resultSchema = new AnalysisResultSchema("Schema Name", "Description");
int schemaIndex = sfm.RegisterResult(resultSchema);
sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, schemaIndex);