-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathblindShortDataCmd.cpp
More file actions
158 lines (132 loc) · 4.57 KB
/
Copy pathblindShortDataCmd.cpp
File metadata and controls
158 lines (132 loc) · 4.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
//-
// ==========================================================================
// Copyright 1995,2006,2008 Autodesk, Inc. All rights reserved.
//
// Use of this software is subject to the terms of the Autodesk
// license agreement provided at the time of installation or download,
// or which otherwise accompanies this software in either electronic
// or hard copy form.
// ==========================================================================
//+
// DESCRIPTION:
//
// This plug-in produces the MEL command "blindShortData".
//
// This example adds a dynamic attribute to the dependency nodes of each of the currently selected items.
// The attribute is a short and its default value is set to "99".
//
// To use this plug-in:
// Select an object, bring up the Attribute Editor (select Window > Attribute Editor), and then click on the "Extras" tab.
// The attribute editor should display no extra attributes.
// Now, execute "blindShortData" in the command window. An attribute appears in the editor set to the value of 99.
// The value can be modified in the editor, or with the MEL commands "setAttr" and "getAttr".
// When the scene is saved, the new attribute and value for each selected item are also saved.
// This example demonstrates how simple blind data can be attached to an object.
//
#include <maya/MIOStream.h>
#include <maya/MFnPlugin.h>
#include <maya/MString.h>
#include <maya/MArgList.h>
#include <maya/MPxCommand.h>
#include <maya/MGlobal.h>
#include <maya/MItSelectionList.h>
#include <maya/MSelectionList.h>
#include <maya/MFnDependencyNode.h>
#include <maya/MFnNumericAttribute.h>
class blindShortData : public MPxCommand
{
public:
blindShortData() {};
~blindShortData() override;
MStatus doIt( const MArgList& args ) override;
MStatus redoIt() override;
static void* creator();
};
blindShortData::~blindShortData() {}
void* blindShortData::creator()
{
return new blindShortData();
}
MStatus blindShortData::doIt( const MArgList& )
{
MStatus stat = redoIt();
return stat;
}
MStatus blindShortData::redoIt()
// This method performs the action of the command.
//
// Iterate over all selected items and for each attach a new
// dynamic attribute.
{
MStatus stat; // Status code
MObject dependNode; // Selected dependency node
// Create a selection list iterator
//
MSelectionList slist;
MGlobal::getActiveSelectionList( slist );
MItSelectionList iter( slist, MFn::kInvalid, &stat );
// Iterate over all selected dependency nodes
//
for ( ; !iter.isDone(); iter.next() )
{
// Get the selected dependency node and create
// a function set for it
//
if ( MS::kSuccess != iter.getDependNode( dependNode ) ) {
cerr << "Error getting the dependency node" << endl;
continue;
}
MFnDependencyNode fnDN( dependNode, &stat );
if ( MS::kSuccess != stat ) {
cerr << "Error creating MFnDependencyNode" << endl;
continue;
}
// Create a new attribute to use as out blind data
//
MFnNumericAttribute fnAttr;
const MString fullName( "blindData" );
const MString briefName( "bd" );
double attrDefault = 99;
MObject newAttr = fnAttr.create( fullName, briefName,
MFnNumericData::kShort,
attrDefault, &stat );
if ( MS::kSuccess != stat ) {
cerr << "Error creating new attribute" << endl;
continue;
}
// Now add the new attribute to this dependency node
//
stat = fnDN.addAttribute(newAttr);
if ( MS::kSuccess != stat ) {
cerr << "Error adding dynamic attribute" << endl;
}
}
return MS::kSuccess;
}
//
// The following routines are used to register/unregister
// the command we are creating within Maya
//
MStatus initializePlugin( MObject obj )
{
MStatus status;
MFnPlugin plugin( obj, PLUGIN_COMPANY, "3.0", "Any");
status = plugin.registerCommand( "blindShortData",
blindShortData::creator );
if (!status) {
status.perror("registerCommand");
return status;
}
return status;
}
MStatus uninitializePlugin( MObject obj)
{
MStatus status;
MFnPlugin plugin( obj );
status = plugin.deregisterCommand( "blindShortData" );
if (!status) {
status.perror("deregisterCommand");
return status;
}
return status;
}