From: gilleain t. <gil...@gm...> - 2009-02-11 23:23:45
|
On this evening sometime, Rajarshi asked: > now trying to get substructure highlighting correctly, I was attempting to follow the above. > I assume that the generators is a field of IntermediateRenderer - if so, there is no way for a client to add a generator - or at least I couldn't find one. > Do you have any pointers? I'm sending this to the list, as I think it's probably of general interest. Sorry for another essay, though... Development is moving fast! The jcp-primary branch now only has a Renderer class, not an IntermediateRenderer. It's essentially the same class, but more complete: - It renders (or does its best to render) IChemModels, IReactionSets, IReactions, IMoleculeSets, and IAtomContainers. - It now (as of today) provides methods to determine the bounds on screen of these 5 ChemObjects. - And (as to your question) it now has a constructor which takes a java.util.List of IGenerators. So, to get external highlighting: RendererModel model = new RendererModel(); List<IGenerator> generators = new ArrayList<IGenerator>(); generators.add(new BasicAtomGenerator(model)); ... // add other generators generators.add(new ExternalHighlightGenerator(model)); Renderer renderer = new Renderer(generators, new AWTFontManager()); phew! At the moment, there is still a constructor that does this work, but it should really go, as the point of all this generator stuff is to allow programs to use only those modules that are absolutely necessary. So the problem that remains is to make sure the Renderer and the Generators share the same RendererModel. At the moment, the Renderer re-sets the Generators' model so that they all have a shared reference. Another issue is that some generators can't implement the IGenerator interface as they take e.g. an IReaction, not an IAtomContainer. This could all do with some improvement, but I'm not sure quite how. Maybe the Renderer constructor should take a RendererModel, so that you are reminded to make an instance outside the Renderer, pass it to the Generators, and pass both in. If the Generators held a reference to the Renderer instead, then they could ask it for a RendererModel, and avoid the mistake of using two separate references. I guess this is more information than you wanted to know :) gilleain |