Shadow outline

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

6 Likes