23 #include <sys/types.h> 32 #include <maya/MStatus.h> 33 #include <maya/MPxCommand.h> 34 #include <maya/MString.h> 35 #include <maya/MStringArray.h> 36 #include <maya/MArgList.h> 37 #include <maya/MGlobal.h> 38 #include <maya/MFnPlugin.h> 39 #include <maya/MObject.h> 40 #include <maya/MPlug.h> 41 #include <maya/MPxFileTranslator.h> 48 class MayaEggImporter :
public MPxFileTranslator
51 MayaEggImporter () {};
52 virtual ~MayaEggImporter () {};
53 static void* creator();
55 MStatus reader (
const MFileObject& file,
56 const MString& optionsString,
59 MStatus writer (
const MFileObject& file,
60 const MString& optionsString,
61 FileAccessMode mode );
63 bool haveReadMethod ()
const {
return true; }
64 bool haveWriteMethod ()
const {
return false; }
65 MString defaultExtension ()
const {
return "egg"; }
66 MFileKind identifyFile (
const MFileObject& fileName,
72 void* MayaEggImporter::creator()
74 return new MayaEggImporter();
77 MStatus MayaEggImporter::reader (
const MFileObject& file,
78 const MString& options,
81 MString fileName = file.fullName();
85 if (options.length() > 0) {
86 const MString flagModel(
"model");
87 const MString flagAnim(
"anim");
90 MStringArray optionList;
91 MStringArray theOption;
92 options.split(
';', optionList);
94 unsigned nOptions = optionList.length();
95 for (
unsigned i = 0; i < nOptions; i++) {
98 optionList[i].split(
'=', theOption);
99 if (theOption.length() < 1) {
103 if (theOption[0] == flagModel && theOption.length() > 1) {
104 model = atoi(theOption[1].asChar()) ?
true:
false;
105 }
else if (theOption[0] == flagAnim && theOption.length() > 1) {
106 anim = atoi(theOption[1].asChar()) ?
true:
false;
111 if ((mode != kImportAccessMode)&&(mode != kOpenAccessMode))
114 bool merge = (mode == kImportAccessMode);
115 std::ostringstream log;
117 bool ok = MayaLoadEggFile(fileName.asChar(), merge, model, anim,
false);
118 std::string txt = log.str();
120 MGlobal::displayError(txt.c_str());
122 if (!ok) MGlobal::displayError(
"Cannot import Egg file, unknown reason");
124 return ok ? MS::kSuccess : MS::kFailure;
127 MStatus MayaEggImporter::writer (
const MFileObject& file,
128 const MString& options,
129 FileAccessMode mode )
132 fprintf(stderr,
"MayaEggImporter::writer called in error\n");
136 MPxFileTranslator::MFileKind MayaEggImporter::identifyFile (
137 const MFileObject& fileName,
141 const char * name = fileName.name().asChar();
142 int nameLength = strlen(name);
144 if ((nameLength > 4) && !strcmp(name+nameLength-4,
".egg"))
145 return kCouldBeMyFileType;
147 return kNotMyFileType;
150 EXPCL_MISC MStatus initializePlugin( MObject obj )
152 MFnPlugin plugin( obj,
"Alias",
"3.0",
"Any");
155 return plugin.registerFileTranslator(
"Panda3D Egg Import",
"none",
156 MayaEggImporter::creator,
159 "merge=1;model=1;anim=0;");
162 EXPCL_MISC MStatus uninitializePlugin( MObject obj )
164 MFnPlugin plugin( obj );
165 return plugin.deregisterFileTranslator(
"Panda3D Egg Import" );
static Notify * ptr()
Returns the pointer to the global Notify object.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void set_ostream_ptr(std::ostream *ostream_ptr, bool delete_later)
Changes the ostream that all subsequent Notify messages will be written to.