Go to: Synopsis. Return value. Keywords.
Related. Flags.
Python examples.
hasMetadata([asList=boolean], [channelType=string], [endIndex=string], [ignoreDefault=boolean], [index=string], [indexType=string], [memberName=string], [startIndex=string], [streamName=string])
Note: Strings representing object names and
arguments must be separated by commas. This is not depicted in the
synopsis.
hasMetadata is NOT undoable, NOT queryable, and
NOT editable.
This command is used to query for the presence of metadata elements
on a node or components. The command works at all levels of
metadata presence, from the existence of any metadata at all on a
node right down to the presence of metadata values set on a
particular metadata Stream index. Filter Flags
- channelType - Only look for metadata on one particular
Channel type
- streamName - Only look for metadata on one particular
named Stream. When used in conjunction with channelType then
ignore Streams with a matching name but a different Channel
type
- index - Only look for metadata on one or more specific
Index values of a Stream. Requires use of the streamName
flag. Does not require the indexType flag as that will be
inferred by the streamName.
- startIndex/endIndex - Same as index but using an
entire range of Index values rather than a single one
- indexType - Only look for metadata using a particular
Index type. Can have its scope narrowed by other filter flags as
well.
- ignoreDefault - Treat any metadata that still has the
default value (e.g. 0 for numerics, "" for strings) the same as
metadata that isn't present. This means that any metadata with
default values will not be reported. It is useful for quickly
finding values that you have changed. When this flag is set you can
also use the memberName filter to narrow down the check to a
particular member of the metadata Structure. Without that filter it
will only skip over metadata where every member of the Structure
has a non-default value.
- memberName - Only look at one particular Member in the
metadata in a Structure. Only used when checking for non-default
values as existence is based on the entire Structure, not any
particular Member.
Operation Flags
- normal mode - Return True for every specified location
containing metadata. This combines with the filter flags as
follows:
- no flag - True if there is any metadata at all on the
node
- channelType - True if there is any metadata at all on
the Channel associated with the given Channel type
- streamName - True if there is any metadata at all on the
Stream with the given name
- index/startIndex/endIndex - An array of booleans ordered
the same as the natural ordering of the Index values (i.e.
specifying index 3, 2, and 4 in that order will still return
booleans in the order for indices 2,3,4) where True means that
there is metadata assigned at that Index. This form is better
suited with the asList modification since with that
variation it is easier to tell exactly which indices have the
metadata.
- asList - Adding this flag switches the return values
from a single boolean or array of booleans to an array of strings
indicating exactly which metadata elements have values. The return
values of the command are changed to be the following:
- no flag - List of Channel types with metadata
- channelType - List of Stream names in the Channel with
metadata
- streamName - List of Index values on the Stream with
metadata
- index/startIndex/endIndex - List of Index values with
metadata, restricted to the set of specified Index values.
string[] |
List of indexes in the filtered list which contain
metadata |
boolean[] |
List of answers to whether the specified item(s) have
metadata |
metadata, component, stream, channel, association
addMetadata, applyMetadata, dataStructure, editMetadata, getMetadata
asList, channelType, endIndex, ignoreDefault, index, indexType,
memberName, startIndex, streamName
Long name (short name) |
Argument types |
Properties |
memberName(mn) |
string |
|
|
Name of the Structure member being checked. The names of the
members are set up in the Structure definition, either through the
description passed in through the "dataStructure" command or via
the API used to create that Structure. As the assignment of
metadata is on a per-structure basis this flag only needs to be
specified when querying for non-default values. If you query for
non-default values and omit this flag then it checks that any of
the members have a non-default value. |
|
asList(al) |
boolean |
|
|
Use this flag when you want to return string values indicating
where the metadata lives rather than boolean values. See the
command description for more details on what this flag will
return. |
|
ignoreDefault(id) |
boolean |
|
|
Use this flag when you want to skip over any metadata that has
only default values. i.e. the metadata may exist but it hasn't had
a new value set yet (non-zero for numerics, non-empty strings,
etc.) See the command description for more details on how this flag
filters the search. |
|
channelType(cht) |
string |
|
|
Filter the metadata selection to only recognize metadata
belonging to the specified channel type (e.g. "vertex"). This flag
is ignored if the components on the selection list are being used
to specify the metadata of interest.
In query mode, this flag can accept a value.
|
|
endIndex(eix) |
string |
|
|
The metadata is stored in a Stream, which is an indexed list.
If you have mesh components selected then the metadata indices are
implicit in the list of selected components. If you select only the
node then this flag may be used in conjunction with the
startIndex flag to specify a range of indices from which to
retrieve the metadata. It is an error to have the value of
startIndex be greater than that of endIndex. See also
the index flag for an alternate way to specify multiple
indices. This flag can only be used on index types that support a
range (e.g. integer values - it makes no sense to request a range
between two strings)
In query mode, this flag can accept a value.
|
|
index(idx) |
string |
|
|
In the typical case metadata is indexed using a simple integer
value. Certain types of data may use other index types. e.g. a
"vertexFace" component will use a "pair" index type, which is two
integer values; one for the face ID of the component and the second
for the vertex ID. The index flag takes a string, formatted
in the way the specified indexType requires. All uses of the
index flag have the same indexType. If the type was
not specified it is assumed to be a simple integer value.
In query mode, this flag can accept a value.
|
|
indexType(idt) |
string |
|
|
Name of the index type the new Channel should be using. If not
specified this defaults to a simple integer index. Of the native
types only a mesh "vertexFace" channel is different, using a "pair"
index type.
In query mode, this flag can accept a value.
|
|
startIndex(six) |
string |
|
|
The metadata is stored in a Stream, which is an indexed list.
If you have mesh components selected then the metadata indices are
implicit in the list of selected components. If you select only the
node then this flag may be used in conjunction with the
endIndex flag to specify a range of indices from which to
retrieve the metadata. It is an error to have the value of
startIndex be greater than that of endIndex. See also
the index flag for an alternate way to specify multiple
indices. This flag can only be used on index types that support a
range (e.g. integer values - it makes no sense to request a range
between two strings)
In query mode, this flag can accept a value.
|
|
streamName(stn) |
string |
|
|
Name of the metadata Stream. Depending on context it could be
the name of a Stream to be created, or the name of the Stream to
pass through the filter.
In query mode, this flag can accept a value.
|
|
Flag can appear in Create mode of
command |
Flag can appear in Edit mode of command |
Flag can appear in Query mode of command |
Flag can have multiple arguments, passed
either as a tuple or a list. |
import maya.cmds as cmds
import maya.cmds as cmds
cmds.polyPlane( name='smcPlane', constructionHistory=False )
# Result: smcPlane #
# Create structures
cmds.dataStructure( format='raw', asString='name=idStructure:int32=ID' )
# Result: idStructure #
cmds.dataStructure( format='raw', asString='name=keyValueStructure:string=value' )
# Result: keyValueStructure #
# Apply structures to plane
cmds.select( 'smcPlaneShape', replace=True )
cmds.addMetadata( structure='idStructure', streamName='idStream', channelType='vertex' )
cmds.addMetadata( structure='keyValueStructure', streamName='keyValueStream', channelType='key', indexType='string' )
# Apply the metadata values to three of the components by selection
cmds.select( 'smcPlaneShape.vtx[8:10]', replace=True )
cmds.editMetadata( streamName='idStream', memberName='ID', value=7 )
# Result: 3 #
# Verify existence of the three newly set metadata values at the node level
cmds.select( 'smcPlaneShape', replace=True )
cmds.hasMetadata()
# Result: [True] #
# Verify existence of the three newly set metadata values at the Channel level
cmds.hasMetadata( channelType='vertex' )
# Result: [True] #
cmds.hasMetadata( channelType='edge' )
# Result: [False] #
# Verify existence of the three newly set metadata values at the Stream level
cmds.hasMetadata( channelType='vertex', streamName='idStream' )
# Result: [True] #
cmds.hasMetadata( channelType='edge', streamName='someOtherStream' )
# Result: [False] #
# Verify existence of the three newly set metadata values at the Index level
cmds.hasMetadata( channelType='vertex', streamName='idStream', index=['8','9'] )
# Result: [True, True] #
cmds.hasMetadata( channelType='vertex', streamName='idStream', index=['8','9999'] )
# Result: [True, False] #
# Verify existence of default metadata values at the Index level. Since the
# index range was established to be 0-17 by assignment and the Stream
# defaults to returning default values for unassigned indices the lower index
# values "0" and "1" do have metadata (as default values) but the higher one
# "9999" in the above example does not.
cmds.hasMetadata( channelType='vertex', streamName='idStream', index=['0','1'] )
# Result: [True, True] #
# Verify non-existence of non-default metadata values at the Index level
cmds.hasMetadata( ignoreDefault=True, channelType='edge', streamName='idStream', memberName='ID', index=['0','1'] )
# Result: [False, False] #
# Get the list of Index values with assigned metadata on the object
cmds.select( 'smcPlaneShape.vtx[8:20]', replace=True )
cmds.hasMetadata( channelType='vertex', streamName='idStream', asList=True )
# Result: [u'8', u'9', u'10'] #
# Set metadata values using the complex index type='string'
cmds.editMetadata( streamName='keyValueStream', memberName='value', stringValue='Starry Night', indexType='string', index='Title' )
cmds.editMetadata( streamName='keyValueStream', memberName='value', stringValue='Vincent Van Gogh', indexType='string', index='Artist' )
# Verify existence of the complex index data
cmds.hasMetadata( streamName='keyValueStream', memberName='value', channelType='key', index=['Title','Artist'], indexType='string', asList=True )
# Result: [u'Artist', u'Title'] #