/// <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)); } }
/// <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); } }