One thing that came up in the survey results were users unsure of how to change bond lengths, angles, dihedrals to particular values.
I see that as a documentation problem (e.g., hey, you can already do that by changing values in the property tables) but also a discoverability problem.
I can think of a few ways to make it possible to edit particular values in the tools:
allow entering specific values in the bond-centric manipulate tool (good idea, but how to edit specific angles or dihedrals)
allow editing values using the measure tool
both
The bond-centric manipulate tool already has code to change bonds, angles, etc. but it’s free-form. It seems like the best place to start, since it already has the right name.
start a move and then type a value (like Blender) - useful but not discoverable
add a panel to the tool options - but then which angle or dihedral?
The measure tool could easily add a tool panel, but how many people would think to use the “measure” tool to change a length?
Also, if you have two molecules and want to change the distance between them, what’s the most intuitive way to do that?
I like the «vim like» mode to translate, rotate, zoom in/out the scene. Based on this (especially with the optional display of the the coordinate system) I can imagine to select a couple of atoms / one or multiple molecules with the mouse tool to freeze their coordinates relative to the coordinate system in common. Then to select a second set of atoms/molecules which then is translated / rolled by hjkl before both sets of atoms are written back into the input file.
Is a manual setup of bond lengths and angles in addition to a readout a frequent / typical need in computational chemistry?
So far, I did not consider to miss such a dial next to the readout, especially because Avo2 updates the values if atoms are moved / groups swing around a bond with the mouse tool, etc.
Re the relative orientation of two sets of atoms: hjkl might be a bit coarse,* because naturally it runs in increments. If this were to coarse (additional input by other users welcome), perhaps a) this could be complemented by dials of the three axes (similar to e.g., inkscape "rotate this selected shape by x degrees in in clock/anticlockwise direction), or b) right away with an input for the Eulerian rotation matrix. I think if not a), version b) could be “too much effort” for Avogadro2.
* Of course not to be called vim tool. There are times vim is more suitable, and other times Emacs (e.g., orgmode) for different purposes.
setting a specific value of a distance, angle, dihedral as part of a scan (e.g., how does the energy change around this torsion)
setting up the geometry of a non-bonded cluster (e.g., water dimer as indicated above)
In general, I’ve used other methods. But it came up a few times in the survey results and it seems other methods weren’t very discoverable. So I want to improve some task-based documentation as well as discoverability. (The z-matrix editor will probably also help.)
There’s probably a good way to have this in the manipulate tool (or a new tool). Several people have asked for ways to rotate a Cp ring around the axis.
I’ve been doing some thinking and I think the best solution is to combine the Selection, Manipulation, Bond-Centric Manipulation, and Measure tools into a single tool.
The user would select different sets of atoms or bonds in a way similar to the current Selection Tool, the values and information appropriate to the selection would be shown in a way similar to the current Measure Tool, manual manipulation would behave as appropriate for the selection, and the values shown could be set explicitly just like in your initial solution above.
I’ve thought about it a fair bit so would be happy to elaborate further if you’d like.
Also, if you have two molecules and want to change the distance between them, what’s the most intuitive way to do that?
The way I conceive it, with the new tool it would be possible to select:
individual atoms
multiple atoms together as one group, like the selection tool does it
as individual atoms but separately, and numbered, like the measure tool does it
as multiple separate numbered groups
The distance between two groups of atoms (e.g. two molecules) would then be changed by selecting first one group, then the other, then changing the distance value that would be displayed in the interface.
I’m less sure about combining all of those, but some design brainstorming would be a good idea. (For example, it might be nice to have a ‘lasso select’ tool.)