Currently, to build a construction, you are required to do the following (a floor is used in this example):
type b-C-f
then designate the height and width with um-kh
once thats done, you are required to chose the building materials.
This is long and tedious, its a bitch if you are designing an outer wall (or floor) which has sides which arnt multiples of size 10 or dont make up a nearly square or rectangular shape. Building walls/floors diagonally is a nightmare. Sure the resizing option helps, but once you have to fill in the odds and ends of the non rectangular shape it becomes really annoying and time consuming.
I do believe there is a system far more efficient that could be implemented: Make it similar to designating an area for mining.
First you would repeat the steps:
type b-C-f
Then you would select the material used, mudstone for example, this step is done here, once, so that you dont have to scroll through the usable materials repeatedly and click enter lots of times. I realize you can use shift when selecting material, but if you are designing a 10x10 size floor you still have to click shift-enter 10 times. choosing the building material first requires only 1 enter instead of possibly 10.
Then you can designate the area to be floored by starting in one corner, pushing enter and moving to the other corner, your rectangle is made but you can also just start clicking to fill whatever is needed if its an odd shape. if you want to build a wall/floor diagonally this method would become FAR more efficient with mouse clicks instead of placing the x and then resizing with uhmk, are you just placing the x on one corner and then moving.
Here is a real df example with clicks counted to show the potential for improvement in efficiency, (ignoring stone removal scrolling through material):
the most efficient way to floor this area is to use uhmk and make a 4x2 (or 2x4) sized floors and then fill in the rest afterwards:
b-C-f
u-u-u-k
(position it)
enter
(scroll to material)
enter
f x 6 (to reselect floor)
u-u-u-k x6
enter x6
(scroll to material)
shift enter x6
you have to repeat this process 5 times so each of the above must all be multiplied by 6
then after this is done you still need fill in the odd 1x1 squares that need to be floored, there are 10 of them so its again multiplied by 10:
f (to reselect floor) x 10
enter x 10
(scroll to material)
enter x 10
the total being around 63 keystrokes.
should my suggestion be implemented, then the above could be done (inefficiently) with:
b-C-f
(scroll to material)
enter
click x 58
the total being around 62 keystrokes, but this is clicking each square individually, nobody does that, when you designate digging do you click out each square individually or do you make squares then drag the mouse to complete the odds and ends. with my method you could floor this area in as little as 36 clicks, the saving coming the 10 1x1s that dont need to have their material selected or their location chosen, you just click 10 times with the mouse.
conversely you can just drag the mouse, to designate this area for digging (which is a close approximation to designate it for flooring with my method) takes 15-20 seconds tops to designate this area. to floor this it with the df current method took me 2 minutes of diligent work.
my method seems to be around 6-8 times faster for this area and its a simple area to be honest, some more complicated shapes can be a complete bitch to floor or wall, with a system like designating digging for miners though it can be made much simpler, not to mention the fact that you can more easily draw out designs of complex walls and flooring.
I understand that there are potential problems with this proposed method though.
for one, you can run out of flooring material if you chose the material (once) before designating the size, but dwarfs already suspend jobs and cancel them because they dont have access to (enough) material (say a collapse of forbidding), so df already has a system to deal with this problem, you dont have to write something brand new just change already existing code that dictates dwarf behavior when materials run out.
another problem with this if you designate flooring on tiles which cannot be floored, a wall for example, but again df already has something written into it to prevent this problem with digging, you cant dig into a construction like a wall, you cant channel out ontop of a wall either, it just flashes with a green/red c, that and code can easily be manipulated so that you cannot floor a wall.
bam, the two problems i can think of already have solutions.