# Shadow outline

**URL:** <https://forum.dynamobim.com/t/shadow-outline/41045>\
**Category:** Revit\
**Created:** [September 25, 2019, 4:04am UTC](https://forum.dynamobim.com/t/shadow-outline/41045 "2019-09-25T04:04:15Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![vanman](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vanman/32/20881_2.png) [@vanman](https://forum.dynamobim.com/u/vanman)\
**Post date:** [September 25, 2019, 4:04am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/1 "2019-09-25T04:04:15Z")

</div>

Is it possible to draw the shadow outline on a plan view with detail lines using dynamo?

---

<div class="post-metadata">

**Author:** ![jacob.small](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/jacob.small/32/161030_2.png) [@jacob.small](https://forum.dynamobim.com/u/jacob.small)\
**Post date:** [September 25, 2019, 5:01am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/2 "2019-09-25T05:01:51Z")

</div>

Yes.

---

<div class="post-metadata">

**Author:** ![vanman](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vanman/32/20881_2.png) [@vanman](https://forum.dynamobim.com/u/vanman)\
**Post date:** [September 25, 2019, 5:27am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/3 "2019-09-25T05:27:30Z")

</div>

haha great! I been searching but mostly just find working out the area of a shadow, not getting its outline. Can you point me in the right direction?

---

<div class="post-metadata">

**Author:** ![Ewan\_Opie](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/ewan_opie/32/77070_2.png) [@Ewan\_Opie](https://forum.dynamobim.com/u/Ewan_Opie)\
**Post date:** [September 25, 2019, 7:40am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/4 "2019-09-25T07:40:38Z")

</div>

Have a look here 😉

> [@Flatten Solid onto plane](https://forum.dynamobim.com/t/flatten-solid-onto-plane/13721/8):
>
> //Reference Surface that exceeds the extents of the Object and normal to projection direction s1 = Line.ByStartPointEndPoint(Point.ByCoordinates(0,20,-20),Point.ByCoordinates(20,0,-20)).Extrude(Vector.ZAxis(),40); n1 = (s1.NormalAtParameter(0.5,0.5)); p1 = s1\<1\>.PointAtParameter((0..1..#n)\<2\>,(0..1..#n)\<3\>); b1 = List.Count(p1.Project(o1,n1)\<1\>\<2\>)\>0; p2 = List.FilterByBoolMask(p1,b1)["in"]; p3 = List.Clean(List.FirstItem(p2\<1\>),false); p4 = List.Reverse(List.Clean(List.LastItem…

What shape/structure are you projecting?

---

<div class="post-metadata">

**Author:** ![vanman](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vanman/32/20881_2.png) [@vanman](https://forum.dynamobim.com/u/vanman)\
**Post date:** [September 25, 2019, 10:19pm UTC](https://forum.dynamobim.com/t/shadow-outline/41045/5 "2019-09-25T22:19:18Z")

</div>

At the moment its a 9 story doughnut building. Need to run a shadow study, draw the outline of it and then switch the view to another building and show the difference of the building outside the boundary height. Will hopefully be something that could be used for any building. The building inside the HIRB will just be a mass which might be easier to use for the drawn line shadow then switch to the actual building for the shadow.

As an example below, not sure if projecting the surface is the same? If it is from the correct angle 🤔

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/8/7/87c8e871d113cf70096b5c90418684fb67b35ee2.png)

---

<div class="post-metadata">

**Author:** ![vanman](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vanman/32/20881_2.png) [@vanman](https://forum.dynamobim.com/u/vanman)\
**Post date:** [August 19, 2020, 4:10am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/6 "2020-08-19T04:10:08Z")

</div>

Hi @Ewan_Opie @jacob.small or anyone else. I couldn’t quite work out the link you sent me. But I came up with the below. Its a bit slow though. Any suggestions or better methods? The vector seems to project further then the Revit shadow too which I cant figure out how to fix. Thanks for any help

 ![Capture](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/3/a/3acee1f13e006106fcce6cdda958ccd3373c7ef6.png)

The line should be more where the red is

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/f/3/f34ecb067aa40963a9e41e07e0e79a5538eb9878.png)

---

<div class="post-metadata">

**Author:** ![jacob.small](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/jacob.small/32/161030_2.png) [@jacob.small](https://forum.dynamobim.com/u/jacob.small)\
**Post date:** [August 19, 2020, 8:48am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/7 "2020-08-19T08:48:25Z")

</div>

1. I’d check where it is slow using tuneup
2. Build a mass from the buildings and project those faces instead of the many many many many faces of the walls.
3. Could be a daylight savings time bug, or that the link doesn’t share an internal origin so the elevation is different. Would need the full data set to know specifics.

---

<div class="post-metadata">

**Author:** ![vanman](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vanman/32/20881_2.png) [@vanman](https://forum.dynamobim.com/u/vanman)\
**Post date:** [August 19, 2020, 9:37am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/8 "2020-08-19T09:37:55Z")

</div>

Element solids is killing it. I’m currently trying to get element.geometry from the walls then a bounding box of geometry then a cuboid from bounding box then solid union to make it similar. Element.geometry means translating the geometry though with the links. Just working on matching up the lists to translate the geometry from the emptys left in element.geometry.

I tried making like a mass shape from a few posts on the forum but couldn’t quite get it.

What tune up? A node?

---

<div class="post-metadata">

**Author:** ![vanman](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vanman/32/20881_2.png) [@vanman](https://forum.dynamobim.com/u/vanman)\
**Post date:** [August 19, 2020, 10:54am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/9 "2020-08-19T10:54:39Z")

</div>

I got here, fast enough. However its not very accurate with the building outline using topo method because the lines jump across if the buildings taller on one side then the other, forgot to post a pic. One building dosnt want to translate to the correct location too. A way to get the perimeter points of points would be good. Cant even seem to make multiple surfaces out of points

 ![Capture](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/3/2/320f1575e3cb1c4c8e3e32c510c26e5482087e48.png)

---

<div class="post-metadata">

**Author:** ![jacob.small](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/jacob.small/32/161030_2.png) [@jacob.small](https://forum.dynamobim.com/u/jacob.small)\
**Post date:** [August 19, 2020, 9:29pm UTC](https://forum.dynamobim.com/t/shadow-outline/41045/10 "2020-08-19T21:29:02Z")

</div>

> [@vanman](#):
>
> I tried making like a mass shape from a few posts on the forum but couldn’t quite get it.

Manually is pretty easy, and while you could automate it for this project it might not work for the next one so I’d go manual in this case (the time to build that is likely minimal if you don’t already have the massing from another source - somehow had to sketch those walls in the first place - right?).

> [@vanman](#):
>
> What tune up? A node?

Information on the TuneUp view extension can be found here: [TuneUp Extension: Explore your Node and Graph execution times - Dynamo BIM](https://dynamobim.org/tuneup-extension-explore-your-node-and-graph-execution-times/)

Effectively it times the execution of each node on the canvas and lets you see what the slow bits are. 🙂

---

<div class="post-metadata">

**Author:** ![vanman](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vanman/32/20881_2.png) [@vanman](https://forum.dynamobim.com/u/vanman)\
**Post date:** [August 19, 2020, 9:56pm UTC](https://forum.dynamobim.com/t/shadow-outline/41045/11 "2020-08-19T21:56:09Z")

</div>

Thanks @jacob.small . I’m still on Dynamo 1.3 😱 for Revit 2019. So I think tune ups no good to me for now. The current script I’ve got is fast and means I dont need to do any manual work in revit 🙂

However, do you have a method to create a surface with a group of points to draw a more accurate line of the perimeter of the points?

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/0/f/0fa69df502f7db0b0fbdc111677bf8886600ae73.png)

Hi @Thomas_Mahon do you know why this geometry isnt transforming correctly? Those 4 buildings are 1 link with attached links. The building under the surface is the same on the left linked in twice in the nested link 🤔

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/6/8/686a9da3dabf724ade189dd9218a4aab561ac5e7.png)

---

<div class="post-metadata">

**Author:** ![Ewan\_Opie](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/ewan_opie/32/77070_2.png) [@Ewan\_Opie](https://forum.dynamobim.com/u/Ewan_Opie)\
**Post date:** [August 19, 2020, 11:51pm UTC](https://forum.dynamobim.com/t/shadow-outline/41045/12 "2020-08-19T23:51:14Z")

</div>

Hi @vanman

I had a brainwave to try and use the Revit API functions that are creating the shadow to extract the edge curves. Seems to work, and may be a lot simpler. 🙂

[D2-0 Create Shadow Edge Lines.dyn](https://forum.dynamobim.com/uploads/short-url/iDRVrpBnvWN14mJ2ojCZa1hBRTO.dyn) (32.6 KB)

![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/2/e/2ecfd5c06a515cf0ac8b166082a82a7280f0ba4c.png)

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/c/c/ccab7ee083c98a4161509dcf5caad3f2fecc1868.png)

_ **Main Coding in Python Node** _

```
## 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
objsolid = IN[0]

## Convert the Objects Dynamo Solid to Revit DB Solid
convertobj = objsolid.ToRevitType(TessellatedShapeBuilderTarget.Solid, TessellatedShapeBuilderFallback.Abort)

## Input Dynamo Plane
pl = getPlane(IN[1])

## Input Sunlight Vector
vec = IN[2].ToXyz()

## 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())
	
OUT = curves
```

---

<div class="post-metadata">

**Author:** ![vanman](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vanman/32/20881_2.png) [@vanman](https://forum.dynamobim.com/u/vanman)\
**Post date:** [August 20, 2020, 12:04am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/13 "2020-08-20T00:04:41Z")

</div>

Awesome thank you!

The post below lets me get this for getting perimeter points but the tolerance is to low.

> [@Concave Hull (Alpha Shape) from list of points with Python?](https://forum.dynamobim.com/t/concave-hull-alpha-shape-from-list-of-points-with-python/34058/15):
>
> Ha, @Mark.Ackerley, uni + work does leave for very little time, but I was intrigued. I know this has been answered, but here is another method that uses the Graham Scan method for “[Gift Wrapping](https://en.wikipedia.org/wiki/Gift_wrapping_algorithm)”. The best method is Chans algorithm from what I’ve read though as it is a combination of the Jarvis March and Graham Scan methods. Here is the Python Code ported over from [Thomas Switzers GitHub](https://gist.github.com/arthur-e/5cf52962341310f438e96c1f3c3398b8) (I take zero credit for this)… import clr clr.AddReference('ProtoGeometry') from Autodesk.DesignScript.Geo…

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/c/4/c4065087daf7360005bb039aa5955e2e5f60e255.png)

 ![Capture](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/b/7/b7eefa9154cc89eae6939e40e64b371e87fee70c.png)

---

<div class="post-metadata">

**Author:** ![Ewan\_Opie](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/ewan_opie/32/77070_2.png) [@Ewan\_Opie](https://forum.dynamobim.com/u/Ewan_Opie)\
**Post date:** [August 20, 2020, 2:10am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/14 "2020-08-20T02:10:25Z")

</div>

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?

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/8/3/836d32fe4e8f26334c2829024b414fa23f16792b.png)

**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

```

 ![D2-0 Create Shadow Edge Lines_2020-08-20_02-09-17](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/c/2/c2a95a4000659a21cedc1998bdd13359b64b4e28.png)

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/8/1/8101e8a555586fc5a33bbfbcebe07728f7a16671.png)

---

<div class="post-metadata">

**Author:** ![vanman](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vanman/32/20881_2.png) [@vanman](https://forum.dynamobim.com/u/vanman)\
**Post date:** [August 20, 2020, 3:09am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/15 "2020-08-20T03:09:47Z")

</div>

Thanks Ewan. I was trying to avoid using Element.Solids as I was drawing the shadow for 4 buildings and dynamo would crash.

---

<div class="post-metadata">

**Author:** ![Ewan\_Opie](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/ewan_opie/32/77070_2.png) [@Ewan\_Opie](https://forum.dynamobim.com/u/Ewan_Opie)\
**Post date:** [August 20, 2020, 5:24am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/16 "2020-08-20T05:24:34Z")

</div>

Ah… there may be a way to reduce the ‘crunch’ time of extracting the element solids through other means, taking everything fully python-side perhaps 🤔. 🐍

Or at the very least simplifying the representation of the geometry being collected enough to improve the speed (detail level options etc).

Will have another look a little later on.

---

<div class="post-metadata">

**Author:** ![Thomas\_Mahon](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/thomas_mahon/32/64209_2.png) [@Thomas\_Mahon](https://forum.dynamobim.com/u/Thomas_Mahon)\
**Post date:** [August 20, 2020, 9:13am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/17 "2020-08-20T09:13:15Z")

</div>

Hi @vanman

Its difficult to say just by looking at your screenshot - are those LinkElement’s walls? If so, can you try using LinkElement.Location to extract their location curves and see if they appear in the correct location as this will help to isolate the cause of the problem. It might even be something to do with the Wall Edge References maybe losing some transformation data which only the LinkElement stores, but then having said that, you Geometry.Transform node is correctly wired up to mitigate any issue with transforms which is why i cant say for sure.

---

<div class="post-metadata">

**Author:** ![Mark.Ackerley](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/mark.ackerley/32/79310_2.png) [@Mark.Ackerley](https://forum.dynamobim.com/u/Mark.Ackerley)\
**Post date:** [August 20, 2020, 10:26am UTC](https://forum.dynamobim.com/t/shadow-outline/41045/18 "2020-08-20T10:26:18Z")

</div>

Hey @vanman,

I’ve taken solids from quite large buildings and not had a problem (when I was doing 3d prints)… I did get some funny things when extracting Structure (there are curves in the flanges of steels for example)… Maybe it is worth trying to isolate the problem.

Hope that is helpful,

Mark

---

<div class="post-metadata">

**Author:** ![Vikram\_Subbaiah](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vikram_subbaiah/32/50797_2.png) [@Vikram\_Subbaiah](https://forum.dynamobim.com/u/Vikram_Subbaiah)\
**Post date:** [August 20, 2020, 5:46pm UTC](https://forum.dynamobim.com/t/shadow-outline/41045/19 "2020-08-20T17:46:47Z")

</div>

> [@vanman](#):
>
> Is it possible to draw the shadow outline on a plan view with detail lines using dynamo?

How about some image processing?  
Doesn’t involve any elements or solids 🙂

 ![shadow_2020-08-20_11-02-02](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/0/8/08e2d55d5a5f66baf0fa4329181a7f5499104666.png)  
[shadow.dyn](https://forum.dynamobim.com/uploads/short-url/7wawW9WpXCzRPZnmH2TmwfS3hWz.dyn) (2.3 MB)

```
//Image Processing
vwIm = rvVw.ExportAsImage(iPth);
imDm = Image.Dimensions(vwIm);
imPx = Image.Pixels(vwIm,Math.Round(imDm["width"]*accu),Math.Round(imDm["height"]*accu));
imCl = Math.Floor(imPx.Red)==127 && Math.Floor(imPx.Green)==127 && Math.Floor(imPx.Blue)==127 ? Color.ByARGB(255,127,127,127) : Color.ByARGB(255,255,255,255);
imGr = List.AllIndicesOf(imCl<1>,Color.ByARGB(255,127,127,127));

// Shadow Edge
imP1 = List.Reverse(1..List.Count(imGr));
imP2 = List.AddItemToFront(0,imGr<1>);
imP3 = List.Clean(List.RestOfItems(Point.ByCoordinates(imP2,imP1)),false);
imP4 = PolySurface.ByJoinedSurfaces(List.Flatten(Rectangle.ByWidthLength(Plane.ByOriginNormal(imP3,Vector.ZAxis()),1,1).Patch(),-1));
btLf = Point.ByCoordinates(List.MinimumItem([bsLn.Curve.StartPoint.X,bsLn.Curve.EndPoint.X]),bsLn.Curve.StartPoint.Y);
imP5 = imP4.PerimeterCurves().Scale(bsLn.Curve.Length/(Math.Round(imDm["width"]*accu)),sdLn.Curve.Length/(Math.Round(imDm["height"]*accu)),1).Translate(btLf.X,btLf.Y,0);

//Detail Curves
dtCr = DetailCurve.ByCurve(rvVw,imP5);

```

![shadow-revit_2020-08-20_11-02-02](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/e/4/e497721ff3c6d59ce24691cd7c6b0219b3e249f8.png)  
[shadows.rvt](https://forum.dynamobim.com/uploads/short-url/mcnqKfNrzciksxZ4TVAvyTiFedD.rvt) (1.3 MB)

Haven’t attempted to exclude shadows cast within, but should be possible.

---

<div class="post-metadata">

**Author:** ![vanman](https://sea2.discourse-cdn.com/flex022/user_avatar/forum.dynamobim.com/vanman/32/20881_2.png) [@vanman](https://forum.dynamobim.com/u/vanman)\
**Post date:** [August 20, 2020, 9:40pm UTC](https://forum.dynamobim.com/t/shadow-outline/41045/20 "2020-08-20T21:40:49Z")

</div>

Hi Thomas, yes link element walls. The LinkElement.Location is showing the correct position. The TotalTransforms are below. Could be somthing in the wall Edge References 🤔

 ![image](https://us1.discourse-cdn.com/flex022/uploads/dynamobim/original/3X/f/c/fcca75afa3cf82e2a34082243ea0d0232b61c8c2.png)

> <https://github.com/albandechasteigner/GeniusLociForDynamo/blob/master/Nodes/Wall%20Edges%20References.dyf>

[Next page](https://forum.dynamobim.com/t/shadow-outline/41045.md?page=2)
