Blender  V2.93
COM_MathNode.cc
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * Copyright 2011, Blender Foundation.
17  */
18 
19 #include "COM_MathNode.h"
20 #include "COM_ExecutionSystem.h"
21 #include "COM_MathBaseOperation.h"
22 
23 namespace blender::compositor {
24 
26  const CompositorContext & /*context*/) const
27 {
28  MathBaseOperation *operation = nullptr;
29 
30  switch (this->getbNode()->custom1) {
31  case NODE_MATH_ADD:
32  operation = new MathAddOperation();
33  break;
34  case NODE_MATH_SUBTRACT:
35  operation = new MathSubtractOperation();
36  break;
37  case NODE_MATH_MULTIPLY:
38  operation = new MathMultiplyOperation();
39  break;
40  case NODE_MATH_DIVIDE:
41  operation = new MathDivideOperation();
42  break;
43  case NODE_MATH_SINE:
44  operation = new MathSineOperation();
45  break;
46  case NODE_MATH_COSINE:
47  operation = new MathCosineOperation();
48  break;
49  case NODE_MATH_TANGENT:
50  operation = new MathTangentOperation();
51  break;
52  case NODE_MATH_ARCSINE:
53  operation = new MathArcSineOperation();
54  break;
56  operation = new MathArcCosineOperation();
57  break;
59  operation = new MathArcTangentOperation();
60  break;
61  case NODE_MATH_SINH:
62  operation = new MathHyperbolicSineOperation();
63  break;
64  case NODE_MATH_COSH:
65  operation = new MathHyperbolicCosineOperation();
66  break;
67  case NODE_MATH_TANH:
68  operation = new MathHyperbolicTangentOperation();
69  break;
70  case NODE_MATH_POWER:
71  operation = new MathPowerOperation();
72  break;
74  operation = new MathLogarithmOperation();
75  break;
76  case NODE_MATH_MINIMUM:
77  operation = new MathMinimumOperation();
78  break;
79  case NODE_MATH_MAXIMUM:
80  operation = new MathMaximumOperation();
81  break;
82  case NODE_MATH_ROUND:
83  operation = new MathRoundOperation();
84  break;
86  operation = new MathLessThanOperation();
87  break;
89  operation = new MathGreaterThanOperation();
90  break;
91  case NODE_MATH_MODULO:
92  operation = new MathModuloOperation();
93  break;
94  case NODE_MATH_ABSOLUTE:
95  operation = new MathAbsoluteOperation();
96  break;
97  case NODE_MATH_RADIANS:
98  operation = new MathRadiansOperation();
99  break;
100  case NODE_MATH_DEGREES:
101  operation = new MathDegreesOperation();
102  break;
103  case NODE_MATH_ARCTAN2:
104  operation = new MathArcTan2Operation();
105  break;
106  case NODE_MATH_FLOOR:
107  operation = new MathFloorOperation();
108  break;
109  case NODE_MATH_CEIL:
110  operation = new MathCeilOperation();
111  break;
112  case NODE_MATH_FRACTION:
113  operation = new MathFractOperation();
114  break;
115  case NODE_MATH_SQRT:
116  operation = new MathSqrtOperation();
117  break;
118  case NODE_MATH_INV_SQRT:
119  operation = new MathInverseSqrtOperation();
120  break;
121  case NODE_MATH_SIGN:
122  operation = new MathSignOperation();
123  break;
124  case NODE_MATH_EXPONENT:
125  operation = new MathExponentOperation();
126  break;
127  case NODE_MATH_TRUNC:
128  operation = new MathTruncOperation();
129  break;
130  case NODE_MATH_SNAP:
131  operation = new MathSnapOperation();
132  break;
133  case NODE_MATH_WRAP:
134  operation = new MathWrapOperation();
135  break;
136  case NODE_MATH_PINGPONG:
137  operation = new MathPingpongOperation();
138  break;
139  case NODE_MATH_COMPARE:
140  operation = new MathCompareOperation();
141  break;
143  operation = new MathMultiplyAddOperation();
144  break;
146  operation = new MathSmoothMinOperation();
147  break;
149  operation = new MathSmoothMaxOperation();
150  break;
151  }
152 
153  if (operation) {
154  bool useClamp = getbNode()->custom2;
155  operation->setUseClamp(useClamp);
156  converter.addOperation(operation);
157 
158  converter.mapInputSocket(getInputSocket(0), operation->getInputSocket(0));
159  converter.mapInputSocket(getInputSocket(1), operation->getInputSocket(1));
160  converter.mapInputSocket(getInputSocket(2), operation->getInputSocket(2));
161  converter.mapOutputSocket(getOutputSocket(0), operation->getOutputSocket());
162  }
163 }
164 
165 } // namespace blender::compositor
@ NODE_MATH_SINH
@ NODE_MATH_SMOOTH_MIN
@ NODE_MATH_TRUNC
@ NODE_MATH_COSH
@ NODE_MATH_SIGN
@ NODE_MATH_DEGREES
@ NODE_MATH_MODULO
@ NODE_MATH_ABSOLUTE
@ NODE_MATH_DIVIDE
@ NODE_MATH_SINE
@ NODE_MATH_ARCTAN2
@ NODE_MATH_ARCCOSINE
@ NODE_MATH_MULTIPLY_ADD
@ NODE_MATH_POWER
@ NODE_MATH_WRAP
@ NODE_MATH_ARCTANGENT
@ NODE_MATH_MINIMUM
@ NODE_MATH_SQRT
@ NODE_MATH_CEIL
@ NODE_MATH_TANH
@ NODE_MATH_GREATER_THAN
@ NODE_MATH_ADD
@ NODE_MATH_FRACTION
@ NODE_MATH_EXPONENT
@ NODE_MATH_LESS_THAN
@ NODE_MATH_ARCSINE
@ NODE_MATH_MAXIMUM
@ NODE_MATH_LOGARITHM
@ NODE_MATH_COMPARE
@ NODE_MATH_INV_SQRT
@ NODE_MATH_MULTIPLY
@ NODE_MATH_PINGPONG
@ NODE_MATH_ROUND
@ NODE_MATH_FLOOR
@ NODE_MATH_SUBTRACT
@ NODE_MATH_COSINE
@ NODE_MATH_SNAP
@ NODE_MATH_TANGENT
@ NODE_MATH_SMOOTH_MAX
@ NODE_MATH_RADIANS
Overall context of the compositor.
void convertToOperations(NodeConverter &converter, const CompositorContext &context) const override
convert node to operation
Definition: COM_MathNode.cc:25
void mapInputSocket(NodeInput *node_socket, NodeOperationInput *operation_socket)
void addOperation(NodeOperation *operation)
void mapOutputSocket(NodeOutput *node_socket, NodeOperationOutput *operation_socket)
NodeOperationInput * getInputSocket(unsigned int index)
NodeOperationOutput * getOutputSocket(unsigned int index=0)
NodeOutput * getOutputSocket(const unsigned int index=0) const
Definition: COM_Node.cc:108
bNode * getbNode() const
get the reference to the SDNA bNode struct
Definition: COM_Node.h:82
NodeInput * getInputSocket(const unsigned int index) const
Definition: COM_Node.cc:113
short custom2