-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgaussianNode.cpp
More file actions
90 lines (68 loc) · 2.31 KB
/
gaussianNode.cpp
File metadata and controls
90 lines (68 loc) · 2.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "GaussianNode.h"
MTypeId GaussianNode::id( 0x00007175 );
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;
}
std::cout << "Deformer is working!(Delete std::cout afther succesfull testrun)\n";
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) / (2.0f * variance) );
MDataHandle hOutput = data.outputValue( aOutValue, &status );
CHECK_MSTATUS_AND_RETURN_IT( 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;
}