#include "geometrySurfaceConstraint.h"
MTypeId geometrySurfaceConstraint::id( 0x8103F );
MObject geometrySurfaceConstraint::compoundTarget;
MObject geometrySurfaceConstraint::targetGeometry;
MObject geometrySurfaceConstraint::targetWeight;
MObject geometrySurfaceConstraint::constraintParentInverseMatrix;
MObject geometrySurfaceConstraint::constraintGeometry;
geometrySurfaceConstraint::geometrySurfaceConstraint()
{
weightType = geometrySurfaceConstraintCommand::kLargestWeight;
}
geometrySurfaceConstraint::~geometrySurfaceConstraint()
{
}
void geometrySurfaceConstraint::postConstructor()
{
}
{
if ( plug == geometrySurfaceConstraint::constraintGeometry )
{
double weight,selectedWeight = 0;
if ( weightType == geometrySurfaceConstraintCommand::kSmallestWeight )
selectedWeight = FLT_MAX;
unsigned int i;
for ( i = 0; i < targetArrayCount; i++ )
{
if ( !equivalent(weight,0.0))
{
if ( weightType == geometrySurfaceConstraintCommand::kLargestWeight )
{
if ( weight > selectedWeight )
{
{
selectedMesh = mesh;
selectedWeight = weight;
}
}
}
else
{
if ( weight < selectedWeight )
{
{
selectedMesh = mesh;
selectedWeight = weight;
}
}
}
}
}
{
}
else
{
outputConstraintGeometryHandle.
setMObject(selectedMesh);
}
}
else
{
}
}
const MObject geometrySurfaceConstraint::weightAttribute()
const
{
return geometrySurfaceConstraint::targetWeight;
}
const MObject geometrySurfaceConstraint::targetAttribute()
const
{
return geometrySurfaceConstraint::compoundTarget;
}
void geometrySurfaceConstraint::getOutputAttributes(
MObjectArray& attributeArray)
{
attributeArray.
append( geometrySurfaceConstraint::constraintGeometry );
}
void* geometrySurfaceConstraint::creator()
{
return new geometrySurfaceConstraint();
}
MStatus geometrySurfaceConstraint::initialize()
{
{
geometrySurfaceConstraint::constraintGeometry =
if (!status) { status.
perror(
"typedAttrNotWritable.create:cgeom");
return status;}
if (!status) { status.
perror(
"typedAttrNotWritable.setReadable:cgeom");
return status;}
if (!status) { status.
perror(
"typedAttrNotWritable.setWritable:cgeom");
return status;}
if (!status) { status.
perror(
"typedAttrNotWritable.setDisconnectBehavior:cgeom");
return status;}
}
{
geometrySurfaceConstraint::constraintParentInverseMatrix =
if (!status) { status.
perror(
"typedAttr.create:matrix");
return status;}
if (!status) { status.
perror(
"typedAttr.setDisconnectBehavior:cgeom");
return status;}
geometrySurfaceConstraint::targetGeometry =
if (!status) { status.
perror(
"typedAttr.create:tgeom");
return status;}
if (!status) { status.
perror(
"typedAttr.setDisconnectBehavior:cgeom");
return status;}
}
{
geometrySurfaceConstraint::targetWeight
if (!status) { status.
perror(
"typedAttrKeyable.create:weight");
return status;}
status = typedAttrKeyable.
setMin( (
double) 0 );
if (!status) { status.
perror(
"typedAttrKeyable.setMin");
return status;}
if (!status) { status.
perror(
"typedAttrKeyable.setKeyable");
return status;}
if (!status) { status.
perror(
"typedAttrKeyable.setDisconnectBehavior:cgeom");
return status;}
}
{
geometrySurfaceConstraint::compoundTarget =
compoundAttr.
create(
"target",
"tgt",&status );
if (!status) { status.
perror(
"compoundAttr.create");
return status;}
status = compoundAttr.
addChild( geometrySurfaceConstraint::targetGeometry );
if (!status) { status.
perror(
"compoundAttr.addChild");
return status;}
status = compoundAttr.
addChild( geometrySurfaceConstraint::targetWeight );
if (!status) { status.
perror(
"compoundAttr.addChild");
return status;}
if (!status) { status.
perror(
"compoundAttr.setArray");
return status;}
if (!status) { status.
perror(
"typedAttrKeyable.setDisconnectBehavior:cgeom");
return status;}
}
status = addAttribute( geometrySurfaceConstraint::constraintParentInverseMatrix );
if (!status) { status.
perror(
"addAttribute");
return status;}
status = addAttribute( geometrySurfaceConstraint::constraintGeometry );
if (!status) { status.
perror(
"addAttribute");
return status;}
status = addAttribute( geometrySurfaceConstraint::compoundTarget );
if (!status) { status.
perror(
"addAttribute");
return status;}
status = attributeAffects( compoundTarget, constraintGeometry );
if (!status) { status.
perror(
"attributeAffects");
return status;}
status = attributeAffects( targetGeometry, constraintGeometry );
if (!status) { status.
perror(
"attributeAffects");
return status;}
status = attributeAffects( targetWeight, constraintGeometry );
if (!status) { status.
perror(
"attributeAffects");
return status;}
status = attributeAffects( constraintParentInverseMatrix, constraintGeometry );
if (!status) { status.
perror(
"attributeAffects");
return status;}
}
geometrySurfaceConstraintCommand::geometrySurfaceConstraintCommand() {}
geometrySurfaceConstraintCommand::~geometrySurfaceConstraintCommand() {}
void* geometrySurfaceConstraintCommand::creator()
{
return new geometrySurfaceConstraintCommand();
}
void geometrySurfaceConstraintCommand::createdConstraint(
MPxConstraint *constraint)
{
if ( constraint )
{
geometrySurfaceConstraint *c = (geometrySurfaceConstraint*) constraint;
c->weightType = weightType;
}
else
{
}
}
MStatus geometrySurfaceConstraintCommand::parseArgs(
const MArgList &argList)
{
if ( ReturnStatus.
error() )
ConstraintType typ;
if (argData.isFlagSet(kConstrainToLargestWeightFlag))
typ = geometrySurfaceConstraintCommand::kLargestWeight;
else if (argData.isFlagSet(kConstrainToSmallestWeightFlag))
typ = geometrySurfaceConstraintCommand::kSmallestWeight;
else
typ = geometrySurfaceConstraintCommand::kLargestWeight;
weightType = typ;
}
{
}
MStatus geometrySurfaceConstraintCommand::connectTarget(
void *opaqueTarget,
int index)
{
MStatus status = connectTargetAttribute(
opaqueTarget, index, geometrySurfaceConstraint::targetGeometry );
if (!status) { status.
perror(
"connectTargetGeometry");
return status;}
}
MStatus geometrySurfaceConstraintCommand::connectObjectAndConstraint(
MDGModifier& modifier )
{
MObject transform = transformObject();
{
}
if (!status) { status.
perror(
" transformFn.getTranslation");
return status;}
MPlug translatePlug = transformFn.findPlug(
"translate", &status );
if (!status) { status.
perror(
" transformFn.findPlug");
return status;}
{
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(
geometrySurfaceConstraint::constraintParentInverseMatrix, true, true );
if (!status) { status.
perror(
"connectObjectAttribute");
return status;}
}
const MObject& geometrySurfaceConstraintCommand::constraintInstancedAttribute()
const
{
return geometrySurfaceConstraint::constraintParentInverseMatrix;
}
const MObject& geometrySurfaceConstraintCommand::constraintOutputAttribute()
const
{
return geometrySurfaceConstraint::constraintGeometry;
}
const MObject& geometrySurfaceConstraintCommand::constraintTargetInstancedAttribute()
const
{
return geometrySurfaceConstraint::targetGeometry;
}
const MObject& geometrySurfaceConstraintCommand::constraintTargetAttribute()
const
{
return geometrySurfaceConstraint::compoundTarget;
}
const MObject& geometrySurfaceConstraintCommand::constraintTargetWeightAttribute()
const
{
return geometrySurfaceConstraint::targetWeight;
}
const MObject& geometrySurfaceConstraintCommand::objectAttribute()
const
{
return MPxTransform::geometry;
}
MTypeId geometrySurfaceConstraintCommand::constraintTypeId()
const
{
return geometrySurfaceConstraint::id;
}
{
}
MStatus geometrySurfaceConstraintCommand::appendSyntax()
{
MSyntax theSyntax = syntax(&ReturnStatus);
return ReturnStatus;
}
theSyntax.
addFlag( kConstrainToLargestWeightFlag, kConstrainToLargestWeightFlagLong );
theSyntax.
addFlag( kConstrainToSmallestWeightFlag, kConstrainToSmallestWeightFlagLong );
return ReturnStatus;
}
{
MFnPlugin plugin( obj, PLUGIN_COMPANY,
"9.0",
"Any");
status = plugin.registerNode( "geometrySurfaceConstraint", geometrySurfaceConstraint::id, geometrySurfaceConstraint::creator,
if (!status) {
status.
perror(
"registerNode");
return status;
}
status = plugin.registerConstraintCommand( "geometrySurfaceConstraint", geometrySurfaceConstraintCommand::creator );
if (!status) {
status.
perror(
"registerConstraintCommand");
return status;
}
return status;
}
{
status = plugin.deregisterNode( geometrySurfaceConstraint::id );
if (!status) {
status.
perror(
"deregisterNode");
return status;
}
status = plugin.deregisterConstraintCommand( "geometrySurfaceConstraint" );
if (!status) {
status.
perror(
"deregisterNode");
return status;
}
return status;
}