/// <summary>
        /// Generate the rendering Element(s) for a particular atom.
        /// </summary>
        /// <param name="atomContainer">the atom container that the atom is from</param>
        /// <param name="atom">the atom to generate the rendering element for</param>
        /// <param name="model">the renderer model</param>
        /// <returns>a rendering element, or group of elements</returns>
        public virtual IRenderingElement Generate(IAtomContainer atomContainer, IAtom atom, RendererModel model)
        {
            if (!CanDraw(atom, atomContainer, model))
            {
                return(null);
            }
            else if (model.GetCompactAtom())
            {
                return(this.GenerateCompactElement(atom, model));
            }
            else
            {
                int alignment = 0;
                if (atom.Symbol.Equals("C"))
                {
                    alignment = GeometryUtil.GetBestAlignmentForLabel(atomContainer, atom);
                }
                else
                {
                    alignment = GeometryUtil.GetBestAlignmentForLabelXY(atomContainer, atom);
                }

                return(GenerateElement(atom, alignment, model));
            }
        }
Exemple #2
0
        /// <inheritdoc/>
        public override IRenderingElement Generate(IAtomContainer container, IAtom atom, RendererModel model)
        {
            bool drawNumbers = false;

            if (model.HasWillDrawAtomNumbers())
            {
                drawNumbers = model.GetWillDrawAtomNumbers();
            }
            if (!HasCoordinates(atom) ||
                InvisibleHydrogen(atom, model) ||
                (InvisibleCarbon(atom, container, model) &&
                 !drawNumbers))
            {
                return(null);
            }
            else if (model.GetCompactAtom())
            {
                return(this.GenerateCompactElement(atom, model));
            }
            else
            {
                string text;
                if (atom is IPseudoAtom)
                {
                    text = ((IPseudoAtom)atom).Label;
                }
                else if (InvisibleCarbon(atom, container, model) && drawNumbers)
                {
                    text = (container.Atoms.IndexOf(atom) + 1).ToString();
                }
                else
                {
                    text = atom.Symbol;
                }
                var point     = atom.Point2D.Value;
                var ccolor    = GetAtomColor(atom, model);
                var textGroup = new TextGroupElement(ToPoint(point), text, ccolor);
                Decorate(textGroup, container, atom, model);
                return(textGroup);
            }
        }