void Metalayout::adjustMol (BaseMolecule& mol, const Vec2f& min, const Vec2f& pos) { float scaleFactor = getScaleFactor(); // Compute center points for the data sgroups QS_DEF(Array<Vec2f>, data_centers); data_centers.resize(mol.data_sgroups.end()); for (int i = mol.data_sgroups.begin(); i < mol.data_sgroups.end(); i = mol.data_sgroups.next(i)) { BaseMolecule::DataSGroup &group = mol.data_sgroups[i]; if (!group.relative) mol.getSGroupAtomsCenterPoint(group, data_centers[i]); } for (int i = mol.vertexBegin(); i < mol.vertexEnd(); i = mol.vertexNext(i)) { Vec2f v; Vec2f::projectZ(v, mol.getAtomXyz(i)); v.sub(min); v.scale(scaleFactor); v.add(pos); v.y = -v.y; mol.setAtomXyz(i, v.x, v.y, 0); } // Adjust data-sgroup label positions with absolute coordinates for (int i = mol.data_sgroups.begin(); i < mol.data_sgroups.end(); i = mol.data_sgroups.next(i)) { BaseMolecule::DataSGroup &group = mol.data_sgroups[i]; if (!group.relative) { Vec2f new_center; mol.getSGroupAtomsCenterPoint(group, new_center); group.display_pos.add(new_center); group.display_pos.sub(data_centers[i]); } } }