#include "closestPointOnCurveNode.h"
#include "closestTangentUAndDistance.h"
MTypeId closestPointOnCurveNode::id(0x00105482);
MObject closestPointOnCurveNode::aInCurve;
MObject closestPointOnCurveNode::aInPosition;
MObject closestPointOnCurveNode::aInPositionX;
MObject closestPointOnCurveNode::aInPositionY;
MObject closestPointOnCurveNode::aInPositionZ;
MObject closestPointOnCurveNode::aPosition;
MObject closestPointOnCurveNode::aPositionX;
MObject closestPointOnCurveNode::aPositionY;
MObject closestPointOnCurveNode::aPositionZ;
MObject closestPointOnCurveNode::aNormal;
MObject closestPointOnCurveNode::aNormalX;
MObject closestPointOnCurveNode::aNormalY;
MObject closestPointOnCurveNode::aNormalZ;
MObject closestPointOnCurveNode::aTangent;
MObject closestPointOnCurveNode::aTangentX;
MObject closestPointOnCurveNode::aTangentY;
MObject closestPointOnCurveNode::aTangentZ;
MObject closestPointOnCurveNode::aParamU;
MObject closestPointOnCurveNode::aDistance;
closestPointOnCurveNode::closestPointOnCurveNode()
{}
closestPointOnCurveNode::~closestPointOnCurveNode()
{}
void *closestPointOnCurveNode::creator()
{
return new closestPointOnCurveNode();
}
MStatus closestPointOnCurveNode::initialize()
{
addAttribute(aInCurve);
addAttribute(aInPositionX);
addAttribute(aInPositionY);
addAttribute(aInPositionZ);
aInPosition = inPositionAttrFn.
create(
"inPosition",
"ip", aInPositionX, aInPositionY, aInPositionZ);
addAttribute(aInPosition);
addAttribute(aPositionX);
addAttribute(aPositionY);
addAttribute(aPositionZ);
aPosition = pointAttrFn.
create(
"position",
"p", aPositionX, aPositionY, aPositionZ);
addAttribute(aPosition);
addAttribute(aNormalX);
addAttribute(aNormalY);
addAttribute(aNormalZ);
aNormal = normalAttrFn.
create(
"normal",
"n", aNormalX, aNormalY, aNormalZ);
addAttribute(aNormal);
addAttribute(aTangentX);
addAttribute(aTangentY);
addAttribute(aTangentZ);
aTangent = tangentAttrFn.
create(
"tangent",
"t", aTangentX, aTangentY, aTangentZ);
addAttribute(aTangent);
addAttribute(aParamU);
addAttribute(aDistance);
attributeAffects(aInCurve, aPosition);
attributeAffects(aInCurve, aPositionX);
attributeAffects(aInCurve, aPositionY);
attributeAffects(aInCurve, aPositionZ);
attributeAffects(aInCurve, aNormal);
attributeAffects(aInCurve, aNormalX);
attributeAffects(aInCurve, aNormalY);
attributeAffects(aInCurve, aNormalZ);
attributeAffects(aInCurve, aTangent);
attributeAffects(aInCurve, aTangentX);
attributeAffects(aInCurve, aTangentY);
attributeAffects(aInCurve, aTangentZ);
attributeAffects(aInCurve, aParamU);
attributeAffects(aInCurve, aDistance);
attributeAffects(aInPosition, aPosition);
attributeAffects(aInPosition, aPositionX);
attributeAffects(aInPosition, aPositionY);
attributeAffects(aInPosition, aPositionZ);
attributeAffects(aInPosition, aNormal);
attributeAffects(aInPosition, aNormalX);
attributeAffects(aInPosition, aNormalY);
attributeAffects(aInPosition, aNormalZ);
attributeAffects(aInPosition, aTangent);
attributeAffects(aInPosition, aTangentX);
attributeAffects(aInPosition, aTangentY);
attributeAffects(aInPosition, aTangentZ);
attributeAffects(aInPosition, aParamU);
attributeAffects(aInPosition, aDistance);
attributeAffects(aInPositionX, aPosition);
attributeAffects(aInPositionX, aPositionX);
attributeAffects(aInPositionX, aPositionY);
attributeAffects(aInPositionX, aPositionZ);
attributeAffects(aInPositionX, aNormal);
attributeAffects(aInPositionX, aNormalX);
attributeAffects(aInPositionX, aNormalY);
attributeAffects(aInPositionX, aNormalZ);
attributeAffects(aInPositionX, aTangent);
attributeAffects(aInPositionX, aTangentX);
attributeAffects(aInPositionX, aTangentY);
attributeAffects(aInPositionX, aTangentZ);
attributeAffects(aInPositionX, aParamU);
attributeAffects(aInPositionX, aDistance);
attributeAffects(aInPositionY, aPosition);
attributeAffects(aInPositionY, aPositionX);
attributeAffects(aInPositionY, aPositionY);
attributeAffects(aInPositionY, aPositionZ);
attributeAffects(aInPositionY, aNormal);
attributeAffects(aInPositionY, aNormalX);
attributeAffects(aInPositionY, aNormalY);
attributeAffects(aInPositionY, aNormalZ);
attributeAffects(aInPositionY, aTangent);
attributeAffects(aInPositionY, aTangentX);
attributeAffects(aInPositionY, aTangentY);
attributeAffects(aInPositionY, aTangentZ);
attributeAffects(aInPositionY, aParamU);
attributeAffects(aInPositionY, aDistance);
attributeAffects(aInPositionZ, aPosition);
attributeAffects(aInPositionZ, aPositionX);
attributeAffects(aInPositionZ, aPositionY);
attributeAffects(aInPositionZ, aPositionZ);
attributeAffects(aInPositionZ, aNormal);
attributeAffects(aInPositionZ, aNormalX);
attributeAffects(aInPositionZ, aNormalY);
attributeAffects(aInPositionZ, aNormalZ);
attributeAffects(aInPositionZ, aTangent);
attributeAffects(aInPositionZ, aTangentX);
attributeAffects(aInPositionZ, aTangentY);
attributeAffects(aInPositionZ, aTangentZ);
attributeAffects(aInPositionZ, aParamU);
attributeAffects(aInPositionZ, aDistance);
return MS::kSuccess;
}
{
if ((plug == aPosition) || (plug == aPositionX) || (plug == aPositionY) || (plug == aPositionZ)
|| (plug == aNormal) || (plug == aNormalX) || (plug == aNormalY) || (plug == aNormalZ)
|| (plug == aTangent) || (plug == aTangentX) || (plug == aTangentY) || (plug == aTangentZ)
|| (plug == aParamU) || (plug == aDistance))
{
double inPositionX = inPositionXDataHandle.
asDouble();
double inPositionY = inPositionYDataHandle.
asDouble();
double inPositionZ = inPositionZDataHandle.
asDouble();
MPoint inPosition(inPositionX, inPositionY, inPositionZ), position;
double paramU, distance;
closestTangentUAndDistance(dummyDagPath, inPosition, position, normal, tangent, paramU, distance, inCurve);
positionDataHandle.
set(position.
x, position.
y, position.
z);
normalDataHandle.
set(normal.
x, normal.
y, normal.
z);
tangentDataHandle.
set(tangent.
x, tangent.
y, tangent.
z);
paramUDataHandle.
set(paramU);
distanceDataHandle.
set(distance);
} else {
return MS::kUnknownParameter;
}
return MS::kSuccess;
}