I also agree with @alan_eu about attaching floors/slabs/roofs to a Toposurface. A User could follow this process when hosting a Floor (or Slab, Roof) to Topography:
a)Inherit Toposurface Points:
-Interior Points: The Floor inherits interior points (XYZ) from the host Toposurface.
-This results in the Floor surface following the Toposurface faces exactly
OR
b)Specify Points:
-Interior Points: User specifies interior points X/Y locations. Initial Z value is inherited from current Host Toposurface.
-This option should notify the user when the topo changes and give them the option to update or not (similar to Wall by Face).
Note, in all cases:
1. Boundary Point X/Y values are dictated by boundary line segment ends. Initial Z value is inherited from current Host Toposurface.
2. All points, Boundary or Internal: Z values may be edited after hosting. When editing the floor shape, and upon selecting a point, the user could specify the point's Z location using any of the following:
a)As an offset from the Host Toposurface Z-Elevation at that Point's XY.
b)As an absolute value (relative to Sea Level)
c)Relative to a specified Level (ie. Level 01, Level 02 etc.).
Cheers!