For multiple item shadows you can patch them together and extract surface area.
So shouldnt need a Concave Hull to calculate shadow area or perimeter curves?
Does that help?
Multiple Object Code
## Import References
import clr
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.AddReference("RevitAPIUI")
from Autodesk.Revit.UI import *
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import collections
# Flattens lists in Python
def flatten(l):
for el in l:
if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
for sub in flatten(el):
yield sub
else:
yield el
## Converts Dynamo Planes to Revit DB Planes
def getPlane(s):
s = UnwrapElement(s)
origin = s.Origin.ToXyz()
normal = XYZ.BasisZ
plane = Autodesk.Revit.DB.Plane.CreateByNormalAndOrigin(normal,origin)
return plane
## Input Dynamo Solid
objsolids = IN[0]
## Input Dynamo Plane
pl = getPlane(IN[1])
## Input Sunlight Vector
vec = IN[2].ToXyz()
result = []
for o in objsolids:
## Convert the Objects Dynamo Solid to Revit DB Solid
convertobj = o.ToRevitType(TessellatedShapeBuilderTarget.Solid, TessellatedShapeBuilderFallback.Abort)
## Create an ExtrusionAnalyser to make a Shadow
analyzer = ExtrusionAnalyzer.Create(convertobj[0],pl,vec)
## Get the Outline of the Shadow and convert to Dynamo Types
outL = analyzer.GetExtrusionBase()
eloops = outL.EdgeLoops
flatloop = flatten(eloops)
curves = []
for f in flatloop:
curves.append(f.AsCurve().ToProtoType())
result.append(curves)
OUT = result