Blender V4.3
COM_MathNode.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "COM_MathNode.h"
7
8namespace blender::compositor {
9
11 const CompositorContext & /*context*/) const
12{
13 MathBaseOperation *operation = nullptr;
14
15 switch (this->get_bnode()->custom1) {
16 case NODE_MATH_ADD:
17 operation = new MathAddOperation();
18 break;
20 operation = new MathSubtractOperation();
21 break;
23 operation = new MathMultiplyOperation();
24 break;
26 operation = new MathDivideOperation();
27 break;
28 case NODE_MATH_SINE:
29 operation = new MathSineOperation();
30 break;
32 operation = new MathCosineOperation();
33 break;
35 operation = new MathTangentOperation();
36 break;
38 operation = new MathArcSineOperation();
39 break;
41 operation = new MathArcCosineOperation();
42 break;
44 operation = new MathArcTangentOperation();
45 break;
46 case NODE_MATH_SINH:
47 operation = new MathHyperbolicSineOperation();
48 break;
49 case NODE_MATH_COSH:
50 operation = new MathHyperbolicCosineOperation();
51 break;
52 case NODE_MATH_TANH:
53 operation = new MathHyperbolicTangentOperation();
54 break;
55 case NODE_MATH_POWER:
56 operation = new MathPowerOperation();
57 break;
59 operation = new MathLogarithmOperation();
60 break;
62 operation = new MathMinimumOperation();
63 break;
65 operation = new MathMaximumOperation();
66 break;
67 case NODE_MATH_ROUND:
68 operation = new MathRoundOperation();
69 break;
71 operation = new MathLessThanOperation();
72 break;
74 operation = new MathGreaterThanOperation();
75 break;
77 operation = new MathModuloOperation();
78 break;
80 operation = new MathFlooredModuloOperation();
81 break;
83 operation = new MathAbsoluteOperation();
84 break;
86 operation = new MathRadiansOperation();
87 break;
89 operation = new MathDegreesOperation();
90 break;
92 operation = new MathArcTan2Operation();
93 break;
94 case NODE_MATH_FLOOR:
95 operation = new MathFloorOperation();
96 break;
97 case NODE_MATH_CEIL:
98 operation = new MathCeilOperation();
99 break;
101 operation = new MathFractOperation();
102 break;
103 case NODE_MATH_SQRT:
104 operation = new MathSqrtOperation();
105 break;
107 operation = new MathInverseSqrtOperation();
108 break;
109 case NODE_MATH_SIGN:
110 operation = new MathSignOperation();
111 break;
113 operation = new MathExponentOperation();
114 break;
115 case NODE_MATH_TRUNC:
116 operation = new MathTruncOperation();
117 break;
118 case NODE_MATH_SNAP:
119 operation = new MathSnapOperation();
120 break;
121 case NODE_MATH_WRAP:
122 operation = new MathWrapOperation();
123 break;
125 operation = new MathPingpongOperation();
126 break;
128 operation = new MathCompareOperation();
129 break;
131 operation = new MathMultiplyAddOperation();
132 break;
134 operation = new MathSmoothMinOperation();
135 break;
137 operation = new MathSmoothMaxOperation();
138 break;
139 }
140
141 if (operation) {
142 bool use_clamp = get_bnode()->custom2;
143 operation->set_use_clamp(use_clamp);
144 converter.add_operation(operation);
145
146 converter.map_input_socket(get_input_socket(0), operation->get_input_socket(0));
147 converter.map_input_socket(get_input_socket(1), operation->get_input_socket(1));
148 converter.map_input_socket(get_input_socket(2), operation->get_input_socket(2));
149 converter.map_output_socket(get_output_socket(0), operation->get_output_socket());
150 }
151}
152
153} // 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_FLOORED_MODULO
@ 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
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:85
NodeInput * get_input_socket(unsigned int index) const
Definition COM_Node.cc:90
const bNode * get_bnode() const
get the reference to the SDNA bNode struct
Definition COM_Node.h:65
int16_t custom2