Python Maya add new attribute

බැලීම් 154
පළමු නොකියවූ පණිවිඩය දක්වා මඟ හරින්න

SquashnStretch net

නොකියවූ,
2023 ජූනි 23, 12.41.282023-06-23
සිට Python Programming for Autodesk Maya
Hello Everyone, 
I went back to my attempt on adding new attribute to every rig, like I want hand can be constraint to the head and / or to the Body, Hips, etc ...
If I add al the attributes that I want and I go to the other hand or leg etc and add new attributes, everything's fine, 
the problem happens when I go back to the first hand for instance, and try to add new attribute, then the script fails because it picks the wrong elements to perform the constraints ...

I tried not to use global variables but I cant figure out how to fix it. I would like to have this little code/snippet that once I add the new attribute and create the constraint etc, it would  clear all the variables or what it needs, in order to avoid conflict 
 
Here's the script which create a GUI with a text field where to enter name of the attribute we want to add and after we select an object (an hand for instance), it add the name etc, 
with the second button we select what it need to follow....


thanks in advance 
Flys

SquashnStretch net

නොකියවූ,
2023 ජූනි 23, 13.13.432023-06-23
සිට Python Programming for Autodesk Maya
actually that was the version with globals, I tried many ways but I get the same results.....
thanks

Justin Israel

නොකියවූ,
2023 ජූනි 23, 15.05.562023-06-23
සිට python_in...@googlegroups.com


On Sat, 24 Jun 2023, 5:13 am SquashnStretch net, <squashn...@gmail.com> wrote:
actually that was the version with globals, I tried many ways but I get the same results.....
thanks

Can you share your attempt without globals? 

--
You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/212298a6-ebf7-4ad9-9cf6-f96050987f5cn%40googlegroups.com.

SquashnStretch net

නොකියවූ,
2023 ජූනි 25, 07.21.322023-06-25
සිට python_in...@googlegroups.com
Hello Justin, 
here is the prev version with no globals, i ddnt connect the attributes here because i wanted to solde the parentConstraint first...:

import maya.cmds as mc

def add_attribute_and_create_group(*args):
    attribute_name = mc.textField(attribute_field, query=True, text=True)
    selected_objects = mc.ls(selection=True)
   
    created_groups = []
   
    for selected_object in selected_objects:
        if not mc.objExists("{0}.{1}".format(selected_object, attribute_name)):
            mc.addAttr(selected_object, ln=attribute_name, at="double", min=0, max=1, dv=0, keyable=True)

        group_name = selected_object + "_spaceGrp"
        if not mc.objExists(group_name):
            new_group = mc.group(selected_object, name=group_name)
            mc.xform(new_group, centerPivots=True)
            created_groups.append(new_group)
   
    print('Returned object is:', created_groups)
    return created_groups

def create_parent_constraint(*args):
    selected_objects = mc.ls(selection=True)
    if not selected_objects:
        print("Nessun oggetto selezionato.")
        return

    groups = mc.ls("*_spaceGrp")
    if not groups:
        print("Nessun gruppo creato.")
        return

    for selected_object in selected_objects:
        mc.parentConstraint(selected_object, groups[0], maintainOffset=True)
        print("ParentConstraint creato tra", selected_object, "e", groups[0])


# Creazione della finestra
window = mc.window(title="Add Attribute")
mc.columnLayout(adjustableColumn=True)
attribute_field = mc.textField(text="")
mc.button(label="Esegui", command=add_attribute_and_create_group)
mc.button(label="Parent", command=create_parent_constraint)
mc.showWindow(window)

Thanks for taking a look
F

Justin Israel

නොකියවූ,
2023 ජූනි 26, 00.49.042023-06-26
සිට python_in...@googlegroups.com
From what I can see in your last code example and your description of the problem you are seeing, is the issue due to the selection changing after you run the add_attribute_and_create_group() operation? Because unless I am missing something specific to your select, it seems to work fine as long as I reselect the "hand" again before running the button. If that is the case, then you can make sure to reset the selection to the original, after the creation of your group transforms changes the selection:


If that is not what you are seeing as the problem, maybe you can provide a simple scene as a sample, and exact steps to reproduce the problem using this last code example?

SquashnStretch net

නොකියවූ,
2023 ජූලි 13, 04.55.332023-07-13
සිට python_in...@googlegroups.com
Thanks Justin, 
yes the problem is when I go back and forth between arms to add new attribute, the code sometimes gets confused :)
I'll try your version..
I have another question.. Does it make sense to wrap these kind of codes into a class or wouldn't change much ?

Thanks
F

Justin Israel

නොකියවූ,
2023 ජූලි 13, 05.48.592023-07-13
සිට python_in...@googlegroups.com


On Thu, 13 Jul 2023, 8:55 pm SquashnStretch net, <squashn...@gmail.com> wrote:
Thanks Justin, 
yes the problem is when I go back and forth between arms to add new attribute, the code sometimes gets confused :)
I'll try your version..
I have another question.. Does it make sense to wrap these kind of codes into a class or wouldn't change much ?

The benefit of a class is that you can bind behaviour with state. So your functions become methods. And each instance of the class can track the state between method calls. As an example, a single invocation might create objects and store what it created. Another method could operate on what was previously created. But then a second instance of this class would be an entirely new process that would not become confused with the previous one. That is the trouble with globals. You end up sharing state across many independent actions. 
Mayas scene selection state can also be thought of as a global. Sometimes code tries to rely too much on the current selection which can change, instead of passing inputs and receiving outputs, between functions. 

Classes don't solve every problem though. Sometimes it can be better to just try to make your functions more "pure" and pass in the required inputs to perform the work, and return outputs. 

SquashnStretch net

නොකියවූ,
2023 ජූලි 27, 07.47.092023-07-27
සිට python_in...@googlegroups.com
I guess I forgot to reply to this Justin, sorry and thank you very much for taking the time to explain perfectly ;)

Thanks
F

Justin Israel

නොකියවූ,
2023 ජූලි 27, 16.33.042023-07-27
සිට python_in...@googlegroups.com
සියල්ලට පිළිතුරු දෙන්න
කර්තෘට පිළිතුරු දෙන්න
ඉදිරියට යවන්න
නව පණිවිඩ 0