Once a primitive has been added to the SpatialFieldManager, analysis results can be created and added to the analysis results container using the UpdateSpatialFieldPrimitive() method. This method takes a set of domain points (FieldDomainPoints) where results are calculated and a set of values (FieldValues) for each point. The number of FieldValues must correspond to the number of domain points. However, each domain point can have an array of values, each for a separate measurement at this point.
The following example creates a simple set of analysis results on an element face selected by the user. The SDK sample SpatialFieldGradient demonstrates a more complex use case where each point has multiple associated values.
Code Region 27-1: Creating Analysis Results |
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); |