private boolean evaluateBuildBendClause(String str) {
		String[] s = str.split(REGEX_SEPARATOR);
		if (s.length != 4)
			return false;
		int n = model.getNumberOfParticles();
		double x = parseMathExpression(s[0]);
		if (Double.isNaN(x))
			return false;
		int i = (int) Math.round(x);
		if (i >= n) {
			out(ScriptEvent.FAILED, "Atom index out of limit: i=" + i + ">=" + n);
			return false;
		}
		x = parseMathExpression(s[1]);
		if (Double.isNaN(x))
			return false;
		int j = (int) Math.round(x);
		if (j >= n) {
			out(ScriptEvent.FAILED, "Atom index out of limit: j=" + j + ">=" + n);
			return false;
		}
		if (j == i) {
			out(ScriptEvent.FAILED, "Cannot build an angular bond for identical atoms: i=j=" + i);
			return false;
		}
		x = parseMathExpression(s[2]);
		if (Double.isNaN(x))
			return false;
		int k = (int) Math.round(x);
		if (k >= n) {
			out(ScriptEvent.FAILED, "Atom index out of limit: k=" + k + ">=" + n);
			return false;
		}
		if (k == i || k == j) {
			out(ScriptEvent.FAILED, "Cannot build an angular bond for identical atoms: " + i + "," + j + "," + k);
			return false;
		}
		x = parseMathExpression(s[3]);
		if (Double.isNaN(x))
			return false;
		MolecularModel mm = (MolecularModel) model;
		Atom at1 = mm.atom[i];
		Atom at2 = mm.atom[j];
		Atom at3 = mm.atom[k];
		if (mm.bonds.getBond(at1, at2) == null || mm.bonds.getBond(at2, at3) == null) {
			out(ScriptEvent.FAILED, "Cannot build an angular bond for atom " + at2.getIndex() + " that has only one radial bond.");
			return false;
		}
		AngularBond ab = mm.bends.getBond(at1, at2, at3);
		if (ab == null) {
			if (x > ZERO) {
				ab = new AngularBond(at1, at3, at2, Math.abs(AngularBond.getAngle(at1, at2, at3)), x);
				mm.bends.add(ab);
				ab.setSelected(true);
			}
		} else {
			if (x > ZERO) {
				ab.setBondStrength(x);
				ab.setSelected(true);
			} else {
				mm.bends.remove(ab);
			}
		}
		view.repaint();
		notifyChange();
		return true;
	}