Matrix operations and sockets for geometry nodes #105408
|
@ -53,8 +53,8 @@ static void node_update(bNodeTree *tree, bNode *node)
|
|||
bNodeSocket *in_matrix_a = (bNodeSocket *)BLI_findlink(&node->inputs, 0);
|
||||
bNodeSocket *in_matrix_b = (bNodeSocket *)BLI_findlink(&node->inputs, 1);
|
||||
bNodeSocket *in_scale = (bNodeSocket *)BLI_findlink(&node->inputs, 2);
|
||||
bNodeSocket *out_matrix = (bNodeSocket *)BLI_findlink(&node->inputs, 0);
|
||||
bNodeSocket *out_value = (bNodeSocket *)BLI_findlink(&node->inputs, 1);
|
||||
bNodeSocket *out_matrix = (bNodeSocket *)BLI_findlink(&node->outputs, 0);
|
||||
bNodeSocket *out_value = (bNodeSocket *)BLI_findlink(&node->outputs, 1);
|
||||
|
||||
nodeSetSocketAvailability(tree, in_matrix_a, true);
|
||||
nodeSetSocketAvailability(
|
||||
|
|
|
@ -50,21 +50,21 @@ static void node_update(bNodeTree *tree, bNode *node)
|
|||
{
|
||||
const NodeMatrixMathOperation op = (NodeMatrixMathOperation)node->custom1;
|
||||
|
||||
bNodeSocket *inMatrixA = &node->input_socket(0);
|
||||
bNodeSocket *inMatrixB = &node->input_socket(1);
|
||||
bNodeSocket *inScale = &node->input_socket(2);
|
||||
bNodeSocket *outMatrix = &node->output_socket(0);
|
||||
bNodeSocket *outValue = &node->output_socket(1);
|
||||
bNodeSocket *in_matrix_a = (bNodeSocket *)BLI_findlink(&node->inputs, 0);
|
||||
bNodeSocket *in_matrix_b = (bNodeSocket *)BLI_findlink(&node->inputs, 1);
|
||||
bNodeSocket *in_scale = (bNodeSocket *)BLI_findlink(&node->inputs, 2);
|
||||
bNodeSocket *out_matrix = (bNodeSocket *)BLI_findlink(&node->outputs, 0);
|
||||
bNodeSocket *out_value = (bNodeSocket *)BLI_findlink(&node->outputs, 1);
|
||||
|
||||
nodeSetSocketAvailability(tree, inMatrixA, true);
|
||||
nodeSetSocketAvailability(tree, in_matrix_a, true);
|
||||
nodeSetSocketAvailability(
|
||||
tree,
|
||||
inMatrixB,
|
||||
in_matrix_b,
|
||||
ELEM(op, NODE_MATRIX_MATH_ADD, NODE_MATRIX_MATH_SUBTRACT, NODE_MATRIX_MATH_MULTIPLY));
|
||||
nodeSetSocketAvailability(tree, inScale, ELEM(op, NODE_MATRIX_MATH_SCALAR_MULTIPLY));
|
||||
nodeSetSocketAvailability(tree, in_scale, ELEM(op, NODE_MATRIX_MATH_SCALAR_MULTIPLY));
|
||||
|
||||
nodeSetSocketAvailability(tree,
|
||||
outMatrix,
|
||||
out_matrix,
|
||||
ELEM(op,
|
||||
NODE_MATRIX_MATH_ADD,
|
||||
NODE_MATRIX_MATH_SUBTRACT,
|
||||
|
@ -73,12 +73,12 @@ static void node_update(bNodeTree *tree, bNode *node)
|
|||
NODE_MATRIX_MATH_TRANSPOSE,
|
||||
NODE_MATRIX_MATH_INVERSE));
|
||||
nodeSetSocketAvailability(
|
||||
tree, outValue, ELEM(op, NODE_MATRIX_MATH_DETERMINANT, NODE_MATRIX_MATH_TRACE));
|
||||
tree, out_value, ELEM(op, NODE_MATRIX_MATH_DETERMINANT, NODE_MATRIX_MATH_TRACE));
|
||||
|
||||
/* Labels */
|
||||
node_sock_label_clear(inMatrixA);
|
||||
node_sock_label_clear(inMatrixB);
|
||||
node_sock_label_clear(inScale);
|
||||
node_sock_label_clear(in_matrix_a);
|
||||
node_sock_label_clear(in_matrix_b);
|
||||
node_sock_label_clear(in_scale);
|
||||
switch (op) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,23 +16,15 @@ static void node_declare(NodeDeclarationBuilder &b)
|
|||
b.add_output<decl::Vector>(N_("Vec0"));
|
||||
b.add_output<decl::Vector>(N_("Vec1"));
|
||||
b.add_output<decl::Vector>(N_("Vec2"));
|
||||
b.add_output<decl::Vector>(N_("Vec3"));
|
||||
b.add_output<decl::Float>(N_("Row 0 Col 0"));
|
||||
b.add_output<decl::Float>(N_("Row 1 Col 0"));
|
||||
b.add_output<decl::Float>(N_("Row 2 Col 0"));
|
||||
b.add_output<decl::Float>(N_("Row 3 Col 0"));
|
||||
b.add_output<decl::Float>(N_("Row 0 Col 1"));
|
||||
b.add_output<decl::Float>(N_("Row 1 Col 1"));
|
||||
b.add_output<decl::Float>(N_("Row 2 Col 1"));
|
||||
b.add_output<decl::Float>(N_("Row 3 Col 1"));
|
||||
b.add_output<decl::Float>(N_("Row 0 Col 2"));
|
||||
b.add_output<decl::Float>(N_("Row 1 Col 2"));
|
||||
b.add_output<decl::Float>(N_("Row 2 Col 2"));
|
||||
b.add_output<decl::Float>(N_("Row 3 Col 2"));
|
||||
b.add_output<decl::Float>(N_("Row 0 Col 3"));
|
||||
b.add_output<decl::Float>(N_("Row 1 Col 3"));
|
||||
b.add_output<decl::Float>(N_("Row 2 Col 3"));
|
||||
b.add_output<decl::Float>(N_("Row 3 Col 3"));
|
||||
};
|
||||
|
||||
static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr)
|
||||
|
@ -61,14 +53,14 @@ static void node_update(bNodeTree *tree, bNode *node)
|
|||
|
||||
switch (mode) {
|
||||
case NODE_COMBSEP_MATRIX_COLUMNS:
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->inputs, vector_sockets[0]), "Column 0");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->inputs, vector_sockets[1]), "Column 1");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->inputs, vector_sockets[2]), "Column 2");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[0]), "Column 0");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[1]), "Column 1");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[2]), "Column 2");
|
||||
break;
|
||||
case NODE_COMBSEP_MATRIX_ROWS:
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->inputs, vector_sockets[0]), "Row 0");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->inputs, vector_sockets[1]), "Row 1");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->inputs, vector_sockets[2]), "Row 2");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[0]), "Row 0");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[1]), "Row 1");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[2]), "Row 2");
|
||||
break;
|
||||
case NODE_COMBSEP_MATRIX_ELEMENTS:
|
||||
break;
|
||||
|
|
|
@ -61,16 +61,16 @@ static void node_update(bNodeTree *tree, bNode *node)
|
|||
|
||||
switch (mode) {
|
||||
case NODE_COMBSEP_MATRIX_COLUMNS:
|
||||
node_sock_label(&node->output_socket(vector_sockets[0]), "Column 0");
|
||||
node_sock_label(&node->output_socket(vector_sockets[1]), "Column 1");
|
||||
node_sock_label(&node->output_socket(vector_sockets[2]), "Column 2");
|
||||
node_sock_label(&node->output_socket(vector_sockets[3]), "Column 3");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[0]), "Column 0");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[1]), "Column 1");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[2]), "Column 2");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[3]), "Column 3");
|
||||
break;
|
||||
case NODE_COMBSEP_MATRIX_ROWS:
|
||||
node_sock_label(&node->output_socket(vector_sockets[0]), "Row 0");
|
||||
node_sock_label(&node->output_socket(vector_sockets[1]), "Row 1");
|
||||
node_sock_label(&node->output_socket(vector_sockets[2]), "Row 2");
|
||||
node_sock_label(&node->output_socket(vector_sockets[3]), "Row 3");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[0]), "Row 0");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[1]), "Row 1");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[2]), "Row 2");
|
||||
node_sock_label((bNodeSocket *)BLI_findlink(&node->outputs, vector_sockets[3]), "Row 3");
|
||||
break;
|
||||
case NODE_COMBSEP_MATRIX_ELEMENTS:
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue