diff --git a/LayoutFunctions/LayoutFunctionCommon/LayoutStrategies.cs b/LayoutFunctions/LayoutFunctionCommon/LayoutStrategies.cs index 1883daa3..a510f175 100644 --- a/LayoutFunctions/LayoutFunctionCommon/LayoutStrategies.cs +++ b/LayoutFunctions/LayoutFunctionCommon/LayoutStrategies.cs @@ -33,6 +33,12 @@ public static LayoutInstantiated InstantiateLayoutByFit(SpaceConfiguration confi layoutInstantiated.ConfigName = key; break; } + else if (config.AllowRotatation && config.CellBoundary.Depth < width + 0.01 && config.CellBoundary.Width < length + 0.01) + { + layoutInstantiated.Config = GetRotatedConfig(config, -90); + layoutInstantiated.ConfigName = key; + break; + } } if (layoutInstantiated.Config == null) { @@ -849,5 +855,33 @@ public static void SetLevelVolume(ComponentInstance componentInstance, Guid? lev } } } + + private static ContentConfiguration GetRotatedConfig(ContentConfiguration config, double degrees) + { + var transform = new Transform().Rotated(Vector3.ZAxis, degrees); + var box = new BBox3(new List { transform.OfPoint(config.CellBoundary.Min), transform.OfPoint(config.CellBoundary.Max) }); + + // Create new config + var newConfig = new ContentConfiguration() + { + CellBoundary = new ContentConfiguration.BoundaryDefinition() { Min = box.Min, Max = box.Max, }, + ContentItems = new List() + }; + + foreach (var item in config.ContentItems) + { + var newItem = new ContentConfiguration.ContentItem() + { + Url = item.Url, + Name = item.Name, + Transform = item.Transform.Concatenated(transform), + Anchor = transform.OfPoint(item.Anchor) + }; + + newConfig.ContentItems.Add(newItem); + } + + return newConfig; + } } } \ No newline at end of file