I don’t know how difficult (or if its even possible) it is to achieve, but all these issues would go away if you were to just be able to set a numerical visual priority on a per object and per layer basis.
Microstation have got it right in this case, as per TomasTs suggestion above.
The order is for vector printed output and may not exactly be the same as what you see on the screen. Curves do pay attention to layer order. The draw order commands like “SendToBack” override all layer order and place objects behind everything else.
Definitely worth a try! Sounds not too hard to implement, too.
However, the trick will be to make editing/ handling these indices conveniently.
What if you like to raise the index by, say, 1 for the topmost 15 layers?
Do new layers automatically get a continuous index, or is it all left to the user?
What happens when object indices are the same? Newer created object are drawn on top?
What happens if layers share the same index? I guess what happens now - higher up layers are drawn in top.
The MicroStation way of multiplying the layer index by 1000 (or something) and adding the object index sounds a bit hacky. Are there maybe even 2 independent indices, one for objects, one for layers, where layer index always takes precedence?
Layout details should definitely be part of draw order sorting! If a detail sits on a higher layer than another detail, everything inside it should be drawn on top of the other, no matter what the indices inside are.
Any changes needed to the old bringtofront/sendtoback commands then?
Hi Eugen - Yes it would solve a lot of issues, at least when working in 2D. To your questions:
For layers, presumably there would be another column for Priority in the layer manager. Like print width for instance, you can change multiple layers at a time, though you can’t increase them all by one you can set an absolute number for each. Perhaps you could use grasshopper to do something like this.
I believe the default priority in Microstation is 0 (you can have negative and positive priorities). I think all new layers should get a default priority which can be set by the user.
If all layer priorities are equal then it could revert to layer order as you suggest. Additionally newer created objects would appear above older ones.
I agree its inelegant to some degree, but it works well because it means layer priority sets the major priority levels and object level is more for fine tuning. Two independent indices is overcomplicating it for me, but I’m sure there is a more elegant way to do it! At least the object properties could display the objects effective priority (layer + object) so one would have an exact numerical value displayed.
Re: Layout details, this is why microstation multiplies references by 1 million. (Ie. object > Layer > Reference priority steps up by a factor of 1000 each time.) But it still gives you the flexibility to bring other objects above/below if you wish.
I would eliminate bringtofront/sendtoback as priorities would supersede this method. A major problem with these is that their positions are relative, like a deck of cards and all you can do is move cards around and sometimes multiple shuffles need to be made to get the correct order.
Priorities I imagine as more like one of these:
Every level has an absolute position, allowing you to shuffle objects per layer, but also giving you the flexibility to put an object exactly where you want it.
Waiting for this issue to be solved since I started working in Rhino in 2016.
Last year I had an idea to implement Rhino workflow in the whole office. I really hoped it could become a standard in my work environment. However, one of the reasons it did not happen was the draworder issues. I guess I am not the only one here on the forum…
You do amazing work with this software - subds, nurbs. Please don’t let such a basic issue spoil Rhinoceros!