public void PaintSolid(Solid s, String viewName)
{
View view;
if (!viewNameList.Contains(viewName))
{
view = m_doc.Create.NewView3D(new XYZ(1, 1, 1));
view.Name = viewName;
viewNameList.Add(viewName);
}
else
{
view = (((new FilteredElementCollector(m_doc).
OfClass(typeof(View))).Cast<View>()).
Where(e => e.Name == viewName)).First<View>();
}
SpatialFieldManager sfm = SpatialFieldManager.GetSpatialFieldManager(view);
if (sfm == null) sfm = SpatialFieldManager.CreateSpatialFieldManager(view, 1);
if (SchemaId != -1)
{
IList<int> results = sfm.GetRegisteredResults();
if (!results.Contains(SchemaId))
{
SchemaId = -1;
}
}
if (SchemaId == -1)
{
AnalysisResultSchema resultSchema1 = new AnalysisResultSchema("PaintedSolid" + viewName, "Description");
AnalysisDisplayStyle displayStyle = AnalysisDisplayStyle.CreateAnalysisDisplayStyle(
m_doc,
"Real_Color_Surface" + viewName,
new AnalysisDisplayColoredSurfaceSettings(),
new AnalysisDisplayColorSettings(),
new AnalysisDisplayLegendSettings());
resultSchema1.AnalysisDisplayStyleId = displayStyle.Id;
SchemaId = sfm.RegisterResult(resultSchema1);
}
FaceArray faces = s.Faces;
Transform trf = Transform.Identity;
foreach (Face face in faces)
{
int idx = sfm.AddSpatialFieldPrimitive(face, trf);
IList<UV> uvPts = null;
IList<ValueAtPoint> valList = null;
ComputeValueAtPointForFace(face, out uvPts, out valList, 1);
FieldDomainPointsByUV pnts = new FieldDomainPointsByUV(uvPts);
FieldValues vals = new FieldValues(valList);
sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, SchemaId);
}
}