Hi there,
To show HB results in Revit as colored surfaces I made some minor/major changes to "Colored Surface Display Style" node of Archi_Lab.
#Copyright(c) 2015, Konrad K Sobon
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import *
Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Analysis import *
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN
values = IN[0]
faces = UnwrapElement(IN[1])
UVPoints = IN[2]
colorSettings = IN[3]
legendSettings = IN[4]
styleSettings = IN[5]
displayStyleName = IN[6]
analysisResultName = IN[7]
analysisResultDescription = IN[8]
unitNames = IN[9]
unitMultipliers = IN[10]
displayUnit = IN[11]
message = None
facesRefs = []
for face in faces:
try:
ref = face.Tags.LookupTag("RevitFaceReference")
face = doc.GetElement(ref).GetGeometryObjectFromReference(ref)
facesRefs.append(ref)
except:
facesRefs.append(list())
#"Start" the transaction
TransactionManager.Instance.EnsureInTransaction(doc)
#create spatial field manager if one doesn't already exist
sfm = SpatialFieldManager.GetSpatialFieldManager(doc.ActiveView)
if sfm == None:
sfm = SpatialFieldManager.CreateSpatialFieldManager(doc.ActiveView, 1)
sfm.Clear()
#get result schema index if existing else crete one
regResults = sfm.GetRegisteredResults()
if len(regResults) != 0:
for i in regResults:
if sfm.GetResultSchema(i).Name == analysisResultName:
resultSchema = sfm.GetResultSchema(i)
else:
resultSchema = AnalysisResultSchema(analysisResultName, analysisResultDescription)
names = Liststr
multipliers = Listfloat
for i,j in zip(unitMultipliers, unitNames):
multipliers.Add(i)
names.Add(j)
resultSchema.SetUnits(names, multipliers)
for i in range(0, resultSchema.GetNumberOfUnits(), 1):
if resultSchema.GetUnitsName(i) == displayUnit:
resultSchema.CurrentUnits = i
message = "Success! Remember that your current \ndisplay units are set to " + displayUnit
else:
continue
if resultSchema.GetUnitsName(resultSchema.CurrentUnits) != displayUnit:
message = "Display Units supplied not available. \nEither add those units to results or \nspecify one of the already supplied."
schemaIndex = sfm.RegisterResult(resultSchema)
#unwrap surfaces
for faceRef, value, UVPoint in zip(facesRefs, values, UVPoints):
idx = sfm.AddSpatialFieldPrimitive(faceRef)
valList = ListValueAtPoint
fieldPointsUV = ListAutodesk.Revit.DB.UV
valList.Add(ValueAtPoint([value]))
fieldPointsUV.Add(UVPoint)
vals = FieldValues(valList)
pnts = FieldDomainPointsByUV(fieldPointsUV)
sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, schemaIndex)
valList.Clear()
fieldPointsUV.Clear()
#create display style for colored surfaces and apply to current view
collector = FilteredElementCollector(doc)
collection = collector.OfClass(AnalysisDisplayStyle).ToElements()
displayStyle = []
for i in collection:
if i.Name == displayStyleName and i.HasColoredSurfaceSettings():
displayStyle.append(i)
elif i.Name == displayStyleName and not i.HasColoredSurfaceSettings():
message = "Specified Display Style name already \nexists; please supply different name"
else:
continue
if len(displayStyle) == 0:
try:
analysisDisplayStyle = AnalysisDisplayStyle.CreateAnalysisDisplayStyle(doc, displayStyleName, styleSettings, colorSettings, legendSettings)
except:
pass
else:
analysisDisplayStyle = displayStyle[0]
analysisDisplayStyle.SetLegendSettings(legendSettings)
analysisDisplayStyle.SetColorSettings(colorSettings)
analysisDisplayStyle.SetColoredSurfaceSettings(styleSettings)
try:
doc.ActiveView.AnalysisDisplayStyleId = analysisDisplayStyle.Id
except:
pass
"End" the transaction
TransactionManager.Instance.TransactionTaskDone()
#Assign your output to the OUT variable
if message != None:
OUT = message
else:
OUT = 0
I appreciate if you take a look at it and let me know if anything needs to be changed.
Sam

Hi there,
To show HB results in Revit as colored surfaces I made some minor/major changes to "Colored Surface Display Style" node of Archi_Lab.
#Copyright(c) 2015, Konrad K Sobon
@arch_laboratory, http://archi-lab.net
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import *
Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Analysis import *
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN
values = IN[0]
faces = UnwrapElement(IN[1])
UVPoints = IN[2]
colorSettings = IN[3]
legendSettings = IN[4]
styleSettings = IN[5]
displayStyleName = IN[6]
analysisResultName = IN[7]
analysisResultDescription = IN[8]
unitNames = IN[9]
unitMultipliers = IN[10]
displayUnit = IN[11]
message = None
facesRefs = []
for face in faces:
try:
ref = face.Tags.LookupTag("RevitFaceReference")
face = doc.GetElement(ref).GetGeometryObjectFromReference(ref)
facesRefs.append(ref)
except:
facesRefs.append(list())
#"Start" the transaction
TransactionManager.Instance.EnsureInTransaction(doc)
#create spatial field manager if one doesn't already exist
sfm = SpatialFieldManager.GetSpatialFieldManager(doc.ActiveView)
if sfm == None:
sfm = SpatialFieldManager.CreateSpatialFieldManager(doc.ActiveView, 1)
sfm.Clear()
#get result schema index if existing else crete one
regResults = sfm.GetRegisteredResults()
if len(regResults) != 0:
for i in regResults:
if sfm.GetResultSchema(i).Name == analysisResultName:
resultSchema = sfm.GetResultSchema(i)
else:
resultSchema = AnalysisResultSchema(analysisResultName, analysisResultDescription)
names = Liststr
multipliers = Listfloat
for i,j in zip(unitMultipliers, unitNames):
multipliers.Add(i)
names.Add(j)
resultSchema.SetUnits(names, multipliers)
for i in range(0, resultSchema.GetNumberOfUnits(), 1):
if resultSchema.GetUnitsName(i) == displayUnit:
resultSchema.CurrentUnits = i
message = "Success! Remember that your current \ndisplay units are set to " + displayUnit
else:
continue
if resultSchema.GetUnitsName(resultSchema.CurrentUnits) != displayUnit:
message = "Display Units supplied not available. \nEither add those units to results or \nspecify one of the already supplied."
schemaIndex = sfm.RegisterResult(resultSchema)
#unwrap surfaces
for faceRef, value, UVPoint in zip(facesRefs, values, UVPoints):
idx = sfm.AddSpatialFieldPrimitive(faceRef)
valList = ListValueAtPoint
fieldPointsUV = ListAutodesk.Revit.DB.UV
valList.Add(ValueAtPoint([value]))
fieldPointsUV.Add(UVPoint)
vals = FieldValues(valList)
pnts = FieldDomainPointsByUV(fieldPointsUV)
sfm.UpdateSpatialFieldPrimitive(idx, pnts, vals, schemaIndex)
valList.Clear()
fieldPointsUV.Clear()
#create display style for colored surfaces and apply to current view
collector = FilteredElementCollector(doc)
collection = collector.OfClass(AnalysisDisplayStyle).ToElements()
displayStyle = []
for i in collection:
if i.Name == displayStyleName and i.HasColoredSurfaceSettings():
displayStyle.append(i)
elif i.Name == displayStyleName and not i.HasColoredSurfaceSettings():
message = "Specified Display Style name already \nexists; please supply different name"
else:
continue
if len(displayStyle) == 0:
try:
analysisDisplayStyle = AnalysisDisplayStyle.CreateAnalysisDisplayStyle(doc, displayStyleName, styleSettings, colorSettings, legendSettings)
except:
pass
else:
analysisDisplayStyle = displayStyle[0]
analysisDisplayStyle.SetLegendSettings(legendSettings)
analysisDisplayStyle.SetColorSettings(colorSettings)
analysisDisplayStyle.SetColoredSurfaceSettings(styleSettings)
try:
doc.ActiveView.AnalysisDisplayStyleId = analysisDisplayStyle.Id
except:
pass
"End" the transaction
TransactionManager.Instance.TransactionTaskDone()
#Assign your output to the OUT variable
if message != None:
OUT = message
else:
OUT = 0
I appreciate if you take a look at it and let me know if anything needs to be changed.
Sam