Skip to content

Instantly share code, notes, and snippets.

@gilleain
Created June 13, 2011 21:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gilleain/1023824 to your computer and use it in GitHub Desktop.
Save gilleain/1023824 to your computer and use it in GitHub Desktop.
Altered version of the ring fill generator for equivalence classes
package customgenerator;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import javax.vecmath.Point2d;
import javax.vecmath.Vector2d;
import org.openscience.cdk.geometry.GeometryTools;
import org.openscience.cdk.interfaces.IAtom;
import org.openscience.cdk.interfaces.IAtomContainer;
import org.openscience.cdk.interfaces.IRingSet;
import org.openscience.cdk.renderer.RendererModel;
import org.openscience.cdk.renderer.elements.ElementGroup;
import org.openscience.cdk.renderer.elements.IRenderingElement;
import org.openscience.cdk.renderer.elements.PathElement;
import org.openscience.cdk.renderer.generators.IGenerator;
import org.openscience.cdk.renderer.generators.IGeneratorParameter;
import org.openscience.cdk.ringsearch.SSSRFinder;
public class RingPlateGenerator implements IGenerator<IAtomContainer> {
@Override
public List<IGeneratorParameter<?>> getParameters() {
return new ArrayList<IGeneratorParameter<?>>();
}
@Override
public IRenderingElement generate(IAtomContainer atomContainer, RendererModel model) {
ElementGroup ringPaths = new ElementGroup();
SSSRFinder ringFinder = new SSSRFinder(atomContainer);
List<IRingSet> ringEqCl = ringFinder.findEquivalenceClasses();
Color[] colors = new Color[] { Color.RED,
Color.GREEN,
Color.BLUE,
Color.YELLOW,
Color.CYAN,
Color.MAGENTA,
Color.ORANGE,
Color.PINK};
int colorIndex = 0;
for (IRingSet ringSet : ringEqCl) {
for (IAtomContainer ring : ringSet.atomContainers()) {
ringPaths.add(generateRing(ring, colors[colorIndex]));
}
colorIndex++;
}
return ringPaths;
}
private PathElement generateRing(IAtomContainer atomContainer, Color color) {
Point2d center = GeometryTools.get2DCenter(atomContainer);
List<Point2d> points = new ArrayList<Point2d>();
for (IAtom atom : atomContainer.atoms()) {
Point2d p = atom.getPoint2d();
Vector2d v = new Vector2d(center);
v.sub(p);
v.scaleAdd(0.2, v, p);
points.add(new Point2d(v));
}
return new PathElement(points, color);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment