Hmm... well, seems like this is the way I'll have to go.  Thanks for
the help, the template code will provide a place to start, at least!

- Paul

On Fri, Jul 2, 2010 at 1:33 AM, philippe leprince <[email protected]> wrote:
>  the maya commands are not fully implemented and I always use the API to
> reliably find an attribute's type :
>
>
>        attrObj = attrPlug.attribute()
>            if attrObj.hasFn( om.MFn.kNumericAttribute ):
>                fnAttr = om.MFnNumericAttribute(attrObj)
>                realtype = fnAttr.unitType()
>                if realtype == om.MFnNumericData.kBoolean:
>                    ...
>                elif realtype == om.MFnNumericData.kByte:
>                    ...
>                elif realtype == om.MFnNumericData.kChar:
>                    ...
>                elif realtype == om.MFnNumericData.kShort:
>                    ...
>                elif realtype == om.MFnNumericData.kLong:
>                    ...
>                elif realtype == om.MFnNumericData.kFloat:
> ...
>                elif realtype == om.MFnNumericData.kDouble:
> ...
>                elif realtype == om.MFnNumericData.k3Float:
> ...
>                elif realtype == om.MFnNumericData.k3Double:
> ...
>                else:
>                    raise drh.Error( '[ MayaAttr ]    Unknown
> kNumericAttribute : %s.%s.%s' % (node,attr,subattr) )
>            elif attrObj.hasFn( om.MFn.kTypedAttribute ):
>                fnAttr = om.MFnTypedAttribute(attrObj)
>                realtype = fnAttr.attrType()
>                if realtype == om.MFnData.kString:
> ...
>                if realtype == om.MFnData.kStringArray:
> ...
>                if realtype == om.MFnData.kDoubleArray:
> ...
>                if realtype == om.MFnData.kIntArray:
> ...
>                else:
>                    m = '[ MayaAttr ]    Unknown kTypedAttribute : %s.%s.%s'
> % (node,attr,subattr)
>                    raise drh.Error( m )
>            elif ...
>
> Further to that, you would have to make sure you are not looking at a
> compound attr. If so, get the children plugs and run that sort of code...
>
> philippe
>
>
> On 02/07/10 00:16, Paul Molodowitch wrote:
>>
>> Unfortunately, what I ultimately need to do is get results similar to
>> those returned by getAttr(type=1)... this is for the implementation of
>> PyNode.type(), which has been using getAttr... but I've found it
>> errors out on the sort of attributes I mentioned.
>>
>> I may ultimately have to do some sort of branched logic similar to
>> what you suggest, and try to find out all the possible types returned
>> by getAttr, and implement my own mapping to them, etc... but I'd like
>> to avoid that if at all possible...
>>
>> - Paul
>>
>> On Thu, Jul 1, 2010 at 1:55 PM, Judah Baron<[email protected]>  wrote:
>>>
>>> I think the safest thing to do is to use the attribute's
>>> mobject.apiType()
>>> func to get the id. It can be pretty complex though because for the
>>> non-standard types, such as string you have to do multiple lookups. For
>>> instance, a string type will return you a type id of 562, for
>>> kTypedAttribute, not exactly a string type. Then you need to create an
>>> MFnTypedAttribute so you can ask it what its actual type is. You can
>>> create
>>> a base type attribute function set, MFnAttribute, to query any attribute
>>> about any of the shared settings, such as isArray, etc.
>>>
>>> I'll stop there because I'm not sure if this is of use to you, Paul.
>>>
>>> -Judah
>>>
>>>
>>> On Thu, Jul 1, 2010 at 12:24 PM, Paul Molodowitch<[email protected]>
>>> wrote:
>>>>
>>>> Hey all - I was wondering if anyone here knew of a way to query the
>>>> 'type' (ie, similar to what getAttr('foo.bar', type=True) would
>>>> return) of an attribute, for ANY attribute.  Specifically, I can't
>>>> seem to find ANY way to query the type of multi-compound attribute's
>>>> children, when the multi does not have any indices created yet.
>>>>
>>>> To see what I mean:
>>>>
>>>> import maya.cmds as cmds
>>>>
>>>> def getType(node):
>>>>    print "%-50s :" % node,
>>>>    try:
>>>>        print cmds.getAttr(node, type=True)
>>>>    except Exception:
>>>>        print "<ERROR>"
>>>>
>>>> getType(u'persp.publishedNodeInfo')
>>>> getType(u'persp.publishedNodeInfo.publishedNode')
>>>> getType(u'persp.publishedNode')
>>>> getType(u'persp.publishedNodeInfo[-1].publishedNode')
>>>>
>>>> getType(u'persp.instObjGroups.objectGroups')
>>>> getType(u'persp.instObjGroups.objectGroups.objectGroupId')
>>>> getType(u'persp.objectGroupId')
>>>>
>>>> Is there another way to query the type of an attribute other than
>>>> getAttr? attributeQuery doesn't seem to have any relevant flags, and I
>>>> couldn't find any way to access this information from the API.
>>>>
>>>> Any ideas?
>>>>
>>>> - Paul
>>>>
>>>> --
>>>> http://groups.google.com/group/python_inside_maya
>>>
>>> --
>>> http://groups.google.com/group/python_inside_maya
>
> --
> http://groups.google.com/group/python_inside_maya

-- 
http://groups.google.com/group/python_inside_maya

Reply via email to