Space Planning Optimization based on Daylight


I would like to test the room configuration in the office. I thought to use Refinery Space Planning Toolkit.

I have four departments (highlighted in different colours). I have also a list of rooms (rectangles) that I want to pack in a department (my container). The containers are not rectangular.
I think the Packing.PackRectangles node is working with the rectangular container. May I ask you to suggest the best approach for packing rectangles in a not regular container?

Dynamo Pict.1

I would like to follow this approach presented in the video: Hands-on with Project Rediscover: generatively designing Autodesk Toronto's office

  • create neighbourhoods
  • insert there both rooms and desks clusters
  • test different configurations based on daylight analysis

Could you please suggest to me which Dynamo package I should use to play around with room and desks layout when I change the room position or neighbourhood size?
I would be very grateful for some ideas!

Best regards,


First up, space planning is a wicked problem (that’s not my Boston personality shining though, but a real thing worth a googling), and as such you could spend your entire life defining layout generation methods, with each one being better or worse in a given condition. The key is to be develop a means of doing the layout which would produce something which utilizes the logic you might; otherwise the results will be second guessed into oblivion.

  1. Don’t try and boil the ocean right away. Start by placing the neighborhoods (departments) first. Make sure this is completely flexible with changes flexible all around. Once you manage that placing the rooms becomes easier to comprehend. Isocurves on the surface can help, or just placing boxes and intersecting them with the surface of the building.
  2. Placement of objects and elements is generally easiest to do with coordinate systems and parameterization of the ‘host’ object, be it a curve, a surface, or just 3D space. This allows flexing the object being placed, the host, and the location concurrently. Look into the nodes Curve.CoordianteSystemAtParameter, Surface.CoordinateSystemAtParameter, and CoordinateSystem.Rotate. Mastering these outside of the context of a generative problem will make generative design a LOT easier to grasp.
  3. Confirm that your precedent places rooms the way you’d want to; it’s possible (if not likely due to the many other goals they had in project Discover - what project Rediscover was based on) that this example office isn’t the type you’d use at your firm, and therefore the generation method won’t make sense to you. If you’d pack rooms around the interior and/or exterior perimeter take that into account and work out how to do so. I often use a combination of Curve.Offset to find the ‘other wall’ of the rooms from your perimeter curve, Curve.PointAtSegmentLength to find the location of demising walls along the original or offset curve, Geometry.ClosestPointTo to find the point on the offset or original curve, Line.ByStartPointEndPoint to draw the demising walls.
  4. Only consider desks after you have a strong understanding on how your rooms work (and remember rooms only get started after departments); if you are placing cubicles in open office consider defining ‘rows’ via isocurves offsetting a REALLY BIG line defined by a origin point on the surface and a rotation value, or by using a tangent vector to a selected edge of the room. Once you have those curves you can pull coordinate systems along those edges at a consistent distance to define your desk locations. If you’re just looking to put stuff into space more randomly, consider creating coordinate systems on the surface defined by the ‘room’ (Surface.CoordinateSystemAtParamter > CoordinateSystem.Rotate).
  5. When it comes time for analysis, consider moving to the VASA package, which you’ll find faster and more versatile than the analytical toolset built for Project Rediscover. The team developing VASA has incorporated and improved upon many of the capabilities exposed by the Space Analysis package, including lighting.

For other precedents, there will be some good stuff coming at AU in about a month, including a session I’m cospeaking in with my colleague @Dieter_Vermeulen. Because it’s for a coming conference I can’t share anything yet, but “How Generative Design Can Help Optimize New Neighborhoods” just had a repeat session added, so if you’ll be at the conference you might want to consider attending. We’ll be covering a good bit of generation stuff with indirect ties to the sort of stuff you’re after (ie; ‘lots’ instead of rooms, blocks instead of ‘neighborhoods’, and ‘buildings’ instead of desks). If you won’t be there, the recordings and other content will be posted online sometime after the conference wraps up.

1 Like

Dear Jacob,

thank you very much for a such detailed explanation. It would be very helpful to start approaching my project.
I will start analysing your tipis:)

By the way, I checked and this session is not available for a digital pass. Unfortunately, I cannot be there in person. I will wait for the recordings after the conference.

Many thanks!

Have a nice day!


1 Like