Idea - mini properties window

Hi

Any ideas how one can create a mini object properties window?

I would like to have a fixed window (at the bottom of rhino) that simply states the object name/block name/layer) when selected.

Cheers

Hi @IanB ,

You could achieve this with an Eto dialog/form UI.

Adding only the features you want and customizing it how you desire.

Hi Michael

Sounds promising but I have no knowledge with Eto dialog/form UI.

Any good pointers to get me started?

cheers

Hi @IanB ,

Are the only properties you need to see the name and the layer the object is on?

If that’s it I can probably mock something up for you.

Do you want this information in a floating UI window, a docked toolbar of info similar to the “status bar” OR drawn on the screen/viewport in say, the bottom center of the viewport?

1 Like

That would be awesome. I requested selected object’ name and layer display at the status bar so many times, but sadly even years later it’s still not implemented in Rhino. Any chance for this to work in Rhino 7, too?

Hi @Rhino_Bulgaria ,
This could be done, my using a custom Alias (command), and the object name and layer name will be displayed in the command bar.

Not sure if I understand what you mean. The idea is to be able to see the object name immediately after selecting a single object or its sub-object (control point, surface edge or a joined surface which is part of a polysurface), without the need to run any extra command. :slight_smile:

Currently, the Status bar of Rhino 7 could show the number of selected objects or the object’s layer (but not both simultaneously), but it’s incapable of showing the object’s name itself, which is super strange. :slight_smile: If two or more objects are selected and they are part of different layers, the Status bar displays “Varies” instead.

I found a similar discussion from two years ago:

Hi @Rhino_Bulgaria ,
I understood your request. But that can only be solved by McNeel.
I offered a workaround with a command :slight_smile:

1 Like

I may take a look at this. What should be that command to display the selected object’s name in the Command line? :slight_smile:

1 Like

Hi @Rhino_Bulgaria ,

Save the python code below as a .py file and call it by creating a new Alias:

import rhinoscriptsyntax as rs

id_L = rs.GetObjects('Select objects to show their name and layer', preselect=True)

for id in id_L:
    name = rs.ObjectName(id)
    layer = rs.ObjectLayer(id)
    print( 'name: {}, layer: {}'.format(name, layer) )

I think you will figure out, if you would like to remove “name” or “layer” from the command menu printout.

2 Likes

Thanks, it works just as described. The only “issue” is that selecting several objects with a different name will display their individual names one per a row in the Command line, so for example selecting 10 objects forces me to scroll the Command line manually. Is there a way to list the names of a bunch of selected objects in the same row, such like:

C-1, HG-3-1, Plate 3, Tube 72, WSD-X, Box 4

You can append the items to lists and then print those lists:

import rhinoscriptsyntax as rs

id_L = rs.GetObjects('Select objects to show their name and layer', preselect=True)

names = []
layers = []

for id in id_L:
    name = rs.ObjectName(id)
    layer = rs.ObjectLayer(id)
    names.append(name)
    layers.append(layer)

names_str = ', '.join(names)
layers_str = ', '.join(layers)

print('Name(s): {} - Layer(s): {}'.format(names_str, layers_str))

That code yields this result:

Name(s): apple, banana - Layer(s): Layer 02, Layer 03

Alternatively, this will seperate the names and layers per line but combine the results of multiple objects:

import rhinoscriptsyntax as rs

id_L = rs.GetObjects('Select objects to show their name and layer', preselect=True)

names = []
layers = []

for id in id_L:
    name = rs.ObjectName(id)
    layer = rs.ObjectLayer(id)
    names.append(name)
    layers.append(layer)

names_str = ', '.join(names)
layers_str = ', '.join(layers)

# print('Name(s): {} - Layer(s): {}'.format(names_str, layers_str))

print("Name(s): " + names_str)
print("Layers(s): " + layers_str)

This yields the following result:

Name(s): apple, banana
Layers(s): Layer 02, Layer 03
1 Like

@IanB, @Rhino_Bulgaria ,

I knocked this up to see if this is what you were imagining. (Look at the bottom left). Quite happy to modify, post a yak or source code if that is useful.

– cs

2 Likes

Not sure if this will help with figuring out which object names are included in the selection. :slight_smile: It also consumes space for a new toobar. I think that Rhino will benefit from having a proper objects list directly in the viewport in the form of OSD (on-screen display). Just like some other programs do.

Here is my vision of a quick on-screen display for the object list. It could display not only the object names, but also how many objects of the same name are selected, their type and whether they are part of a group. It also displays the number of unnamed objects at the bottom of the list.

Optionally, the list could be limited to show a certain amount of objects, while the rest ones could be expanded vertically. In this case, two tiny arrows are shown to scroll vertically across the entire list. Each press of the arrow moves the list up or down by 10 or 20 lines. That will make the process of going up or down much more convenient that moving the list by one line per press of the arrow.

The tiny circles on the left side are tickboxes that are checked automatically upon the selection process. Unchecking some of them will remove those objects from the selection. Clicking in this area will not affect the selected objects, because Rhino will be smart enough to not read this as clicking in the viewport. Consider it a safe area similar to clicking in a proper pop-up window, except that it’s fully transparent and only the text and the tiny icons are visible.

A gear icon could be placed at the right side of “Expand”, in order to get a quick access to detailed options for the OSD list.

Make a prototype for this functionality and create a poll to ask the Rhino users whether they like the idea. :slight_smile:


Here are approximate active zones that will activate the respective buttons on the OSD. The list of selected objects is not an active zone, there force clicking over the object names will be perceived as clicking directly inside the viewport. Only the buttons (tickboxes, tiny arrows and “Expand”) are active zone.

Hey @Rhino_Bulgaria ,

Your goal then, if I’m understanding, is to be able to select things quickly in the model? That’s what this HUD is helping you accomplish?

This is just an optional wish. The main goal is to be able to read the names of the selected objects in a convenient way: automatically, without the need to run an additional command each time. And I think that the on-screen display if a nice way to utilize the entire height of the viewport.

Not to mention that a vertical list for the selected objects allows for extra information to be written next to each of them, such like: type of the object, number of objects that share the same name, whether they are in a group or not.
For comparison, a horizontal list of the objects inside a dedicated toolbar takes a lot of space and is limited by the size of the toolbar, thus reducing the size of the viewport. It’s also much more intuitive to read names from a vertical list, because every object’s name starts from the same initial position stacked one above another.

The tickboxes bring the idea to a new level, allowing for a quick and convenient de-selecting from the existing selection based in the object names. This is very handy for large projects that consist named objects. Most Rhino users working on commercial projects typically name every object in the scene for easier recognition and selection.

P.S. I also added a new picture to the post above.

1 Like

Hi Michael

That would be amazing!

Ideally the object name, layer drop down and a match object button.

Its really a small dashboard so when working with blocks I can click on the block and easily identify the block name for editing.

My preference would be bottom center of the viewport.

This works well. Would it be possible to identify the block name?
Thanks for your help on this one.