private boolean evaluateBuildBondClause(String str) {
		String[] s = str.split(REGEX_SEPARATOR);
		if (s.length != 3)
			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 a bond between a pair of identical atoms: i=j=" + i);
			return false;
		}
		x = parseMathExpression(s[2]);
		if (Double.isNaN(x))
			return false;
		MolecularModel mm = (MolecularModel) model;
		Atom at1 = mm.atom[i];
		Atom at2 = mm.atom[j];
		RadialBond rb = mm.bonds.getBond(at1, at2);
		if (rb == null) {
			if (x > ZERO) {
				rb = new RadialBond.Builder(at1, at2).bondLength(Math.sqrt(at1.distanceSquare(at2))).bondStrength(x).build();
				mm.bonds.add(rb);
				MoleculeCollection.sort(mm);
				view.repaint();
			}
		} else {
			if (x > ZERO) {
				rb.setBondStrength(x);
			} else {
				mm.bonds.remove(rb);
				mm.notifyBondChangeListeners();
				MoleculeCollection.sort(mm);
				view.repaint();
			}
		}
		notifyChange();
		return true;
	}