Floors (haven’t checked about roofs) have an Area parameter that you can call on using the GetParameterValueByName node.
As for dimensions, you will probably need to get the geometry of the object. The way you would get dimension from this depends on the floor shape and what dimensions you need, but for rectangle-shaped slabs, you could get the boundary curves and the lengths of those curves.
It is possible to get the normal vectors of a surface. I am sure there are some packages that contain a node to do it all for you but to do it with out-of-the-box nodes, you would get the surfaces using the node Element.Faces. Then use the Surface.NormalAtParameter node to get the normals of those surfaces. If the surface is flat, you could just use 0.5 for both the u and v inputs of that node.
That will get all of the surface’s normals. If you only want a single surface, you would have to use an if statement based on the normal’s X, Y and Z.