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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2015-12-30 19:04:34 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2015-12-30 19:26:51 +0300
commitcf2005d942ec7fd6dfffa96aaf74790ab7c5ee0c (patch)
tree3a29f1068d15cca7cfd34cb86ab1987932c218c8 /intern/eigen
parentf5c978074cf2398531c4d10661235f6083bb47a5 (diff)
Fix T47081: laplacian smooth edit mode tool crash.
Diffstat (limited to 'intern/eigen')
-rw-r--r--intern/eigen/intern/linear_solver.cc12
-rw-r--r--intern/eigen/intern/linear_solver.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/intern/eigen/intern/linear_solver.cc b/intern/eigen/intern/linear_solver.cc
index 181b278b9c0..0fc4d39309b 100644
--- a/intern/eigen/intern/linear_solver.cc
+++ b/intern/eigen/intern/linear_solver.cc
@@ -156,6 +156,14 @@ void EIG_linear_solver_variable_lock(LinearSolver *solver, int index)
}
}
+void EIG_linear_solver_variable_unlock(LinearSolver *solver, int index)
+{
+ if (solver->variable[index].locked) {
+ assert(solver->state == LinearSolver::STATE_VARIABLES_CONSTRUCT);
+ solver->variable[index].locked = false;
+ }
+}
+
static void linear_solver_variables_to_vector(LinearSolver *solver)
{
int num_rhs = solver->num_rhs;
@@ -269,6 +277,10 @@ void EIG_linear_solver_right_hand_side_add(LinearSolver *solver, int rhs, int in
bool EIG_linear_solver_solve(LinearSolver *solver)
{
+ /* nothing to solve, perhaps all variables were locked */
+ if (solver->m == 0 || solver->n == 0)
+ return true;
+
bool result = true;
assert(solver->state != LinearSolver::STATE_VARIABLES_CONSTRUCT);
diff --git a/intern/eigen/intern/linear_solver.h b/intern/eigen/intern/linear_solver.h
index 2dbea4d6f68..8f07e24e9a6 100644
--- a/intern/eigen/intern/linear_solver.h
+++ b/intern/eigen/intern/linear_solver.h
@@ -51,6 +51,7 @@ void EIG_linear_solver_delete(LinearSolver *solver);
void EIG_linear_solver_variable_set(LinearSolver *solver, int rhs, int index, double value);
double EIG_linear_solver_variable_get(LinearSolver *solver, int rhs, int index);
void EIG_linear_solver_variable_lock(LinearSolver *solver, int index);
+void EIG_linear_solver_variable_unlock(LinearSolver *solver, int index);
/* Matrix (A) and right hand side (b) */