class ExtendedAtomGenerator extends BasicAtomGenerator {

    @Override
    public IRenderingElement generate(IAtomContainer container, IAtom atom, RendererModel model) {
        boolean drawNumbers = false;
        if (model.hasParameter(WillDrawAtomNumbers.class)) {
            drawNumbers = model.getParameter(WillDrawAtomNumbers.class).getValue();
        }
        if (!hasCoordinates(atom) || invisibleHydrogen(atom, model)
                || (invisibleCarbon(atom, container, model) && !drawNumbers)) {
            return null;
        } else if (model.getParameter(CompactAtom.class).getValue()) {
            return this.generateCompactElement(atom, model);
        } else {
            String text;
            if (atom instanceof IPseudoAtom) {
                text = ((IPseudoAtom) atom).getLabel();
            } else if (invisibleCarbon(atom, container, model) && drawNumbers) {
                text = String.valueOf(container.indexOf(atom) + 1);
            } else {
                text = atom.getSymbol();
            }
            Point2d point = atom.getPoint2d();
            Color ccolor = getAtomColor(atom, model);
            TextGroupElement textGroup = new TextGroupElement(point.x, point.y, text, ccolor);
            decorate(textGroup, container, atom, model);
            return textGroup;
        }
    }

}