Trying to do this by collecting anonymous points is rather inefficient, you'd better utilize the structure you are creating. The technique depends on how many of these you intend to produce, and how variable they are. If you'll only do these three, do it manually, if you need to produce thousands, it is worth it to spend quite some time to automate things.
You could be creating these programmatically either directly calculating endpoints and drawing lines between, or throwing together blocks from a standard library. If calculating the points yourself, just store the interesting ones to convenient variables for later use.
Using blocks, one way would be using some named marker objects, for example block instances, inside the block to mark potentially interesting points. Then you can search for these to find the dimensioning points.
- If your space of potential structures is restricted, these could be individually named, like curved-top-lower-rail-cornerpoint, or low-end-termination-type 1234-mid-dimpoint or more generic, like vertical-post-lower-endpoint. Deciding which of three of these is the top end post is much easier than trying to guess from a dozen anonymous points which might be that one.
Then, depending on your logic in creating the stairs, you'll need to create the rules to draw the dimensions: if A and B found, draw a vertical dimension between those, located left of the stair. If more than 1 of C exist, draw a horizontal dimension underneath between the leftmost and rightmost. Etc.
--