//- // ========================================================================== // Copyright (C) 1995 - 2006 Autodesk, Inc. and/or its licensors. All // rights reserved. // // The coded instructions, statements, computer programs, and/or related // material (collectively the "Data") in these files contain unpublished // information proprietary to Autodesk, Inc. ("Autodesk") and/or its // licensors, which is protected by U.S. and Canadian federal copyright // law and by international treaties. // // The Data is provided for use exclusively by You. You have the right // to use, modify, and incorporate this Data into other products for // purposes authorized by the Autodesk software license agreement, // without fee. // // The copyright notices in the Software and this entire statement, // including the above license grant, this restriction and the // following disclaimer, must be included in all copies of the // Software, in whole or in part, and all derivative works of // the Software, unless such copies or derivative works are solely // in the form of machine-executable object code generated by a // source language processor. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. // AUTODESK DOES NOT MAKE AND HEREBY DISCLAIMS ANY EXPRESS OR IMPLIED // WARRANTIES INCLUDING, BUT NOT LIMITED TO, THE WARRANTIES OF // NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR // PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE, OR // TRADE PRACTICE. IN NO EVENT WILL AUTODESK AND/OR ITS LICENSORS // BE LIABLE FOR ANY LOST REVENUES, DATA, OR PROFITS, OR SPECIAL, // DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES, EVEN IF AUTODESK // AND/OR ITS LICENSORS HAS BEEN ADVISED OF THE POSSIBILITY // OR PROBABILITY OF SUCH DAMAGES. // // ========================================================================== //+ #include #include #include #include #include #include #include #include #include "iffreader.h" #ifndef OSMac_ #include #endif #define IFFCHECKERR(stat, call) \ if (!stat) { \ MString string = reader.errorString(); \ string += " in method "; \ string += #call; \ displayError (string); \ return MS::kFailure; \ } class iffPixel : public MPxCommand { public: iffPixel(); virtual ~iffPixel(); MStatus doIt ( const MArgList& args ); MStatus redoIt (); MStatus undoIt (); bool isUndoable() const; static void* creator(); private: int r,g,b,a; float d; bool useDepth; }; iffPixel::iffPixel() { } iffPixel::~iffPixel() {} void* iffPixel::creator() { return new iffPixel; } bool iffPixel::isUndoable() const { return true; } MStatus iffPixel::undoIt() { return MS::kSuccess; } MString itoa (int n) { char buffer [256]; sprintf (buffer, "%d", n); return MString (buffer); } MStatus iffPixel::doIt( const MArgList& args ) { MString componentName; if (args.length () < 3 || args.length () > 4) { displayError ("Syntax: iffPixel file x y [-depth]"); return MS::kFailure; } int x,y; MString fileName; args.get (0, fileName); args.get (1, x); args.get (2, y); if (args.length () == 4) { MString lastArg; args.get (3, lastArg); if (lastArg != MString ("-depth")) { displayError ("Syntax: iffPixel file x y [-depth]"); return MS::kFailure; } useDepth = true; } else useDepth = false; IFFimageReader reader; MStatus stat; stat = reader.open (fileName); IFFCHECKERR (stat, open); int w,h; stat = reader.getSize (w,h); IFFCHECKERR (stat, getSize); if (x < 0 || x > w || y < 0 || y > h) { MString message ("Co-ordinates out of range. Size of image is "); message += itoa (w); message += "+"; message += itoa (h); displayError (message); return MS::kFailure; } stat = reader.readImage (); IFFCHECKERR (stat, readImage); if (useDepth) { if (!reader.hasDepthMap ()) { displayError ("Image has no depth map"); return MS::kFailure; } stat = reader.getDepth (x,y,&d); } else { if (!reader.isRGB () && !reader.isGrayscale ()) { displayError ("Image has no RGB data"); return MS::kFailure; } stat = reader.getPixel (x,y,&r,&g,&b,&a); } IFFCHECKERR (stat, getPixel); stat = reader.close (); IFFCHECKERR (stat, close); return redoIt(); } MStatus iffPixel::redoIt() { clearResult(); if (useDepth) { appendToResult (d); } else { appendToResult( r ); appendToResult( g ); appendToResult( b ); appendToResult( a ); } return MS::kSuccess; } MStatus initializePlugin( MObject obj ) { MStatus status; MFnPlugin plugin( obj, PLUGIN_COMPANY, "3.0", "Any"); status = plugin.registerCommand( "iffPixel", iffPixel::creator ); if (!status) status.perror("registerCommand"); return status; } MStatus uninitializePlugin( MObject obj ) { MStatus status; MFnPlugin plugin( obj ); status = plugin.deregisterCommand( "iffPixel" ); if (!status) status.perror("deregisterCommand"); return status; }