You've inspired me to review transformation matrices when I get some time Lee. I'm afraid I've become quite rusty on matrix math - it's been >25 years.
I have in my library a copy of the old Express Tool version of CHSPACE (obviously written in LISP).
It uses the following approach:
From within the viewport...
1 - Set the UCS to "view" - that of the viewport.
2 - Record a ratio 'c' of the viewport height (group code 41) to the system variable "viewsize" to use later for scaling.
3 - Create a base point for a block definition by translating 0,0,0 from world to the current view UCS.
(setq d '(0.0 0.0 0.0)
d (trans d 0 1)
)
4 - Create a block of the selection set using the base point 'd' as calculated in step 3.
5 - Translate 'd' twice more to make it suitable as a block insert point in paperspace.
(setq d (trans d 1 2)
d (trans d 2 3)
)
6 - Insert the block prefixed with "*" to invoke exploding, in paperspace (with UCS world), at the translated insert point 'd', scale 'c' and rotation 0.0.
7 - If any of the entities were DIMENSIONS or LEADERS it processes them further, modifying their dimscale and dimlfac using the scale factor 'c' and if appropriate, values extracted from each entity's "ACAD" extended data.
8 - Purge the block definition.
It's the translation steps that intrigue me. Having become rusty on matrix maths, I do wonder if there are any shortcuts to the translation steps?
And I'd like to think that there is a way to calculate a transformation matrix based on extracting what the current UCS values are, instead of changing the UCS and using "Command" like the extended tool version does? But my matrix math needs a fair bit of revision.
If you didn't have access to the old Express Tool function, perhaps the process described above may give you a brainwave?