Adding dynamic attributes to multiple objects
-
I think set_attribute is what I was looking for.
-
Is there a way to toggle the attribute so that "Users can edit as a textbox" in the Component Attributes panel?
-
That's all controlled by specially named attributes in the "dynamic_attributes" dictionary. If you have Pro, you can edit them in the Attributes Editor, so I'm assuming you are using the Free version?
-
Here is a DC with a single editable Textbox for an attribute named Color. Maybe it'll help
-
I am using Pro but I am more interested in mass dumping attributes to objects that users using Pro can see. I am able to add the attributes using set_attribute but they show up as "User cannot see this attribute". How can I add an attribute so a user can see it or edit it?
Thanks,
-
You need to inspect the "dynamic_attributes" dictionary. It uses meta-attributes that begin with an underscore to store meta-data about other attributes, such as if it has an entry in the Options dialog.
So for the model I attached previously, there is an attribute named "color", but also several that begin with "_color". These are what control how it appears in the Options dialog. I don't know the details of what all the meta-attributes are or do. You probably will need to reverse engineer them.
-
So I was able to add a "Quantity" textbox to the user options dialog with the following code:
ad = selection[0].definition.attribute_dictionaries["dynamic_attributes"] ad["quantity"] = "1" ad["_quantity_access"] = "TEXTBOX" ad["_quantity_formlabel"] = "Quantity"
-
Didn't realise one could set attributes like that.
-
Yeah, it wouldn't actually be too hard to create a DC editor for non-pro users.
I was considering doing a specialized one just for animating doors and windows.
-
I meant the way you added items to AttributeDictionaries. I've always used the explicit
set_attribute
method. -
set_attribute and get_attribute are probably better to use in the long run, if changes were ever made internally they would likely still work.
-
heeeey? where was that comment of being able to remove attributs using set_attribute? mind trixies!
-
It was wrong! I was thinking of something else. There was what I thought an odd way to delete an attribute, but I think it was an odd way to delete the entire dictionary.
-
set_attribute
can potentially kill the whole dictionary?? -
Ok, this is what I was remembering:
delete_attribute can delete the entire dictionary if the value param is not used.
http://code.google.com/apis/sketchup/docs/ourdoc/entity.html#delete_attribute
@unknownuser said:
Entity.delete_attributeSketchUp 6.0+
The delete_attribute method is used to delete an attribute from an entity. If only the dictionary_name is given, then it deletes the entire AttributeDictionary. Otherwise, delete_attribute deletes the attribute with the given key from the given dictionary.
-
@jim said:
Ok, this is what I was remembering:
Entity.delete_attribute can delete the entire dictionary if the value param is not used.
AGREED !
There should have been (should be,) an explicit Entity.delete_dictionary method (even if it calls the other one with 'secret' parameters. Of course the safest way is to rename and then override the delete_attribute method, so only a call to a delete_dictionary method would do the deletion.
Which may actually be how things work with delete_attribute, ie if num args == 1 then it calls the Entity.attribute_dictionaries.delete(arg) method. ) -
Guys,
Thanks for your help! Great insight.
Advertisement