﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	blockedby	blocking	notify_on_close	platform	project
822	Improved drawing of symmetry equivalents	Tristan Croll	Tom Goddard	"At present in the Clipper plugin I handle crystallographic symmetry by creating and caching a new AtomicStructure every time a new symmetry equivalent molecule is found in the vicinity of the current viewing region. This works, but it's clunky and not a good long-term solution. For one thing, for larger structures there's an annoying pause of up to a few seconds each time a new molecule is created (which admittedly could be reduced with some more clever re-use of cached copies). For another, things will get complicated/ugly when structure editing comes in to play. Not just for adding/removing atoms - a bunch of callbacks will be needed for every action that affects appearance. More philosophically, the whole point of crystallography is that all the symmetry equivalents are effectively identical, so it makes much more sense for them to be graphical ghosts of the main molecule.

What I would like to suggest is a small enabling amendment to Structure.update_graphics(), to add as optional arguments a specific list of atoms to restrict this pass to, a target drawing (which would be added as a child to self._drawing), and a color multiplier. I'm already using find_close_points_sets() in Clipper, so with this amendment I could subclass AtomicStructure to have update_graphics_if_needed() loop over update_graphics(), creating one Drawing for each symmetry operator. The color multiplier (actually, probably better as a gamma term unless it's restricted to the range 0:1) would allow me to differentiate the symmetry equivalents from the main molecule without affecting the stored colors.

"	enhancement	assigned	minor		Depiction								all	ChimeraX
