Blender  V3.3
COM_MathNode.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2011 Blender Foundation. */
3 
4 #include "COM_MathNode.h"
6 
7 namespace blender::compositor {
8 
10  const CompositorContext & /*context*/) const
11 {
12  MathBaseOperation *operation = nullptr;
13 
14  switch (this->get_bnode()->custom1) {
15  case NODE_MATH_ADD:
16  operation = new MathAddOperation();
17  break;
18  case NODE_MATH_SUBTRACT:
19  operation = new MathSubtractOperation();
20  break;
21  case NODE_MATH_MULTIPLY:
22  operation = new MathMultiplyOperation();
23  break;
24  case NODE_MATH_DIVIDE:
25  operation = new MathDivideOperation();
26  break;
27  case NODE_MATH_SINE:
28  operation = new MathSineOperation();
29  break;
30  case NODE_MATH_COSINE:
31  operation = new MathCosineOperation();
32  break;
33  case NODE_MATH_TANGENT:
34  operation = new MathTangentOperation();
35  break;
36  case NODE_MATH_ARCSINE:
37  operation = new MathArcSineOperation();
38  break;
40  operation = new MathArcCosineOperation();
41  break;
43  operation = new MathArcTangentOperation();
44  break;
45  case NODE_MATH_SINH:
46  operation = new MathHyperbolicSineOperation();
47  break;
48  case NODE_MATH_COSH:
49  operation = new MathHyperbolicCosineOperation();
50  break;
51  case NODE_MATH_TANH:
52  operation = new MathHyperbolicTangentOperation();
53  break;
54  case NODE_MATH_POWER:
55  operation = new MathPowerOperation();
56  break;
58  operation = new MathLogarithmOperation();
59  break;
60  case NODE_MATH_MINIMUM:
61  operation = new MathMinimumOperation();
62  break;
63  case NODE_MATH_MAXIMUM:
64  operation = new MathMaximumOperation();
65  break;
66  case NODE_MATH_ROUND:
67  operation = new MathRoundOperation();
68  break;
70  operation = new MathLessThanOperation();
71  break;
73  operation = new MathGreaterThanOperation();
74  break;
75  case NODE_MATH_MODULO:
76  operation = new MathModuloOperation();
77  break;
78  case NODE_MATH_ABSOLUTE:
79  operation = new MathAbsoluteOperation();
80  break;
81  case NODE_MATH_RADIANS:
82  operation = new MathRadiansOperation();
83  break;
84  case NODE_MATH_DEGREES:
85  operation = new MathDegreesOperation();
86  break;
87  case NODE_MATH_ARCTAN2:
88  operation = new MathArcTan2Operation();
89  break;
90  case NODE_MATH_FLOOR:
91  operation = new MathFloorOperation();
92  break;
93  case NODE_MATH_CEIL:
94  operation = new MathCeilOperation();
95  break;
96  case NODE_MATH_FRACTION:
97  operation = new MathFractOperation();
98  break;
99  case NODE_MATH_SQRT:
100  operation = new MathSqrtOperation();
101  break;
102  case NODE_MATH_INV_SQRT:
103  operation = new MathInverseSqrtOperation();
104  break;
105  case NODE_MATH_SIGN:
106  operation = new MathSignOperation();
107  break;
108  case NODE_MATH_EXPONENT:
109  operation = new MathExponentOperation();
110  break;
111  case NODE_MATH_TRUNC:
112  operation = new MathTruncOperation();
113  break;
114  case NODE_MATH_SNAP:
115  operation = new MathSnapOperation();
116  break;
117  case NODE_MATH_WRAP:
118  operation = new MathWrapOperation();
119  break;
120  case NODE_MATH_PINGPONG:
121  operation = new MathPingpongOperation();
122  break;
123  case NODE_MATH_COMPARE:
124  operation = new MathCompareOperation();
125  break;
127  operation = new MathMultiplyAddOperation();
128  break;
130  operation = new MathSmoothMinOperation();
131  break;
133  operation = new MathSmoothMaxOperation();
134  break;
135  }
136 
137  if (operation) {
138  bool use_clamp = get_bnode()->custom2;
139  operation->set_use_clamp(use_clamp);
140  converter.add_operation(operation);
141 
142  converter.map_input_socket(get_input_socket(0), operation->get_input_socket(0));
143  converter.map_input_socket(get_input_socket(1), operation->get_input_socket(1));
144  converter.map_input_socket(get_input_socket(2), operation->get_input_socket(2));
145  converter.map_output_socket(get_output_socket(0), operation->get_output_socket());
146  }
147 }
148 
149 } // 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 convert_to_operations(NodeConverter &converter, const CompositorContext &context) const override
convert node to operation
Definition: COM_MathNode.cc:9
void map_output_socket(NodeOutput *node_socket, NodeOperationOutput *operation_socket)
void add_operation(NodeOperation *operation)
void map_input_socket(NodeInput *node_socket, NodeOperationInput *operation_socket)
NodeOperationOutput * get_output_socket(unsigned int index=0)
NodeOperationInput * get_input_socket(unsigned int index)
NodeOutput * get_output_socket(unsigned int index=0) const
Definition: COM_Node.cc:84
bNode * get_bnode() const
get the reference to the SDNA bNode struct
Definition: COM_Node.h:64
NodeInput * get_input_socket(unsigned int index) const
Definition: COM_Node.cc:89
short custom2