Пример #1
0
MStatus btSPHCmd::parseSyntax(MArgDatabase &argData)
{
    _LogFunctionCall("btSPHCmd::parseArgs()");

    MStatus status;

    GET_ARG2( FRAME_RANGE );
    GET_ARG1( PARTICLE_COUNT );
// 	GET_ARG0( INITILIZE );
// 	GET_ARG0( UNINITILIZE );
    GET_ARG0( CACHE );
    GET_ARG1( PARTICLE_NAME );
#ifdef _USE_ARG_
    fInit  = argData.isFlagSet(kSPHInitFlagLong, &status);
    IfMErrorWarn(status);
    if (fInit) {
        argData.getFlagArgument(kSPHInitFlagLong, 0, mParticleNum);
    }
#else
// 	fInit = true;
// 	mParticleNum = 100;
#endif


#ifdef _USE_ARG_
// 	fUninit = argData.isFlagSet(kSPHUninitFlagLong, &status);
// 	IfMErrorWarn(status);
#else
    /*	fUninit = false;*/
#endif

    printArgs();

    return MStatus::kSuccess;
}
Пример #2
0
MStatus RenderCommand::parseSyntax(MArgDatabase& argdb)
{
	if(argdb.isFlagSet("-ipr"))
		argdb.getFlagArgument("-ipr", 0, paramIprMode);
	if(argdb.isFlagSet("-p"))
		argdb.getFlagArgument("-p", 0, paramIprPause);
	if(argdb.isFlagSet("-w"))
		argdb.getFlagArgument("-width", 0, paramWidth);
	if(argdb.isFlagSet("-h"))
		argdb.getFlagArgument("-height", 0, paramHeight);
	if(argdb.isFlagSet("-c"))
		argdb.getFlagArgument("-camera", 0, paramCamera);

	return MS::kSuccess;
}
MStatus RadiosityRenderer::parseSyntax (MArgDatabase &argData)
{
	// Get the flag values, otherwise the default values are used.
	doNotClearBackground = argData.isFlagSet( kDoNotClearBackground );
	
	return MS::kSuccess;
}
Пример #4
0
//-----------------------------------------------------------------------------
// Get the starting list of objects to export
//-----------------------------------------------------------------------------
MStatus CVstSmdIOCmd::GetOptSelection(
	const MArgDatabase &mArgDatabase,
	MSelectionList &mSelectionList )
{
	if ( mArgDatabase.isFlagSet( kOptSelection ) )
	{
		// Get the user's specified selection of stuff to export
		if ( !mArgDatabase.getObjects( mSelectionList ) )
		{
			MGlobal::displayError( "Cannot get list of specified objects to export" );
			return MS::kFailure;
		}
		else if ( mSelectionList.isEmpty() )
		{
			MGlobal::displayError( "-export -selection specified but nothing is selected" );
			return MS::kFailure;
		}
	}
	else
	{
		MDagPath mDagPath;
		const bool exportInvisible( mArgDatabase.isFlagSet( kOptExportInvisible ) );

		for ( MItDag dagIt( MItDag::kBreadthFirst, MFn::kDagNode ); !dagIt.isDone() && dagIt.depth() <= 1; dagIt.next() )
		{
			if ( dagIt.depth() == 1)
			{
				if ( dagIt.getPath( mDagPath ) )
				{
					if ( exportInvisible || ValveMaya::IsPathVisible( mDagPath ) )
					{
						mSelectionList.add( mDagPath, MObject::kNullObj, true );
					}
				}
			}
		}
	}

	if ( mSelectionList.isEmpty() )
	{
		MGlobal::displayError( "Cannot find anything to export" );
		return MS::kFailure;
	}

	return MS::kSuccess;
}
Пример #5
0
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
uint CVstSmdIOCmd::GetExportType(
	const MArgDatabase &mArgDatabase )
{
	uint retVal( 0 );

	if ( mArgDatabase.isFlagSet( kOptExportType ) )
	{
		MString optExportType;
		MArgList tmpArgList;
		const uint etEnd( mArgDatabase.numberOfFlagUses( kOptExportType ) );
		for ( uint eti( 0 ); eti != etEnd; ++eti )
		{
			mArgDatabase.getFlagArgumentList( kOptExportType, eti, tmpArgList );
			optExportType = tmpArgList.asString( 0 );

			if ( strnicmp( optExportType.asChar(), "r", 1 ) == 0 || strnicmp( optExportType.asChar(), "m", 1 ) == 0 )
			{
				retVal |= CSmdExport::kReference;
			}
			else if ( strnicmp( optExportType.asChar(), "p", 1 ) == 0 )
			{
				retVal |= CSmdExport::kPhysModel;
			}
			else if ( strnicmp( optExportType.asChar(), "a", 1 ) == 0 || strnicmp( optExportType.asChar(), "s", 1 ) == 0 )
			{
				retVal |= CSmdExport::kAnimation;
			}
			else if ( strnicmp( optExportType.asChar(), "v", 1 ) == 0 )
			{
				retVal |= CSmdExport::kVTA;
			}
			else
			{
				MGlobal::displayWarning( MString( "Cannot determine the type of export from -et " ) + optExportType + ", assume reference/model" );
			}
		}
	}

	if ( retVal == 0 )
	{
		retVal = CSmdExport::kReference;
	}

	return retVal;
}
//-----------------------------------------------------------------------------
// Called in general to actually do the work of the command
//-----------------------------------------------------------------------------
MStatus CVstAttachmentCmd::redoIt()
{
	if ( m_mArgDatabase->isFlagSet( kOptHelp ) )
	{
		return DoHelp();
	}
	else if ( m_mArgDatabase->isFlagSet( "create" ) )
	{
		return DoCreate();
	}
	else if ( m_mArgDatabase->isFlagSet( "select" ) )
	{
		return DoSelect();
	}

	merr << "No valid operation specified via command line arguments" << std::endl;

	return MS::kFailure;
}
Пример #7
0
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
MString CVstSmdIOCmd::GetNodeDelPrefix(
	const MArgDatabase &mArgDatabase )
{
	MString retVal;

	if ( mArgDatabase.isFlagSet( kOptRemovePrefix ) )
	{
		mArgDatabase.getFlagArgument( kOptRemovePrefix, 0, retVal );
		char *pP( const_cast< char *>( retVal.asChar() ) );
		for ( const char *const pEnd( pP + retVal.length() ); pP != pEnd; ++pP )
		{
			if ( *pP == '\"' )
			{
				*pP = '_';
			}
		}
	}

	return retVal;
}
Пример #8
0
bool readMultiUseFlag(const char flagName[], MArgDatabase &args, MSelectionList &sel){
	if (!args.isFlagSet(flagName))
		return false;
	MStatus status;

    for(unsigned int i=0,numUses = args.numberOfFlagUses(flagName); i<numUses; i++ )
    {
            MArgList argList;
            status = args.getFlagArgumentList( flagName, i, argList );
			CHECK_STATUS("problem reading multi flag",status);

            MString name = argList.asString( 0, &status );

			CHECK_STATUS("problem reading multi flag (2)",status);

			status = sel.add(name);
			CHECK_STATUS("problem adding item to selection",status);
	}

	return true;
}
Пример #9
0
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
void CVstSmdIOCmd::GetExportFrameRange(
	const MArgDatabase &mArgDatabase,
	double &optFs,
	double &optFe,
	double &optFi )
{
	optFs = MAnimControl::minTime().as( MTime::uiUnit() );
	optFe = MAnimControl::maxTime().as( MTime::uiUnit() );
	optFi = MAnimControl::playbackBy();

	if ( mArgDatabase.isFlagSet( kOptFrameStart ) )
	{
		mArgDatabase.getFlagArgument( kOptFrameStart, 0, optFs );
	}

	if ( mArgDatabase.isFlagSet( kOptFrameEnd ) )
	{
		mArgDatabase.getFlagArgument( kOptFrameEnd, 0, optFe );
	}

	if ( mArgDatabase.isFlagSet( kOptFrameInc ) )
	{
		mArgDatabase.getFlagArgument( kOptFrameInc, 0, optFi );
	}

	if ( optFi > 0 )
	{
		if ( optFs > optFe )
		{
			// Swap start and end times
			const double tmpFrame( optFs );
			optFs = optFe;
			optFe = tmpFrame;
		}
	}
	else
	{
		// Time increment is negative, which isn't supported, so negate time increment & swap ranges and see what happens
		optFi *= -1.0;
		const double tmpFrame( optFs );
		optFs = optFe;
		optFe = tmpFrame;

		if ( optFs > optFe )
		{
			// Swap start and end times back..
			const double tmpFrame( optFs );
			optFs = optFe;
			optFe = tmpFrame;
		}
	}
}
Пример #10
0
//
// Read the values of the additionnal flags for this command.
///////////////////////////////////////////////////////////////////////////////
MStatus flipUVCmd::parseSyntax (MArgDatabase &argData)
{
    MStatus status;

    // Get the flag values, otherwise the default values are used.

    if (argData.isFlagSet(horizFlag)) {
        status = argData.getFlagArgument(horizFlag, 0, horizontal);
        CHECK_MSTATUS_AND_RETURN_IT(status);
    }

    if (argData.isFlagSet(globalFlag)) {
        status = argData.getFlagArgument(globalFlag, 0, flipGlobal);
        CHECK_MSTATUS_AND_RETURN_IT(status);
    }

    if (argData.isFlagSet(extendFlag)) {
        status = argData.getFlagArgument(extendFlag, 0, extendToShell);
        CHECK_MSTATUS_AND_RETURN_IT(status);
    }

    return MS::kSuccess;
}
Пример #11
0
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
uint CVstSmdIOCmd::GetExportFlags(
	const MArgDatabase &mArgDatabase )
{
	uint retVal(
		( mArgDatabase.isFlagSet( kOptExportInvisible ) ? CSmdExport::kOptExportInvisible : 0 ) |
		( mArgDatabase.isFlagSet( kOptWorld ) ? CSmdExport::kOptWorld : 0 ) |
		( mArgDatabase.isFlagSet( kOptMaterials ) ? CSmdExport::kOptMaterials : 0 ) |
		( mArgDatabase.isFlagSet( kOptMaterialSrc ) ? CSmdExport::kOptMaterialSrc : 0 ) |
		( mArgDatabase.isFlagSet( kOptMaterialVtf ) ? CSmdExport::kOptMaterialVtf : 0 ) |
		( mArgDatabase.isFlagSet( kOptMaterialVmt ) ? CSmdExport::kOptMaterialVmt : 0 ) |
		( mArgDatabase.isFlagSet( kOptConfirm ) ? CSmdExport::kOptConfirm : 0 ) |
		( mArgDatabase.isFlagSet( kOptQc ) ? CSmdExport::kOptQc : 0 ) |
		( mArgDatabase.isFlagSet( kOptQcCollapseBones ) ? CSmdExport::kOptQcCollapseBones : 0 ) |
		( mArgDatabase.isFlagSet( kOptQcCenterBonesOnVerts ) ? CSmdExport::kOptQcCenterBonesOnVerts : 0 ) |
		( mArgDatabase.isFlagSet( kOptQcSkipBonesInBBox ) ? CSmdExport::kOptQcSkipBoneInBBox : 0 ) |
		( mArgDatabase.isFlagSet( kOptRunStudiomdl ) ? CSmdExport::kOptRunStudiomdl : 0 ) |
		( mArgDatabase.isFlagSet( kOptDoubleSided ) ? CSmdExport::kOptDoubleSided : 0 ) |
		( mArgDatabase.isFlagSet( kOptBindCurrent ) ? CSmdExport::kOptBindCurrent : 0 )
	);

	bool doPrettyPrint( true );
	if ( mArgDatabase.isFlagSet( kOptPrettyPrint ) )
	{
		mArgDatabase.getFlagArgument( kOptPrettyPrint, 0, doPrettyPrint );
	}

	if ( doPrettyPrint )
	{
		retVal |= CSmdExport::kOptPrettyPrint;
	}

	if ( mArgDatabase.isFlagSet( kOptUpAxis ) )
	{
		MString upAxis;
		mArgDatabase.getFlagArgument( kOptUpAxis, 0, upAxis );
		switch ( *upAxis.asChar() )
		{
		case 'x':
		case 'X':
			retVal |= CSmdExport::kOptXUp;
			break;
		case 'y':
		case 'Y':
			retVal |= CSmdExport::kOptYUp;
			break;
		case 'z':
		case 'Z':
			retVal |= CSmdExport::kOptZUp;
			break;
		default:
			MGlobal::displayWarning( MString( "Unknown up axis \"" ) + upAxis + "\" specified, assuming Y up" );
			retVal |= CSmdExport::kOptYUp;
			break;
		}
	}

	return retVal;
}
Пример #12
0
//-----------------------------------------------------------------------------
// Purpose: Export the specified bits of the maya scene into the specified file
// Input  : mArgDatabase	The command line arguments as passed
// Output : MS::kSuccess if ok, MS::kFailure otherwise
//-----------------------------------------------------------------------------
MStatus CVstSmdIOCmd::DoImport(
	const MArgDatabase &mArgDatabase )
{
	MString optFilename;
	if ( mArgDatabase.getFlagArgument( kOptFilename, 0, optFilename ) != MS::kSuccess || optFilename.length() == 0 )
	{
		MGlobal::displayError( "No filename specified for import" );
		return MS::kFailure;
	}

	MString optGame;
	if ( mArgDatabase.isFlagSet( kOptGame ) )
	{
		mArgDatabase.getFlagArgument( kOptGame, 0, optGame );
	}

	MString optTextureArchive;
	if ( mArgDatabase.isFlagSet( kOptTextureArchive ) )
	{
		mArgDatabase.getFlagArgument( kOptTextureArchive, 0, optTextureArchive );
	}

	CQcData qcData;
	char fullPath[ MAX_PATH ];
	if ( !_fullpath( fullPath, optFilename.asChar(), sizeof( fullPath ) ) )
	{
		strncpy( fullPath, optFilename.asChar(), sizeof( fullPath ) );
	}
	qcData.GetQcData( fullPath );

	if ( mArgDatabase.isFlagSet( kOptUpAxis ) )
	{
		MString upAxis;
		mArgDatabase.getFlagArgument( kOptUpAxis, 0, upAxis );
		switch ( *upAxis.asChar() )
		{
		case 'x':
		case 'X':
			qcData.m_upAxis = 0;
			break;
		case 'y':
		case 'Y':
			qcData.m_upAxis = 1;
			break;
		case 'z':
		case 'Z':
		default:
			qcData.m_upAxis = 2;
			break;
		}
	}

	CSmdImport smdImport( optGame.asChar(), optTextureArchive.asChar() );
	if ( mArgDatabase.isFlagSet( kOptImportSkeleton ) && !mArgDatabase.isFlagSet( kOptVmf ) )
	{
		mArgDatabase.getFlagArgument( kOptImportSkeleton, 0, smdImport.m_optImportSkeleton );
	}
	smdImport.SetNodeAddPrefix( GetNodeAddPrefix( mArgDatabase ) );
	smdImport.SetNodeDelPrefix( GetNodeDelPrefix( mArgDatabase ) );

	if ( mArgDatabase.isFlagSet( kOptImportType ) )
	{
		MString optImportType;
		if ( mArgDatabase.getFlagArgument( kOptImportType, 0, optImportType ) && (
			*optImportType.asChar() == 'a' || *optImportType.asChar() == 'A' ||
			*optImportType.asChar() == 's' || *optImportType.asChar() == 'S' ) )
		{
			MSelectionList mSelectionList;
			mArgDatabase.getObjects( mSelectionList );
			MDagPath rootDagPath;
			if ( mSelectionList.length() && mSelectionList.getDagPath( 0, rootDagPath ) )
			{
				return smdImport.ImportAnimation( optFilename.asChar(), rootDagPath, qcData, m_undo );
			}
			else
			{
				merr << "Cannot import animation without the root of the skeleton is selected or specified" << std::endl;
				return MS::kFailure;
			}
		}
	}

	MTransformationMatrix topLevel;

	if ( mArgDatabase.isFlagSet( kOptOrigin ) )
	{
		MVector o;
		mArgDatabase.getFlagArgument( kOptOrigin, 0, o.x );
		mArgDatabase.getFlagArgument( kOptOrigin, 1, o.y );
		mArgDatabase.getFlagArgument( kOptOrigin, 2, o.z );

		topLevel.setTranslation( o, MSpace::kObject );
	}

	if ( mArgDatabase.isFlagSet( kOptAngles ) )
	{
		MVector a;
		if ( mArgDatabase.isFlagSet( kOptVmf ) )
		{
			// The angles are specified in Yaw Pitch Roll order ( YZX )
			// but they're still an XYZ rotation
			mArgDatabase.getFlagArgument( kOptAngles, 0, a.y );
			mArgDatabase.getFlagArgument( kOptAngles, 1, a.z );
			mArgDatabase.getFlagArgument( kOptAngles, 2, a.x );
		}
		else
		{
			mArgDatabase.getFlagArgument( kOptAngles, 0, a.x );
			mArgDatabase.getFlagArgument( kOptAngles, 1, a.y );
			mArgDatabase.getFlagArgument( kOptAngles, 2, a.z );
		}

		const MEulerRotation e( a.x / 180.0 * M_PI, a.y / 180.0 * M_PI, a.z / 180.0 * M_PI, MEulerRotation::kXYZ );
		topLevel.rotateBy( e.asQuaternion(), MSpace::kObject );
	}

	if ( mArgDatabase.isFlagSet( kOptVmf ) )
	{
		if ( qcData.m_upAxis == 1U )
		{
			topLevel.rotateBy( MEulerRotation( 90.0 / 180.0 * M_PI, 0.0, 90.0 / 180.0 * M_PI ).asQuaternion(), MSpace::kObject );
		}
		else
		{
			topLevel.rotateBy( MEulerRotation( 0.0, 0.0, 90.0 / 180.0 * M_PI ).asQuaternion(), MSpace::kObject );
		}
	}
	else
	{
		switch ( qcData.m_upAxis )
		{
		case 0U:	// X Up
			if ( MGlobal::isYAxisUp() )
			{
				topLevel.rotateBy( MEulerRotation( -M_PI / 2.0, M_PI / 2.0, 0.0 ).asQuaternion(), MSpace::kObject );
			}
			else
			{
				topLevel.rotateBy( MEulerRotation( 0.0, M_PI / 2.0, 0.0 ).asQuaternion(), MSpace::kObject );
			}
			break;
		case 1U:	// Y Up
			if ( MGlobal::isZAxisUp() )
			{
				topLevel.rotateBy( MEulerRotation( M_PI / 2.0, 0.0, 0.0 ).asQuaternion(), MSpace::kObject );
			}
			break;
		default:
		case 2U:	// Z Up
			if ( MGlobal::isYAxisUp() )
			{
				topLevel.rotateBy( MEulerRotation( -M_PI / 2.0, 0.0, 0.0 ).asQuaternion(), MSpace::kObject );
			}
			break;
		}
	}

	MDagPath mDagPath( smdImport.DoIt( optFilename.asChar(), qcData, topLevel, m_undo ) );

	if ( mDagPath.isValid() && mDagPath.length() )
	{
		if ( mArgDatabase.isFlagSet( kOptVmf ) )
		{
			MFnNumericAttribute nFn;
			MObject aObj( nFn.create( "yUp", "yUp", MFnNumericData::kBoolean, false ) );
			MDagPath sDagPath( mDagPath );
			sDagPath.extendToShapeDirectlyBelow( 0 );
			m_undo.DagModifier().addAttribute( sDagPath.node(), aObj );
			m_undo.DagModifierDoIt();
			MPlug aP( sDagPath.node(), aObj );

			if ( qcData.m_upAxis == 1U )
			{
				aP.setValue( true );
			}
			else
			{
				aP.setValue( false );
			}
		}

		m_undo.SaveCurrentSelection();

		MGlobal::select( mDagPath, MObject::kNullObj, MGlobal::kReplaceList );
		setResult( mDagPath.partialPathName() );

		m_undo.SaveCurrentSelection();
		return MS::kSuccess;
	}

	m_undo.Undo();

	return MS::kFailure;
}
Пример #13
0
//-----------------------------------------------------------------------------
// Purpose: Export the specified bits of the maya scene into the specified file
// Input  : i_mArgDatabase	The command line arguments as passed
// Output : MS::kSuccess if ok, MS::kFailure otherwise
//-----------------------------------------------------------------------------
MStatus CVstSmdIOCmd::DoExport(
	const MArgDatabase &mArgDatabase )
{
	MString optFilename;
	if ( mArgDatabase.getFlagArgument( kOptFilename, 0, optFilename ) != MS::kSuccess || optFilename.length() == 0 )
	{
		MGlobal::displayError( "No filename specified for export" );
		return MS::kFailure;
	}

	MSelectionList optSelectionList;
	if ( GetOptSelection( mArgDatabase, optSelectionList ) != MS::kSuccess )
		return MS::kFailure;

	const uint exportType( GetExportType( mArgDatabase ) );

	const uint exportFlags( GetExportFlags( mArgDatabase ) );

	const uint version(
		mArgDatabase.isFlagSet( kOptRelativeMaterials ) &&
		exportType & ( CSmdExport::kModel | CSmdExport::kPhysModel | CSmdExport::kVertexAnimation ) ? 2 : 1 );

	CSmdExport smdExport( exportType, exportFlags, version );

	smdExport.SetNodeAddPrefix( GetNodeAddPrefix( mArgDatabase ) );
	smdExport.SetNodeDelPrefix( GetNodeDelPrefix( mArgDatabase ) );

	if ( exportType & CSmdExport::kAnimation )
	{
		double fs( 0.0 );
		double fe( 0.0 );
		double fi( 1.0 );

		GetExportFrameRange( mArgDatabase, fs, fe, fi );

		smdExport.SetFrameRange( fs, fe, fi );
	}

	MStringArray result;

	if ( smdExport.DoIt( optFilename, optSelectionList, result ) != MS::kSuccess )
		return MS::kFailure;

	if ( result.length() )
	{
		result.append( "smd" );
		result.append( optFilename );
	}
	else
	{
		result.append( MString( "Exported to " ) + optFilename );
	}

	if ( mArgDatabase.isFlagSet( kOptQci ) )
	{
		MString optQci;
		mArgDatabase.getFlagArgument( kOptQci, 0, optQci );
		MSelectionList qciSelectionList;
		if ( mArgDatabase.isFlagSet( kOptSelection ) )
		{
			mArgDatabase.getObjects( qciSelectionList );
		}

		MStringArray qciResult;
		CQciExport qciExport;
		if ( qciExport.DoIt( optQci, qciSelectionList, qciResult ) && qciResult.length() )
		{
			for ( uint i( 0 ); i != qciResult.length(); ++i )
			{
				result.append( qciResult[ i ] );
			}
		}
	}

	setResult( result );

	return MS::kSuccess;
}
//-----------------------------------------------------------------------------
// Creates a vstAttachment Locator
//-----------------------------------------------------------------------------
MStatus CVstAttachmentCmd::DoCreate()
{
	MDagModifier *mDagModifier( new MDagModifier );

	if ( !mDagModifier )
	{
		merr << "Can't create new MDagModifier" << std::endl;
		return MS::kFailure;
	}

	MString optName( "vstAttachment" );
	if ( m_mArgDatabase->isFlagSet( kOptName ) )
	{
		m_mArgDatabase->getFlagArgument( kOptName, 0, optName );
	}

	// Create the helper bone locator's transform
	MObject xObj = mDagModifier->createNode( "transform" );
	mDagModifier->doIt();

	if ( xObj.isNull() )
	{
		merr << "Can't create new transform node" << std::endl;
		return MS::kFailure;
	}

	// name the shape & the transform the same thing
	mDagModifier->renameNode( xObj, optName );
	mDagModifier->doIt();

	MObject vstAttachmentObj = mDagModifier->createNode( "vstAttachment", xObj );

	if ( vstAttachmentObj.isNull() )
	{
		merr << "Can't create new vstAttachment node" << std::endl;
		mDagModifier->undoIt();
		return MS::kFailure;
	}

	// name the shape & the transform the same thing
	mDagModifier->renameNode( vstAttachmentObj, MFnDependencyNode( xObj ).name() );
	mDagModifier->doIt();

	m_undoable = true;
	m_mDagModifier = mDagModifier;

	if ( m_mArgDatabase->isFlagSet( kOptParent ) )
	{
		MSelectionList mSelectionList;
		m_mArgDatabase->getObjects( mSelectionList );
		for ( MItSelectionList sIt( mSelectionList, MFn::kDagNode ); !sIt.isDone(); sIt.next() )
		{
			MDagPath mDagPath;
			if ( sIt.getDagPath( mDagPath ) )
			{
				m_mDagModifier->reparentNode( xObj, mDagPath.node() );
				m_mDagModifier->doIt();
				break;
			}
		}
	}

	// Save the current selection just in case we want to undo stuff
	MGlobal::getActiveSelectionList( m_mSelectionList );

	MDagPath xDagPath;
	MDagPath::getAPathTo( xObj, xDagPath );
	MGlobal::select( xDagPath, MObject::kNullObj, MGlobal::kReplaceList );
	setResult( xDagPath.partialPathName() );

	return MS::kSuccess;
}
Пример #15
0
MStatus CVstAimCmd::redoIt()
{
	MStatus mStatus;

	if ( !mStatus )
	{
		setResult( MString( "Cannot parse command line" ) + mStatus.errorString() );
		return MS::kFailure;
	}

	if ( m_mArgDatabase->isFlagSet( kHelp ) )
	{
		PrintHelp();
	}
	else
	{
		// See if there are two object specified

		MDagPath mDagPath;
		MSelectionList optSelectionList;

		// Validate specified items to whole dag nodes
		{
			MSelectionList tmpSelectionList;
			m_mArgDatabase->getObjects( tmpSelectionList );
			for ( MItSelectionList sIt( tmpSelectionList, MFn::kDagNode ); !sIt.isDone(); sIt.next() )
			{
				if ( sIt.getDagPath( mDagPath ) )
				{
					optSelectionList.add( mDagPath, MObject::kNullObj, true );
				}
			}
		}

		if ( m_mArgDatabase->isFlagSet( "create" ) || optSelectionList.length() >= 2 && m_mArgDatabase->numberOfFlagsUsed() == 0 )
		{
			// Error if there aren't at least two
			if ( optSelectionList.length() < 2 )
			{
				displayError( GetName() + " needs at least two objects specified or selected when -create is used" );
				return MS::kFailure;
			}

			// Get name command line arg
			MString optName;
			if ( m_mArgDatabase->isFlagSet( "name" ) )
			{
				m_mArgDatabase->getFlagArgument( "name", 0, optName );
			}

			m_undoable = true;
			m_mDagModifier = new MDagModifier;

			MObject vstAimObj( m_mDagModifier->MDGModifier::createNode( GetName() ) );
			if ( m_mDagModifier->doIt() != MS::kSuccess )
			{
				displayError( MString( "Couldn't create " ) + GetName() + " node" );
				m_mDagModifier->undoIt();
				delete m_mDagModifier;
				m_mDagModifier = NULL;
				m_undoable = false;

				return MS::kFailure;
			}

			m_mDagModifier->renameNode( vstAimObj, optName.length() ? optName : GetName() );
			if ( m_mDagModifier->doIt() != MS::kSuccess )
			{
				if ( optName.length() )
				{
					displayWarning( MString( "Couldn't rename newly created vstNode \"" ) + optName + "\"" );
				}
			}

			// Set options on the newly create vstAim node

			MFnDependencyNode vstAimFn( vstAimObj );

			MPlug sP;
			MPlug dP;

			if ( m_mArgDatabase->isFlagSet( kAim ) )
			{
				MVector aim;
				m_mArgDatabase->getFlagArgument( kAim, 0, aim.x );
				m_mArgDatabase->getFlagArgument( kAim, 1, aim.y );
				m_mArgDatabase->getFlagArgument( kAim, 2, aim.z );

				sP = vstAimFn.findPlug( "aimX" );
				sP.setValue( aim.x );

				sP = vstAimFn.findPlug( "aimY" );
				sP.setValue( aim.y );

				sP = vstAimFn.findPlug( "aimZ" );
				sP.setValue( aim.z );
			}

			if ( m_mArgDatabase->isFlagSet( kUp ) )
			{
				MVector up;
				m_mArgDatabase->getFlagArgument( kUp, 0, up.x );
				m_mArgDatabase->getFlagArgument( kUp, 1, up.y );
				m_mArgDatabase->getFlagArgument( kUp, 2, up.z );

				sP = vstAimFn.findPlug( "upX" );
				sP.setValue( up.x );

				sP = vstAimFn.findPlug( "upY" );
				sP.setValue( up.y );

				sP = vstAimFn.findPlug( "upZ" );
				sP.setValue( up.z );
			}

			// Now connect up the newly created vstAim node

			MDagPath toAim;
			optSelectionList.getDagPath( 1, toAim );
			const MFnDagNode toAimFn( toAim );

			if ( toAim.hasFn( MFn::kJoint ) )
			{
				MPlug joP( toAimFn.findPlug( "jointOrient" ) );
				if ( !joP.isNull() )
				{
					MAngle jox, joy, joz;
					joP.child( 0 ).getValue( jox );
					joP.child( 1 ).getValue( joy );
					joP.child( 2 ).getValue( joz );
					if ( abs( jox.value() ) > FLT_EPSILON || abs( joy.value() ) > FLT_EPSILON || abs( joz.value() ) > FLT_EPSILON )
					{
						mwarn << "Joint orient on node being constrained is non-zero ( " << jox.asDegrees() << " " << joy.asDegrees() << " " << joz.asDegrees() << " ), setting to 0" << std::endl;
						joP.child( 0 ).setValue( MAngle( 0.0 ) );
						joP.child( 1 ).setValue( MAngle( 0.0 ) );
						joP.child( 2 ).setValue( MAngle( 0.0 ) );
					}
				}
			}

			if ( toAim.hasFn( MFn::kTransform ) )
			{
				MPlug mP( toAimFn.findPlug( "rotateAxis" ) );
				if ( !mP.isNull() )
				{
					MAngle rx, ry, rz;
					mP.child( 0 ).getValue( rx );
					mP.child( 1 ).getValue( ry );
					mP.child( 2 ).getValue( rz );
					if ( abs( rx.value() ) > FLT_EPSILON || abs( ry.value() ) > FLT_EPSILON || abs( rz.value() ) > FLT_EPSILON )
					{
						mwarn << "Rotate Axis on node being constrained is non-zero ( " << rx.asDegrees() << " " << ry.asDegrees() << " " << rz.asDegrees() << " ), setting to 0" << std::endl;
						mP.child( 0 ).setValue( MAngle( 0.0 ) );
						mP.child( 1 ).setValue( MAngle( 0.0 ) );
						mP.child( 2 ).setValue( MAngle( 0.0 ) );
					}
				}
			}

			MDagPath aimAt;
			optSelectionList.getDagPath( 0, aimAt );
			const MFnDagNode aimAtFn( aimAt );

			// toAim.rotateOrder -> vstAim.rotateOrder
			sP = toAimFn.findPlug( "rotateOrder" );
			dP = vstAimFn.findPlug( "rotateOrder" );
			m_mDagModifier->connect( sP, dP );

			// toAim.translate -> vstAim.translate
			sP = toAimFn.findPlug( "translate" );
			dP = vstAimFn.findPlug( "translate" );
			m_mDagModifier->connect( sP, dP );

			// toAim.parentMatrix[ instance ] -> vstAim.parentSpace
			sP = toAimFn.findPlug( "parentMatrix" );
			sP = sP.elementByLogicalIndex( toAim.instanceNumber() );
			dP = vstAimFn.findPlug( "parentSpace" );
			m_mDagModifier->connect( sP, dP );

			// aimAt.worldMatrix[ instance ] -> vstAim.aimSpace
			sP = aimAtFn.findPlug( "worldMatrix" );
			sP = sP.elementByLogicalIndex( aimAt.instanceNumber() );
			dP = vstAimFn.findPlug( "aimSpace" );
			m_mDagModifier->connect( sP, dP );

			// vstAim.rotation -> toAim.rotation
			// These have to be connected individually because Maya plays stupid tricks
			// with rotateOrder if they aren't
			sP = vstAimFn.findPlug( "rotateX" );
			dP = toAimFn.findPlug( "rotateX" );
			m_mDagModifier->connect( sP, dP );

			sP = vstAimFn.findPlug( "rotateY" );
			dP = toAimFn.findPlug( "rotateY" );
			m_mDagModifier->connect( sP, dP );

			sP = vstAimFn.findPlug( "rotateZ" );
			dP = toAimFn.findPlug( "rotateZ" );
			m_mDagModifier->connect( sP, dP );

			if ( m_mDagModifier->doIt() != MS::kSuccess )
			{
				displayWarning( MString( GetName() ) + ": Couldn't connect everything when creating" );
			}

			// Save the current selection just in case we want to undo stuff
			MGlobal::getActiveSelectionList( m_mSelectionList );

			MGlobal::select( vstAimObj, MGlobal::kReplaceList );
			setResult( vstAimFn.name() );
		}
		else if ( m_mArgDatabase->isFlagSet( "select" ) )
		{
			MSelectionList mSelectionList;
			MDagPath mDagPath;

			for ( MItDag dagIt; !dagIt.isDone(); dagIt.next() )
			{
				if ( MFnDependencyNode( dagIt.item() ).typeName() == GetName() )
				{
					dagIt.getPath( mDagPath );
					mSelectionList.add( mDagPath, MObject::kNullObj, true );
				}
			}

			if ( mSelectionList.length() )
			{
				m_undoable = true;
				// Save the current selection just in case we want to undo stuff
				MGlobal::getActiveSelectionList( m_mSelectionList );
				MGlobal::setActiveSelectionList( mSelectionList, MGlobal::kReplaceList );
			}
		}
		else
		{
			displayError( GetName() + ": No valid operation specified via command line arguments\n" );
		}
	}

	return MS::kSuccess;
}
//
// Description:
//		Read the values of the additionnal flags for this command.
//
MStatus renderViewInteractiveRender::parseSyntax (MArgDatabase &argData)
{
	// Get the flag values, otherwise the default values are used.
	doNotClearBackground = argData.isFlagSet( kDoNotClearBackground );
	verbose = argData.isFlagSet( kVerbose );
	fullRefresh = argData.isFlagSet( kFullRefresh );
	immediateRefresh = argData.isFlagSet( kImmediateRefresh );

	radius = 50.;							// pattern frequency, in pixels
	if (argData.isFlagSet( kRadius ))
		argData.getFlagArgument(kRadius, 0, radius);

	size[0] = 640;
	size[1] = 480;
	if (argData.isFlagSet( kSizeX ))
		argData.getFlagArgument(kSizeX, 0, size[0]);
	if (argData.isFlagSet( kSizeY ))
		argData.getFlagArgument(kSizeY, 0, size[1]);

	tileSize[0] = 16;
	tileSize[1] = 16;
	if (argData.isFlagSet( kSizeTileX ))
		argData.getFlagArgument(kSizeTileX, 0, tileSize[0]);
	if (argData.isFlagSet( kSizeTileY ))
		argData.getFlagArgument(kSizeTileY, 0, tileSize[1]);

	numberLoops = 10;
	if (argData.isFlagSet( kNumberLoops ))
		argData.getFlagArgument(kNumberLoops, 0, numberLoops);

	return MS::kSuccess;
}