As a fairly kludgey solution, you could attempt to measure the “amount” of spacing needed between the natural height of the Text and the height of the available area, and account for it with spacing.
So something like this:
new go.Binding("spacingBelow", "height", function(h, obj) {
var letters = obj.part.data.key.length;
var lineHeight = 26; // 24px font = about 26 pixels high
var height = lineHeight * letters;
var deltaHeight = h - height;
// Spacing is only between letters, so use letters - 1
if (letters < 2) return 0; // edited to reflect walter's suggestion
return (deltaHeight / (letters - 1));
})
I think almost everyone would expect a rotated node to have the same appearance as seen from the new angle.
Besides, if you counter-rotated the TextBlock, I do not believe there is a way to control the distance betwen letters, unless you implement it by having a separate TextBlock for each letter. And doing so would potentially break in some languages.