참고
http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=50&MaeulNo=20&no=748337&ref=748336
---------------------------------------------------------------------------------------------------------------
#include "GaussianNode.h"
앞선 헤더파일에서 GaussianNode클래서 안에서 각각 attribute들을 선언해 주었다.
그걸 이쪽 파일에서도 가져다 쓰겠다다는 말이다.
즉, a::b 는 a에 있는 b를 사용하겠다
MTypeId GaussianNode::id( 0x00000231 );
MObject GaussianNode::aOutValue;
MObject GaussianNode::aInValue;
MObject GaussianNode::aMagnitude;
MObject GaussianNode::aMean;
MObject GaussianNode::aVariance;
그냥 해놓으랜다
GaussianNode::GaussianNode()
{
}
GaussianNode::~GaussianNode()
{
}
여기도 몰라
그냥 해놓으랜다
void* GaussianNode::creator()
{
return new GaussianNode();
}
아래는 노드의 작동 구문
MStatus GaussianNode::compute( const MPlug& plug, MDataBlock& data )
{
MStatus status;
if ( plug != aOutValue )
{
return MS::kUnknownParameter;
}
float inputValue = data.inputValue( aInValue, &status ).asFloat();
float magnitude = data.inputValue( aMagnitude, &status ).asFloat();
float mean = data.inputValue( aMean, &status ).asFloat();
float variance = data.inputValue( aVariance, &status ).asFloat();
if ( variance <= 0.0f )
{
variance = 0.001f;
}
float xMinusB = inputValue - mean;
float output = magnitude * exp( -(xMinusB * xMinusB ) / ( 20.f * variance ) );
MDataHandle hOutput = data.outputValue( aOutValue, &status );
hOutput.setFloat( output );
hOutput.setClean( );
data.setClean( plug );
return MS::kSuccess;
}
MStatus GaussianNode::initialize()
{
MStatus status;
MFnNumericAttribute nAttr;
aOutValue = nAttr.create( "outValue", "outvalue", MFnNumericData::kFloat );
nAttr.setWritable( false );
nAttr.setStorable( false );
addAttribute( aOutValue );
aInValue = nAttr.create( "inValue", "inValue", MFnNumericData::kFloat );
nAttr.setKeyable( true );
addAttribute( aInValue );
attributeAffects( aInValue, aOutValue );
aMagnitude = nAttr.create( "magnitude", "magnitude", MFnNumericData::kFloat );
nAttr.setKeyable( true );
addAttribute( aMagnitude );
attributeAffects( aMagnitude, aOutValue );
aMean = nAttr.create( "mean", "mean", MFnNumericData::kFloat );
nAttr.setKeyable( true );
addAttribute( aMean );
attributeAffects( aMean, aOutValue );
aVariance = nAttr.create( "variance", "variance", MFnNumericData::kFloat );
nAttr.setKeyable( true );
addAttribute( aVariance );
attributeAffects( aVariance, aOutValue );
return MS::kSuccess;
}