Learning Microsoft Layout

I’m currently in the process of having a new home built so I spent some time last week with Microsoft Layout. This tool ended up being invaluable for planning where speaker wires needed to be run in the new Media Room. Since I learned a few non-obvious techniques along the way, I wanted to share those techniques in a blog post.

Microsoft Layout can be installed here. One of the impressive things about it is that it can run on both the HoloLens and on a WMR Immersive (VR) headsets. When you create a new layout on HoloLens, the first thing it asks you to do is mark the floor, ceiling and each of the walls. The cool thing is that the HoloLens version uses world anchors when creating walls and placing items so it can load the layout back into the same spot the next time you run the app. I did experience some glitches when loading previously saved layouts, however. Several times a speaker or one of the couches would randomly load at the correct location but in the wrong rotation. I think this is just a beta glitch and I hope will be fixed soon.

The application includes several stock 3D models to choose from, including furniture.

It also allows you to also create “placeholders” using cubes and other primitives. When you create a primitive, the app shows you its size in each dimension like a ruler, so if you know the size of a piece of furniture it’s easy to create a box to represent it.

Probably more interesting than placeholders, though, is the ability to import custom 3D models. This is done with the Microsoft Layout Import Tool.

The Import Tool supports the following formats:

FBX, OBJ, STP, SKP, JT, GLTF and GLB

It appears some sort of conversion (and potentially even decimation) happens for every single model you import. This does seems like a bit overkill to me, especially if the model you’re importing is already low-poly. But that may just be a limitation of the beta and hopefully future versions will detect low-poly and skip this step.

Once the import process is completed you can click on the model to configure it. Most importantly, since 3D models don’t have a standard unit of measure, you need to tell the software which units are being used.

You can also specify whether the item can be anchored to floors, walls, ceilings or all the above. Interestingly, this setting does not actually keep you from placing the item on a surface you haven’t selected. Even if you specify “floor only”, you can still snap the item to a wall. What this setting actually controls is whether or not the object will orientate itself to that surface.

Anchor to and Dimensions caused a lot of confusion for me. They were definitely the most difficult thing to get right when using the tool. I was downloading 3D models from Turbosquid and Blend Swap, then using Blender to scale them to the same dimensions of my furniture.

First, I told Blender to set the scene units to “Feet” and “Imperial”

Then I used the Dimensions gizmo (keyboard key ‘N’) to size the model to match my furniture.

It turns out that the option for showing Dimensions in Blender is just a UI feature. Even though you may be seeing the dimensions in Feet and Inches, Blender is still using Meters under the covers. Which is perfectly fine since it’s doing the conversion for us, but for Microsoft Layout there are three special considerations we need to keep in mind:

  1. Import Tool appears to have a bug with scale. Even when I selected Meters, it appeared to be off by one decimal place. This meant I had to sale the model down by 10%.
  2. Import Tool wants the Z axis to be “Up” (which isn’t unheard of but isn’t all that common either).
  3. Import Tool treats anything close to Zero on any axis as the “snapping point” for that axis.

The easiest way I found to get all these things right was to export the model from Blender, then open it in Microsoft 3D Builder.

  1. Correcting the scale is easy, you just move the decimal place over one.
  2. Correcting the rotation is easy. You just type -90 (or 270).
  3. Setting the snapping points is where 3D Builder really shines since it does a bounding box gravitational “snap” any time the object gets close to Zero (on any axis).

In the picture above, the back of the couch is snapped to 0 on the Y axis and the bottom feet of the couch are snapped to 0 on the Z axis. This is what the Import Tool wants.

Now you can finally import the model. Don’t forget to set the units and the anchor options, then you can finally send it over to the HoloLens.

I thought this was going to be over some kind of cloud integration, but it’s actually simpler than that. This capability requires the HoloLens to be running RS4 and connected to the PC via USB, which causes the HoloLens to show up as a storage device.

With the HoloLens connected, you can select one or more models then click “Send” to put the models on the HoloLens.

It turns out all it’s really doing is just copying these files to HoloLens\Internal Storage\3D Objects\Microsoft Layout.

But it’s worth pointing out that whatever format your model was in has been converted to GLB format.

GLB is a base-64 encoded GLTF format. Oh, and remember the configuration we did in the Import Tool for Dimensions and Anchor points? Well, GLTF is a json-based format. So if you crack open the GLB file you can find the following json payload:

"extras": {
	"Microsoft.Layout": {
		"AssetModel": {
			"Id": {
				"TypedGuid": { "Guid": "69cad0e0-27e9-4d44-bd0d-d2c680d4f81d" },
				"Timestamp": "2018-06-30T08:51:05.6606902-05:00"
			},
			"Name": "Couch",
			"Bounds": {
				"Center": {
					"x": 0.0,
					"y": 0.482111931,
					"z": 0.0
				},
				"Size": {
					"X": 2.26015425,
					"Y": 0.964223862,
					"Z": 1.12462878
				}
			},
			"AnchoringSurfaces": 1,
			"BaseDirection": {
				"x": 0.0,
				"y": -1.0,
				"z": 0.0
			},
			"OrientationDirection": {
				"x": 0.0,
				"y": 0.0,
				"z": 1.0
			}
		}
	}
}

Cool huh?

There was one last thing I wanted to try but didn’t have time to get to, and that’s creating a layout in Visio.

This requires the Microsoft Layout add-in for Visio which (in my opinion) was much more difficult to find than it should have been. Searching the web will bring up all kinds of references to the add-in but it won’t provide a link to install it. That’s because the only place to install the add-in is from inside the Import Tool!

You have to have run the Import Tool, then click on About.

Then click the right button under “Get the Visio add-in”.

Don’t forget, the vast majority of users will have 32-bit Office installed even if they have a 64-bit OS. Luckily it won’t let you install the wrong version, I’m just trying to save you time by downloading the right version in the first place.

That’s pretty much all I wanted to share. Personally I think it’s a surprisingly polished app, especially for a beta, and I really enjoyed using it once I got all the kinks worked out. I do wish there were options for changing the up axis and snapping points right in the Import Tool, but other than that the experience was quite good.

If you want to play around with Layout, I also highly recommend checking out this collection of Getting Started Videos.

2 thoughts on “Learning Microsoft Layout

  1. I’ve tried with Visio plugin. It accepte only basic ‘wall’ elements. You have to make up a column by using four small walls. It’s kind of redundant considering I got layout from AutoCad dwg most of the time and Vidio didn’t really leverage it’s ‘office’ template to provide additional value. You can’t addjust the height of the wall in any where which I find useful for the space arrangement. But I was told it’s ‘by design’. Maybe they are focusing on the single task – Layout design but surely leave a opportunity for me to hack.

    1. Thanks for reporting on the Visio add-in. I was hoping it would give me more of an ability to create smaller more intricate walls. For example, in my media room there is an entryway that comes into the room about 2 feet. It’s a very small wall, but when I tried to create that small wall on the HoloLens it actually created a wall that went across the entire room. I don’t know if that is by design or a bug, but I was hoping the Visio add-in would give me more control.

      When you created a layout in Visio and imported it, how did you then align that layout to the physical room on HoloLens. Did the HoloLens automatically detect the shape or was there some sort of manual alignment process?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.