Object Colors - can it be simpler?

I find it overly complicated that an object has three different colors:

  • its material’s color
  • its print color
  • its display color

I would love it if one could set the display and print colors to “none” or “material” and see the object rendered in the material’s color in the Shaded view and in printing. Is this possible?

I’d like this to work with layers too. Basically I’d like the color used to display an object in Shaded was determined like this:

  • If the object has a “display” color use it, otherwise…
  • if the object’s layer has a “display” color use it, otherwise…
  • if the object has a material use its color, otherwise…
  • if the object’s layer has a material use its color

In other words, I can imagine wanting different colors for Shaded or printing once in a blue moon, but most of the time I just want an object to have ONE color that’s used everywhere.

Can someone tell me if this capability already exists and I’ve just missed it?

Thanks!

This stuff is set up that way for a reason, it is designed to give people a maximum amount of flexibility to work the way they want. More options sometimes means things get more complicated, that is always the trade-off. But IMO Rhino’s display/print color system is fairly simple to work with.

Often times during the modeling phase people don’t necessarily want to set up materials for rendering, that comes more towards the end. So an object or layer will have the default material unless otherwise assigned. Render materials are (can be) pretty complex, not just color, but texture, bump, etc. Render color/material is only shown in a “rendered” viewport - again, that is done on purpose, many people do not want to model in a rendered display mode.

The print color being different from the display color is also used by people who need to have specific colors when printing - colors that don’t necessarily match the display colors.

The print dialog should also easily give you the choice of which color to use when printing - however unfortunately there are still a number of bugs in the system that desperately need fixing.

The way the display color system works with objects:

By default, in wireframe and various shaded display modes, an object’s display color is the layer color (by layer), when color has not been individually assigned (by object).

Assigning a display color directly to an object (by object) overrides the layer color.

By default the object’s print color is the same as the layer color. If one assigns a color directly to an object its print color does not change automatically - it will stay by layer - one must also assign the “display” color as the print color if one wants.

Working in a rendered mode will show the object’s material - color, texture etc. for surface/mesh objects; curves do not have a render material so they stay the display color - if they are shown at all.

Now we add the complications:

Custom display modes can also be set up to assign specific colors and materials to both curves and surface objects, which will the override the other display colors

Blocks can take on color assignments from the layers the original objects were on or the individual color the object was assigned or the color of the layer the block instance is on… Depends on how they are set up.

I am not suggesting that all these color options should be removed from Rhino! I’m only asking whether by default an object or a layer can have only ONE color that’s used in all views, until such time as a different display or print color is needed. :slight_smile:

Actually, I realized after writing this post that what I want most is simplicity in expressing the color of Layers, since I never set the color of an object, only of the Layer it’s on. Is there a way to express NO display or print color and have the layer use the color of its material?

If not, is there a command to copy the color of the selected layers’ materials to their display and print colors?

If not, can someone out there who knows Python and the Rhino Python API please write me a script to do this? :slight_smile:

I still don’t know Python, but I tweaked a Python script that I found to operate on layers instead of objects. It works! It’s attached.

I’d still like to know if the more automatic functionality I describe can be invoked somehow. Thanks!

Christopher

SetLayerColorsFromMaterial.py (426 Bytes)