Dear Anders,
Thank you for your query.
First I took a quick look at the Revit 2016 view API enhancements to see whether there is anything useful in there:
View3D additions
http://thebuildingcoder.typepad.com/blog/2015/04/whats-new-in-the-revit-2016-api.html#5.10
I saw nothing relevant, however.
Then I checked and confirmed that the View.RightDirection and View.UpDirection properties are both read-only.
Then I went back to the beginning and looked at your sample code snippet, where I should have started to begin with.
How about changing the up direction of your ViewOrientation3D?
As far as I can tell, you are setting it to a very strange value:
XYZ eye = new XYZ((SecBMin.X + SecBMax.X) / 2, (SecBMin.Y + SecBMax.Y) / 2, 1);
XYZ up = new XYZ((SecBMin.X + SecBMax.X) / 2, (SecBMin.Y + SecBMax.Y) / 2, 0);
XYZ forward = new XYZ(0, 0, 1);
view.SetOrientation(new ViewOrientation3D(eye, up, forward));
Note that the variable that you call 'eye' here is the eye position, which is a point.
The up and forward directions are vectors.
Therefore, it is really pretty weird to define 'up' to have the same X and Y coordintates as 'eye'.
How about trying something like this:
XYZ eye = new XYZ((SecBMin.X + SecBMax.X) / 2, (SecBMin.Y + SecBMax.Y) / 2, 1);
XYZ up = XYZ.BasisY;
XYZ forward = XYZ.BasisZ;
I hope this helps.
Best regards,
Jeremy