상세 컨텐츠

본문 제목

gassianNode 강좌 정리 02 - source

Maya API/Maya_API 구문들

by hwano 2013. 12. 18. 21:39

본문

 

 

참고

 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;

}

 

관련글 더보기