Menu

The View Orientation Drop-down menu

Developers
Pete
2015-04-13
2015-04-24
  • Pete

    Pete - 2015-04-13

    Hi.

    I had a discussion with another user about a little thing about the drop down menu, that sets view orientation...

    Currently the menu allows 8 items to be visible but, when you open a new scene, 9 items appear on that menu already. So, what happens is that the user rotates the view once, the orientation becomes "Other", then the user wants to return the orientation to "Front" and has to scroll the menu just the one step that does not quite fit the viewable list...

    You might not believe but this is actually very annoying, especially because it feels so unnecessary.

    The menu is made out of a BComboBox, that has a method to change the preferred amount of lines, but though the menu itself can be picked out from the View, I did not find a way to change the behaviour (it is inside an inner class and set private).

    I also tried to make different copy of it and replace the menu by plugin, but that one could not add cameras and lights into the list (the setting of the preferred amount of lines was working though).

    We discussed that something like 16 to 20 lines might be a good amount. 20 may seem long but it is still manageable. Into 16 you could add another camera and a few spot/directional lights and still not have to scroll the menu all the time....

    So:
    1) Is there any way of accessing the amount of lines, for example by a start-up script?
    2) Is it possible to make a custom copy of the menu (in a different package) work with the rest of the software?
    3) Could the preferred number of lines be made a user preference? (I'd favour this option)

    -P-

     
  • Luke S

    Luke S - 2015-04-14

    Pete, I think that the start-up script and plugin options are out. ViewOrientationControl is kind of hard-coded at the moment. I think that the easiest way to deal with this would be to modify the class to have a larger number of available lines. The default max may have been sane at one time, but that was before every spotlight was available as a camera location...

     
  • Peter Eastman

    Peter Eastman - 2015-04-16

    How about the following change. Add this line to the very end of rebuildCameraList() (in ViewOrientationControl.java):

    setPreferredVisibleRows(getItemCount());
    

    That way it will always try to make all items visible. Does that work for you? If so, I'll check it in.

    Peter

     
  • Luke S

    Luke S - 2015-04-16

    It does work, but has an edge case. If for some reason someone adds many lights or cameras to a scene, the box will end up crawling off the top and bottom of the screen.

    On my system, that ended up being about 60 extra view entries, but I have an HD screen, and I keep my system text settings fairly small. I should note, even before the list got that large, it started to have some display issues, as it would have to offset from the dropdown location to fit on the screen.

    I might suggest having:

    setPreferredVisibleRows(20)
    

    and then have the list ordered such that all cameras are above the list of spot and directional lights, just in case someone has a large number of either...

     
  • Pete

    Pete - 2015-04-16

    How about

    if (getItemCount() > 20)
      setPreferredVisibleRows(16);
    else
      setPreferredVisibleRows(getItemCount());
    

    That would take care of the scrolling-for-just-one-item-issue. The numbers don't have to be 16 and 20 but probably not more than 20 and 25 anyway...

    I have also sometimes played with some 20-30 spotlights. The drop down menu definitely needs a limit. :) (I'm not sure what adds the lights into the list, or if the above would work correctly with those, but I agree that those should be after all the cameras.)

     

    Last edit: Pete 2015-04-16
  • Luke S

    Luke S - 2015-04-16

    The directional lights are stored right in SceneViewer.getCameras() backing array.

    Wonder if the name there should be refactored as SceneViewer.getViewLocations() or similar, as right now it implies just the camera objects.

    Should not be too hard to edit the method to order all the cameras before the lights...

     
  • Pete

    Pete - 2015-04-17

    Actually, the cameras do get arranged above the lights already. :D

     
  • Luke S

    Luke S - 2015-04-17

    Uh... Yeah, looks like that method does two passes to build up the list. Should have noticed that from three seconds looking at the code... =D

     
  • Peter Eastman

    Peter Eastman - 2015-04-24

    After thinking about this a bit more, I decided I was making it more complicated than it needed to be, and just called setPreferredVisibleRows(20) in the constructor. I think that should work well. It's checked in.

    Peter

     

Log in to post a comment.