MStatus geometrySurfaceConstraintCommand::connectObjectAndConstraint( MDGModifier& modifier ) { MObject transform = transformObject(); if ( transform.isNull() ) { MGlobal::displayError("Failed to get transformObject()"); return MS::kFailure; } MStatus status; MFnTransform transformFn( transform ); MVector translate = transformFn.getTranslation(MSpace::kTransform,&status); if (!status) { status.perror(" transformFn.getTranslation"); return status;} MPlug translatePlug = transformFn.findPlug( "translate", &status ); if (!status) { status.perror(" transformFn.findPlug"); return status;} if ( MPlug::kFreeToChange == translatePlug.isFreeToChange() ) { MFnNumericData nd; MObject translateData = nd.create( MFnNumericData::k3Double, &status ); status = nd.setData3Double( translate.x,translate.y,translate.z); if (!status) { status.perror("nd.setData3Double"); return status;} status = modifier.newPlugValue( translatePlug, translateData ); if (!status) { status.perror("modifier.newPlugValue"); return status;} status = connectObjectAttribute( MPxTransform::geometry, geometrySurfaceConstraint::constraintGeometry, false ); if (!status) { status.perror("connectObjectAttribute"); return status;} } status = connectObjectAttribute( MPxTransform::parentInverseMatrix, geometrySurfaceConstraint::constraintParentInverseMatrix, true, true ); if (!status) { status.perror("connectObjectAttribute"); return status;} return MS::kSuccess; }