Thursday, January 22, 2015

Dynamo - Spanish Roof Tile Generator

Why just few people know how awesome Dynamo is?
I suppose there are two representative reasons.

1. Hard to learn.

Not as difficult as learning other script based programming for sure. But not as easy as learning Revit. It must be much easier to learn if there are enough resources like the ones of Revit. I expect it should be solved soon or later.

2. Regarded as not very practical yet.

People says that Dynamo has a lot of potential. It can be easily regarded as it's useless yet when we say something has potential. I love computational design.  But It's true that there are just few projects which can be treated with computational design in real world.  Most of architects are still using traditional design codes or process even though they're using Revit.

So I created an example which can make some interests from the architects who are thinking Dynamo has only potential yet.

Roof Generator

This dyn places muliple AC Rooftile families at proper faces of selected sloped roof from Revit at once.

When you select a roof element, it will find six different parts and separate them as several lists as below.

1. Surfaces for plate tiles.
2. Eaves
3. Hips (connected with eaves)
4. Hips (disconnected with eaves)
5. Valleys
6. Ridges

Finding surfaces and placing plate tiles were not very difficult. But finding each of rest parts were quite complicated and made dyn larger than I expected.

Watch what I created.

Brief Poccess

1. Filtering above surfaces from all surfaces.

    Create lowest xy plane and use Geometry.DoesIntersect.

2. Find perimeter curves of each surfaces.

   Most of perimeter curves makes their first curve from eave.

I like this order
But, some of perimeter curves make their last curve at eave.
I don't like this order
This is quite important issue in this case. Because AC family will be placed in order of perimeter curves. Find some last-curve-eave series and use List.ShiftIndices.

3. Find valley and mountin vertex from eave-polycurve.

These will be end points (or start points) of both valleys and hips of the roof.
I explained about it at my last post.

4. Find hips & valley curves.

Use Geometry.DoesIntersect.  between new lowest plane and rest (not eaves) of curves. Only hips and valleys which have there end points at eave level intersect. and it will naturally find unique curves from overlapped series.

5. Find ridges and another hips as unique curves.

Now. rest of curves are all ridges or hips which are not connected with eaves. Only problem is that they are all overlapped also like above.

Overlapped curves have their mid point at same place. I used this concept to find unique ones.

6. Place proper families at proper location

This is the easiest part. Just use the families I published earlier.
Use all start points for plate tiles and use start & end points for ridge and hip tiles.
The only thing I had to do was creating Roof tile ACs for multiple points cases.

6-1. If you don't want to make too many similar families just for points-count-cases, you can cover all cases with one AC family by splitting perimeter curves.

 I used only original nodes in Dynamo library. I suppose there must be better ways to do the same. It should be much easier(or shorter) with multiline codes.

 I hope you found something beyond potential of Dynamo through my post.

  You can get above files as usual.

Enjoy. :)


  1. That is seriously cool HyunWoo Kim! Will have to come back at look at it when I get a little deeper into Dynamo. Thanks for posting this, it's very inspiring (And starting to showcase some of the level of modelling capability one would expect from 3D BIM)

    1. hat is seriously cool HyunWoo Kim! Will have to come back at look at it when I get a little deeper into Dynamo. Thanks for posting this, it's very inspiring (And starting to showcase some of the level of modelling capability one would expect from 3D BIM)

  2. Good job! impressive as usual :)
    I found myself more comfortable with line codes because it's easier to "get lost" in a Dynamo solutions, specially if you are not the one who wrote it in the first place, but it's a very powerful tool with many ready-to-use chunks of code at your fingertips. The dynamic behaviour is definitely a goodie, in conjunction with the fact that lets you import external libraries (look for zero touch) the capabilites are virtually endless. This is good not only for the modelling part, but also for managing data and keep it consistent between models and external files like a spreadsheet. Once again well done! :) cheers -Paolo

  3. 멋집니다! 현우씨한테 정말 많이 배웁니다. 그리고 감사합니다.

  4. I used your old spanish tiles family for a uni project years ago. Nice to see it revamped through Dynamo!

  5. Just arrived to Dynamo, very impress with your job, Congratulations from Spain!

  6. how we can learn dynamo from scratch can please give any link.

    1. see this link. i also learn from this site

      also see this link.

      and watch AU CLASSES for same.

      good luck. :-)

  7. how do i use this ? do i need another pugin ? drag and drop in Revit ?

  8. sa ne marche pas tres bien chez moi des endroits ne sont pas totalements couvertes par le stuiles pour certain et ne le sont memes pas pour d'autre
    s'il vous est ce ue je pourait avoir une aide dessus cordialement

  9. This has such potential but it doesn't work like it should. On the more complex roofs it will only place the panels on one face not all faces. It does fine on the ridges and valleys. Is there an update?

  10. hi, your result Alternative 1# has a problem with warning: "AdaptiveComponent.ByPoint operation failed. The arguments have issues" and in Revit file some faces can not place the roof tile. So may you give me any ideas?

  11. Hi HyunWoo Kim, how are you?
    How do you may shared this .dyn?
    Thanks for you help.
    Best regards.


  12. can you make the dynamo file available?

  13. Hi HyunWoo Kim,

    Is there a way you can send me the .dyn for the 'Opening Generator By Dynamo (from linked model)'

    From the video i can't see the last steps.

    Thank you!!!



  14. Hi
    Can you confirm what families/adaptive component need to be loaded into the roof generator dyn

    1. See the screen shot at the post above. u can't miss it.


  15. Hello it is possible, a dynamo script that identifies only eaves, ridges, hips and valleys separately and that places an element type to get their length and make their count, I know that it is possible in revit but it is done manually, in dynamo It would be all automatically, is it possible?

    1. Everything you mentioned are possible with modifying my code a little. You can do it if you can understand how my code works,


    2. Great!
      Could you guide me a bit, at least with the eaves, as I can only have the eaves and put fascia elements on it automatically from dynamo.
      I could buy you a few coffee.

  16. Hello Hyun,
    Congrats for the tool you created, it's look amazing.
    I am interested by testing it.
    Are you still sending it for a coffee ?

  17. Hello Hyun i am using one of your adaptatively roof families and i am notice that sometime some of the tiles doesn't cut from the edges. Is there any work around on how to remove that extra unwanted piece of tile?

  18. what kind of dynamo do you used....dynamo sandbox, dynamo revit, or dynamo studio

  19. Hello, i just bought your dyn and the rooftile families.
    Do you have a short description how to use it? And where to place the dyn file and the tilefamilies?

    1. You can see how it works from the video above.
      If you have any problem, use the message board at left.