Feature Request : Assign Attributes User Text to objects by Layer

Hello

I would like to request a feature where Attributes can be added to objects by layer, the way we apply Materials to objects by layer. The reason I ask this is that whenever I want assign my custom Attributes.csv to objects, I would have to select each and every object and Import the text or use the Match Attributes command and click an object with an attribute to match.

This is quite cumbersome and time consuming especially if I continue to create new objects that has to have my Attributes. Why canā€™t we just :

  1. Import/load our Attribute User Text and let Rhino save it in a list or dropdown list in a panel.
  2. Have the additional option to Assign it By Layer, Object, etc.(The way we assign Materials)
  3. Have the option to Filter by Object Type so that my custom Attributes would only be assigned to specific object types of my choosing i.e. a Curve, Point or Brep.

This system can speed up modeling especially when workflows depend on grasshopper attribute extraction (Elefront, Human, Heteroptera etc.)

I hope this request is taken seriously.

Thanks :slight_smile:

Hi @attheeast18

It would be good to get a better understanding of your workflow first. You are mentioning the objects need to be processed in grasshopper later on. If that is the case, you could make rules in grasshopper that assign those attributes based on object layer and type.

HI, @Gijs

Thanks for replying. The workflow Iā€™m talking about is starting from native rhino commands. In this environment we all know we can add attributes to objects. But itā€™s tedious especially when it comes to creating new objects when doodling with curves , breps etc. Creating a new geometry entails me to click on the attributes tab again and click on the match attributes command and then click again to an existing geometry with said attributes. I think a better way is what I mentioned where we can just import all the User Attribute Text files we made; store it in the panel as a dropdown list (Like a material list), then when need be i could just apply it to an object, layer etc. The thing with grasshopper is a few steps down the line. Iā€™m focusing on the native rhino UI.

You can just set up some aliases for that

-_SetUserText ā€œkeyā€ ā€œvalueā€

For instance I have a phase attribute for a different buildings in a masterplan. I just run an alias called ā€˜Phaseā€™ and type the phase number.
-_SetUserText phase

Or if you know you are only going to need lets say 3 phases then you can just make 3 aliases of Phase1, Phase2, Phase3.
-_SetUserText phase 1

This has been working well for us without having to touch grasshopper yet for automating the user text.

I donā€™t understand what aliases have to do with my request. Iā€™m asking for an extremely easier way where we can apply our User Text Attribute like a material. Like below:

That way, every geometry I create on that layer automatically inherits the User Text Attribute. No more extra clicking, no more Aliases. Itā€™s basically how BIM Softwares operate, where Attributes (Parameters) are stored and are easily accessible and assigned to objects that are filtered either by type, layer, etc.

1 Like

Attribute texts are object properties. Layers are too in fact. Assigning it based on layer is not 100% straightforward therefore. What would you expect to happen to the attribute once the object moves to another layer?

Then I would expect the attributes to update and inherit the Attribute of the new layer, if it has an assigned attribute. If not, then the User attribute text stays the same.

okay so it remains a layer property and is not applied to the object.
Apparently this is already possible through scripting, but not exposed in the UI.
Iā€™ll add this thread
RH-60908 UserText: Expose Layer UserText in UI

Hi, @Gijs

I saw this thread too last night and it is very similar to what Iā€™m asking for. But I want the the Attribute User Text to be applied to an object. What I mean by this is - say we load our custom Attribute User Text .csv. to Rhino and it will store it like a Standard/Setting. Then we can just select that from a dropdown list in the properties panel as opposed to loading it from a folder in our computer. Then, we apply it ā€œBy Layerā€ which would bring up a check list of the existing layers in our rhino model that we can check (Like the way we apply materials by layer). Then all the Keys and Values would be applied to the objectā€™s Attribute User Text.

But that is a different thing. Before you mentioned that changing the object layer will also change the attribute. That would mean the attribute on the object needs to stay aware that it was applied by layer, and be removed when that object changes layer.

If we would expose the layer attribute text. you could simply lookup the object, check on which layer it is, then check if that layer has an attribute and use that when you start processing your objects (e.g. in gh or script)

Let me try to explain my workflow better. I made a Ramp Creator grasshopper script that takes curves and uses their Attribute User Text as inputs for width, length, height, slope %. As you see below I have made 3 curves and I imported my custom Attributes.

The problem Iā€™m focusing on is the lack of dynamism with the Rhino Attribute User Text. As Iā€™ve explained in earlier posts, to assign these attributes I have to do - Select objects in Layer>Import Attributes>. I have to do this every time I create a new geometry. Now if we have a central attribute that we have the option to apply By Layer. Then I just have to create geometry on a layer and Iā€™m off to the races. I know that every geometry I create from that layer will have those attributes. In the context of my grasshopper script I will only need to change the Values of the Attribute User Text. Now, I understand that there may be problems tracking the changes in attributes. Here is my proposal to fix those.

Dynamic Attributes - Attributes can be assigned in 2 states, ā€œType Attributeā€ and ā€œInstance Attributeā€. Type Attribute means that the Keys and Values are assigned to every object on that layer and is by default ā€œLockedā€ and ā€œUniversalā€ (Meaning we canā€™t change the Values i.e. Width = 6 canā€™t be changed unless we ā€œUnlock Itā€). Instance Attribute on the other hand is an ā€œUnlocked Type Attributeā€. I would argue that the current Attribute User Text is already an Instance Attribute because itā€™s Keys and Values exist on a per instance level(If I change the Key & Value of one object, it doesnā€™t affect the Key & Value of all the other objects).

This is what Iā€™m proposing. Iā€™m actually taking a lot from Revit. Its based on their Parameter System and is really useful in organizing data as well. I think this needs to be discussed more. Itā€™s hard to explain myself in a few posts. Thanks.

Edit: I forgot to upload the file. Feel free to test out the Grasshopper script. Note that it requires Elefront 5 & Telepathy plugins to work.

Dynamic Attribute User Text.3dm (93.9 KB)
Example for Gijs.gh (65.5 KB)

Here is a link explaining the Type parameter and Instance parameter system in revit.