inline Eigen::Matrix<fvar<T>, R1, C2> mdivide_right_tri_low(const Eigen::Matrix<double, R1, C1> &A, const Eigen::Matrix<fvar<T>, R2, C2> &b) { check_square("mdivide_right_tri_low", "b", b); check_multiplicable("mdivide_right_tri_low", "A", A, "b", b); Eigen::Matrix<T, R1, C2> A_mult_inv_b(A.rows(), b.cols()); Eigen::Matrix<T, R2, C2> deriv_b_mult_inv_b(b.rows(), b.cols()); Eigen::Matrix<T, R2, C2> val_b(b.rows(), b.cols()); Eigen::Matrix<T, R2, C2> deriv_b(b.rows(), b.cols()); val_b.setZero(); deriv_b.setZero(); for (int j = 0; j < b.cols(); j++) { for (int i = j; i < b.rows(); i++) { val_b(i, j) = b(i, j).val_; deriv_b(i, j) = b(i, j).d_; } } A_mult_inv_b = mdivide_right(A, val_b); deriv_b_mult_inv_b = mdivide_right(deriv_b, val_b); Eigen::Matrix<T, R1, C2> deriv(A.rows(), b.cols()); deriv = -multiply(A_mult_inv_b, deriv_b_mult_inv_b); return to_fvar(A_mult_inv_b, deriv); }
inline Eigen::Matrix<fvar<T>, R1, C2> mdivide_right_tri_low(const Eigen::Matrix<fvar<T>, R1, C1> &A, const Eigen::Matrix<double, R2, C2> &b) { check_square("mdivide_right_tri_low", "b", b); check_multiplicable("mdivide_right_tri_low", "A", A, "b", b); Eigen::Matrix<T, R2, C2> deriv_b_mult_inv_b(b.rows(), b.cols()); Eigen::Matrix<T, R1, C1> val_A(A.rows(), A.cols()); Eigen::Matrix<T, R1, C1> deriv_A(A.rows(), A.cols()); Eigen::Matrix<T, R2, C2> val_b(b.rows(), b.cols()); val_b.setZero(); for (int j = 0; j < A.cols(); j++) { for (int i = 0; i < A.rows(); i++) { val_A(i, j) = A(i, j).val_; deriv_A(i, j) = A(i, j).d_; } } for (size_type j = 0; j < b.cols(); j++) { for (size_type i = j; i < b.rows(); i++) { val_b(i, j) = b(i, j); } } return to_fvar(mdivide_right(val_A, val_b), mdivide_right(deriv_A, val_b)); }
void EdLevelPropertyColorField::doReadParams(void) { blockSignals(true); keyButton()->disconnect(); // Has Key if (_data->plug()) { keyButton()->setIcon(QIcon(":/images/key.png")); connect( keyButton(), SIGNAL(pressed()), this, SLOT(doKeyframePressed()) ); } else { keyButton()->setIcon(QIcon(":/images/blank.png")); } // Has Input if (_data->plug() && _data->plug()->has_incoming_connection()) { hasInputButton()->setIcon(QIcon(":/images/has_input.png")); } else { hasInputButton()->setIcon(QIcon(":/images/blank.png")); } // Has Output if (_data->plug() && _data->plug()->has_outgoing_connection()) { hasOutputButton()->setIcon(QIcon(":/images/has_output.png")); } else { hasOutputButton()->setIcon(QIcon(":/images/blank.png")); } TextBufferStream stream; _data->value(stream); Color4f val; stream >> val; Color4b val_b(val); _r->setValue(val_b.r_as_byte()); _g->setValue(val_b.g_as_byte()); _b->setValue(val_b.b_as_byte()); _a->setValue(val_b.a_as_byte()); _r2->setText( MoreStrings::cast_to_string(val.r_as_float()).c_str() ); _g2->setText( MoreStrings::cast_to_string(val.g_as_float()).c_str() ); _b2->setText( MoreStrings::cast_to_string(val.b_as_float()).c_str() ); _a2->setText( MoreStrings::cast_to_string(val.a_as_float()).c_str() ); doColorChange(0); blockSignals(false); }