Welcome to mirror list, hosted at ThFree Co, Russian Federation.

COM_MathNode.cc « nodes « compositor « blender « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 0edf880400fbfcf55f0933db90ca1eed3bfd0781 (plain)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
/*
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 * Copyright 2011, Blender Foundation.
 */

#include "COM_MathNode.h"
#include "COM_ExecutionSystem.h"
#include "COM_MathBaseOperation.h"

void MathNode::convertToOperations(NodeConverter &converter,
                                   const CompositorContext & /*context*/) const
{
  MathBaseOperation *operation = nullptr;

  switch (this->getbNode()->custom1) {
    case NODE_MATH_ADD:
      operation = new MathAddOperation();
      break;
    case NODE_MATH_SUBTRACT:
      operation = new MathSubtractOperation();
      break;
    case NODE_MATH_MULTIPLY:
      operation = new MathMultiplyOperation();
      break;
    case NODE_MATH_DIVIDE:
      operation = new MathDivideOperation();
      break;
    case NODE_MATH_SINE:
      operation = new MathSineOperation();
      break;
    case NODE_MATH_COSINE:
      operation = new MathCosineOperation();
      break;
    case NODE_MATH_TANGENT:
      operation = new MathTangentOperation();
      break;
    case NODE_MATH_ARCSINE:
      operation = new MathArcSineOperation();
      break;
    case NODE_MATH_ARCCOSINE:
      operation = new MathArcCosineOperation();
      break;
    case NODE_MATH_ARCTANGENT:
      operation = new MathArcTangentOperation();
      break;
    case NODE_MATH_SINH:
      operation = new MathHyperbolicSineOperation();
      break;
    case NODE_MATH_COSH:
      operation = new MathHyperbolicCosineOperation();
      break;
    case NODE_MATH_TANH:
      operation = new MathHyperbolicTangentOperation();
      break;
    case NODE_MATH_POWER:
      operation = new MathPowerOperation();
      break;
    case NODE_MATH_LOGARITHM:
      operation = new MathLogarithmOperation();
      break;
    case NODE_MATH_MINIMUM:
      operation = new MathMinimumOperation();
      break;
    case NODE_MATH_MAXIMUM:
      operation = new MathMaximumOperation();
      break;
    case NODE_MATH_ROUND:
      operation = new MathRoundOperation();
      break;
    case NODE_MATH_LESS_THAN:
      operation = new MathLessThanOperation();
      break;
    case NODE_MATH_GREATER_THAN:
      operation = new MathGreaterThanOperation();
      break;
    case NODE_MATH_MODULO:
      operation = new MathModuloOperation();
      break;
    case NODE_MATH_ABSOLUTE:
      operation = new MathAbsoluteOperation();
      break;
    case NODE_MATH_RADIANS:
      operation = new MathRadiansOperation();
      break;
    case NODE_MATH_DEGREES:
      operation = new MathDegreesOperation();
      break;
    case NODE_MATH_ARCTAN2:
      operation = new MathArcTan2Operation();
      break;
    case NODE_MATH_FLOOR:
      operation = new MathFloorOperation();
      break;
    case NODE_MATH_CEIL:
      operation = new MathCeilOperation();
      break;
    case NODE_MATH_FRACTION:
      operation = new MathFractOperation();
      break;
    case NODE_MATH_SQRT:
      operation = new MathSqrtOperation();
      break;
    case NODE_MATH_INV_SQRT:
      operation = new MathInverseSqrtOperation();
      break;
    case NODE_MATH_SIGN:
      operation = new MathSignOperation();
      break;
    case NODE_MATH_EXPONENT:
      operation = new MathExponentOperation();
      break;
    case NODE_MATH_TRUNC:
      operation = new MathTruncOperation();
      break;
    case NODE_MATH_SNAP:
      operation = new MathSnapOperation();
      break;
    case NODE_MATH_WRAP:
      operation = new MathWrapOperation();
      break;
    case NODE_MATH_PINGPONG:
      operation = new MathPingpongOperation();
      break;
    case NODE_MATH_COMPARE:
      operation = new MathCompareOperation();
      break;
    case NODE_MATH_MULTIPLY_ADD:
      operation = new MathMultiplyAddOperation();
      break;
    case NODE_MATH_SMOOTH_MIN:
      operation = new MathSmoothMinOperation();
      break;
    case NODE_MATH_SMOOTH_MAX:
      operation = new MathSmoothMaxOperation();
      break;
  }

  if (operation) {
    bool useClamp = getbNode()->custom2;
    operation->setUseClamp(useClamp);
    converter.addOperation(operation);

    converter.mapInputSocket(getInputSocket(0), operation->getInputSocket(0));
    converter.mapInputSocket(getInputSocket(1), operation->getInputSocket(1));
    converter.mapInputSocket(getInputSocket(2), operation->getInputSocket(2));
    converter.mapOutputSocket(getOutputSocket(0), operation->getOutputSocket());
  }
}