void showMovieFrame(int frame) {

		if (frame < 0 || movie.length() <= 0)
			return;

		super.showMovieFrame(frame);

		if (type == null)
			return;

		for (int i = 0; i < numberOfAtoms; i++) {
			atom[i].setRadical(atom[i].getRadicalQ().getData(frame));
		}

		List list = (ArrayList) (bonds.getBondQueue().getData(frame));
		if (list != null) {
			synchronized (bonds.getSynchronizationLock()) {
				for (Iterator it = bonds.iterator(); it.hasNext();)
					((RadialBond) it.next()).destroy();
			}
			bonds.clear();
			molecules.clear();
			if (!list.isEmpty()) {
				RadialBond.Delegate rbd = null;
				RadialBond rBond = null;
				for (Iterator it = list.iterator(); it.hasNext();) {
					rbd = (RadialBond.Delegate) it.next();
					rBond = new RadialBond.Builder(atom[rbd.getAtom1()], atom[rbd.getAtom2()]).bondLength(
							rbd.getBondLength()).bondStrength(rbd.getBondStrength()).chemicalEnergy(
							rbd.getChemicalEnergy()).build();
					rBond.setModel(this);
					bonds.add(rBond);
				}
				MoleculeCollection.sort(this);
			}
		}

		list = (ArrayList) (bends.getBondQueue().getData(frame));
		if (list != null) {
			if (!bends.isEmpty()) {
				synchronized (bends.getSynchronizationLock()) {
					for (Iterator it = bends.iterator(); it.hasNext();)
						((AngularBond) it.next()).destroy();
				}
				bends.clear();
			}
			if (!list.isEmpty()) {
				AngularBond.Delegate abd = null;
				AngularBond aBond = null;
				for (Iterator it = list.iterator(); it.hasNext();) {
					abd = (AngularBond.Delegate) it.next();
					aBond = new AngularBond(atom[abd.getAtom1()], atom[abd.getAtom2()], atom[abd.getAtom3()], abd
							.getBondAngle(), abd.getBondStrength());
					aBond.setModel(this);
					bends.add(aBond);
				}
			}
		}

	}