プリミティブが 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); |