This command allows a namespace to be created or set or removed. A namespace is a simple grouping of objects under a given name. Namespaces are primarily used to resolve name-clash issues in Maya, where a new object has the same name as an existing object (from importing a file, for example). Using namespaces, you can have two objects with the same name, as long as they are contained in differenct namespaces. Namespaces are reminiscent of hierarchical structures like file systems where namespaces are analogous to directories and objects are analogous to files. The colon (‘:’) character is the separator used to separate the names of namespaces and nodes instead of the slash (‘/’) or backslash (‘’) character. Namespaces can contain other namespaces as well as objects. Like objects, the names of namespaces must be unique within another namespace. Objects and namespaces can be in only one namespace. Namespace names and object names don’t clash so a namespace and an object contained in another namespace can have the same name. There is an unnamed root namespace specified with a leading colon (‘:’). Any object not in a named namespace is in the root namespace. Normally, the leading colon is omitted from the name of an object as it’s presence is implied. The presence of a leading colon is important when moving objects between namespaces using the ‘rename’ command. For the ‘rename’ command, the new name is relative to the current namespace unless the new name is fully qualified with a leading colon. Namespaces are created using the add/addNamespace flag. By default they are created under the current namespace. Changing the current namespace is done with -set/setNamespace flag. To reset the current namespace to the root namespace, use ‘namespace -set ”:”;’. Whenever an object is created, it is added to the current namespace. If the given name is qualified then any intervening namespaces which do not yet exist will be automatically created. For example, if the name of the new namespace is specified as “A:B” and the current namespace already has a child namespace named “A” then a new child namespace named “B” will be created under “A”. But if the current namespace does not yet have a child named “A” then it will be created automatically. This applies regardless of the number of levels in the provided name (e.g. “A:B:C:D”). The -p/-parent flag can be used to explicitly specify the parent namespace under which the new one should be created, rather than just defaulting to the current namespace. If the name given for the new namespace is absolute (i.e. it begins with a colon, as in ”:A:B”) then both the current namespace and the -parent flag will be ignored and the new namespace will be created under the root namespace. The relativeNamespace flag can be used to change the way node names are displayed in the UI and returned by the ‘ls’ command. Here are some specific details on how the return from the ‘ls’ command works in relativeNamespace mode: List all mesh objects in the scene:ls -type “mesh”;The above command lists all mesh objects in the root and any child namespaces. In relative name lookup mode, all names will be displayed relative to the current namespace. When not in relative name lookup mode (the default behaviour in Maya), results are printed relative to the root namespace.Using a “*” wildcard:namespace -set myNS;ls -type “mesh “*”;In relative name lookup mode, the “*” will match to the current namespace and thus the ls command will list only those meshes defined within the current namespace (i.e. myNs). If relative name lookup is off (the default behaviour in Maya), names are root-relative and thus “*” matches the root namespace, with the net result being that only thoses meshes defined in the root namespace will be listed.You can force the root namespace to be listed when in relative name lookup mode by specifying ”:*” as your search pattern (i.e. ls -type mesh ”:*” which lists those meshes defined in the root namespace only). Note that you can also use ”:*” when relative name lookup mode is off to match the root if you want a consistent way to list the root.Listing child namespace contents:ls -type mesh “*:*”;For an example to list all meshes in immediate child namespaces, use “*:*”. In relative name lookup mode “*:*” lists those meshes in immediate child namespaces of the current namespaces. When not in relative name lookup mode, “*:*” lists meshes in namespaces one level below the root.Recursive listing of namespace contents:Example: ls -type mesh -recurse on “*”The -recurse flag is provided on the “ls” command to recursively traverse any child namespaces. In relative name lookup mode, the above example command will list all meshes in the current and any child namespaces of current. When not in relative name lookup mode, the above example command works from the root downwards and is thus equivalent to “ls -type mesh”.
Long name (short name) | Argument Types | Properties | |
---|---|---|---|
absoluteName (an) | bool | ||
Command will return namespace values in absolute form if return value type is namespace. The absolute namespace name refers to the name started from root namespace name and prefix with ”:”. |
|||
addNamespace (add) | unicode | ||
Create a new namespace with the given name. Both qualified names (“A:B”) and unqualified names (“A”) are acceptable. If any of the higher-level namespaces in a qualified name do not yet exist, they will be created. |
|||
collapseAncestors (ch) | unicode | ||
Delete all empty ancestors for the given namespace. Empty namespace refers to a namespace that does not contain any DAG objects or other nested namespacesFlag can appear in Create mode of commandFlag can have multiple arguments, passed either as a tuple or a list. |
|||
exists (ex) | unicode | ||
|
|||
force (f) | bool | ||
|
|||
isRootNamespace (ir) | unicode | ||
|
|||
moveNamespace (mv) | unicode, unicode | ||
Move the contents of the first namespace into the second namespace. Child namespaces will also be moved.Attempting to move a namespace containing referenced nodes will result in an error - use the ‘file -e -namespace’ command to change a reference namespace.If there are objects in the source namespace with the same name as objects in the destination namespace, an error will be issued. Use the ‘-force’ flag to override this error - name clashes will be resolved by renaming the objects to ensure uniqueness. |
|||
parent (p) | unicode | ||
Used with the -add/-addNamespace or -ren/-rename to specifiy the parent of the new namespace. The full namespace parent path is required. When using -add/-addNamespace with an absolute name, -p/-parent will be ignored and the command will display a warning |
|||
recurse (r) | bool | ||
|
|||
relativeNames (rel) | bool | ||
Turns on relative name lookup, which causes name lookups within Maya to be relative to the current namespace. By default this is off, meaning that name lookups are always relative to the root namespace. Be careful turning this feature on since commands such as setAttr will behave differently. It is wise to only turn this feature on while executing custom procedures that you have written to be namespace independent and turning relativeNames off when returning control from your custom procedures. Note that Maya will turn on relative naming during file I/O. Although it is not recommended to leave relativeNames turned on, if you try to toggle the value during file I/O you may notice that the value stays “on” because Maya has already temporarily enabled it internally.When relativeNames are enabled, the returns provided by the ‘ls’ command will be relative to the current namespace. See the main description of this command for more details. |
|||
removeNamespace (rm) | unicode | ||
|
|||
rename (ren) | unicode, unicode | ||
Rename the first namespace to second namespace name. Child namespaces will also be renamed. Both names are relative to the current namespace. Use the -parent flag to specify a parent namespace for the renamed namespace. An error is issued if the second namespace name already exists. |
|||
setNamespace (set) | unicode | ||
|
Derived from mel command maya.cmds.namespace
Example:
import pymel.core as pm
import maya.cmds as cmds
# Create three namespaces
pm.namespace( add='FOO' )
# Result: u'FOO' #
pm.namespace( add='BAR' )
# Result: u'BAR' #
pm.namespace( add='FRED' )
# Result: u'FRED' #
# Create namespace with qualified name
pm.namespace( add="A:B" )
# Result: u'A:B' #
# Create namespace with qualified name
pm.namespace( add="C:D", parent="A:B" )
# Result: u'A:B:C:D' #
# Create namespace with qualified name
pm.namespace( add=":A:B:C:D:E" )
# Result: u'A:B:C:D:E' #
# Set the current namespace to FOO
pm.namespace( set='FOO' )
# Result: u'FOO' #
# Create the namespace BAR Under FOO. Note there are
# two "BAR" namespaces, :BAR and :FOO:BAR.
pm.namespace( add='BAR' )
# Result: u'FOO:BAR' #
# Check to see that the BAR namespace exists within the current
# namespace (FOO)
pm.namespace( exists='BAR' )
# Result: True #
# Check to see that the FRED namespace exists under the root namespace
pm.namespace( exists=':FRED' )
# Result: True #
# Create two objects. It gets added to the current namespace FOO;
pm.sphere( n='sphere1' )
# Result: [nt.Transform(u'FOO:sphere1'), nt.MakeNurbSphere(u'FOO:makeNurbSphere1')] #
pm.sphere( n='sphere2' )
# Result: [nt.Transform(u'FOO:sphere2'), nt.MakeNurbSphere(u'FOO:makeNurbSphere2')] #
# Move sphere1 from namespace FOO to FOO:BAR. Note that we
# need to qualify sphere1 with the namespace FOO because
# "sphere1" identifies a non-existent object in the root namespace.
pm.rename( 'FOO:sphere1', 'BAR:sphere1' )
# Result: nt.Transform(u'FOO:BAR:sphere1') #
# Move sphere2 from namespace FOO to BAR. Note the leading
# colon on the new name.
pm.rename( 'FOO:sphere2', ':BAR:sphere2' )
# Result: nt.Transform(u'BAR:sphere2') #
# query the current namespace (using the namespaceInfo command)
pm.namespaceInfo( currentNamespace=True )
# Result: u'FOO' #
# remove the namespace FRED (it must be empty)
pm.namespace( set=':' )
# Result: u'' #
pm.namespace( rm='FRED' )
# Check to see that the FRED namespace has been removed
pm.namespace( query=True, exists=':FRED' )
0
# Rename namespace BAR to JOE
# Note: this is done by creating JOE, moving the contents of
# BAR into JOE, and then removing the (now empty) BAR.
pm.namespace( set=':' )
pm.namespace( add='JOE' )
pm.namespace( mv=('BAR', 'JOE') )
pm.namespace( rm='BAR' )
# JOE should now contain a single node: 'sphere2'.
# Move the contents of JOE into FRANK, when FRANK already
# has a 'sphere2' node. The '-force'
# flag is needed.
pm.namespace( set=':' )
pm.namespace( add='FRANK' )
pm.namespace( set='FRANK' )
pm.sphere( n='sphere2' )
pm.namespace( force=True, mv=(':JOE', ':FRANK') )
# In moving 'sphere2' from JOE to FRANK it will be renamed to
# 'sphere3' to ensure uniqueness.
# The namespace FRANK should now contain 'sphere2', 'sphere2Shape',
# and 'sphere3'.
# Determine whether the given namespace is root
#
pm.namespace( query=True, isRootNamespace="FOO" )
#Set return value to be absolute namespace name
#
print(pm.namespace(add = "testAbsoluteName", absoluteName = True))
#Create a sample hierachy that contains only empty namespaces, then collapse it
#
pm.namespace( set = ":");
pm.namespace( add = "emptyLevel1");
pm.namespace( add = "emptyLevel2", parent = "emptyLevel1");
pm.namespace( add = "leaf", parent = "emptyLevel1:emptyLevel2");
pm.namespace( collapseAncestors = "emptyLevel1:emptyLevel2:leaf");