public static string MolToSVG(ROMol mol, int width = 300, int height = 300, Int_Vect highlightAtoms = null, bool kekulize = true, int lineWidthMult = 1, int fontSize = 12, bool includeAtomCircles = true, int confId = -1) { // See Code\GraphMol\Wrap\MolOps.cpp var drawer = new MolDraw2DSVG(width, height); drawer.setFontSize(fontSize / 24.0); drawer.setLineWidth(drawer.lineWidth() * lineWidthMult); drawer.drawOptions().circleAtoms = includeAtomCircles; drawer.drawMolecule(mol, highlightAtoms, null, null, confId); drawer.finishDrawing(); return(drawer.getDrawingText()); }
static void MakePicture(string smiles, string filename) { int width = 200; int height = 200; RWMol mol = null; mol = RWMol.MolFromSmiles(smiles); if (mol == null) { mol = RWMol.MolFromSmarts(smiles); } if (mol == null) { throw new Exception($"Cannot recognize: '{smiles}'"); } RDKFuncs.prepareMolForDrawing(mol); if (filename.EndsWith(".svg")) { var view = new MolDraw2DSVG(width, height); view.drawMolecule(mol); view.finishDrawing(); using (var w = new StreamWriter(filename)) { w.Write(view.getDrawingText()); Console.WriteLine($"{filename} is drawn."); } } else if (filename.EndsWith(".png")) { var view = new MolDraw2DCairo(width, height); view.drawMolecule(mol, Path.GetFileNameWithoutExtension(filename)); view.finishDrawing(); view.writeDrawingText(filename); } else { throw new Exception($"Not supported: {filename}"); } }
/// <summary> /// Generates a drawing of a molecule and writes it to a file. /// </summary> /// <seealso href="https://github.com/rdkit/rdkit/blob/1649029367a8e517cf1913a5b80b91813874e002/rdkit/Chem/Draw/__init__.py#L265-L300"/> public static void MolToFile( RWMol mol, string filename, Tuple <int, int> size = null, bool kekulize = true, bool wedgeBonds = true, string imageType = null, bool fitImage = false, string legend = "", Int_Vect highlight_atoms = null, Int_Vect highlight_bonds = null, DrawColour highlightColor = null ) { if (size == null) { size = new Tuple <int, int>(300, 300); } if (imageType == null) { imageType = Path.GetExtension(filename).Substring(1).ToLowerInvariant(); } try { RdMolDraw2D.PrepareMolForDrawing(mol, kekulize: kekulize, wedgeBonds: wedgeBonds); } catch (Exception) { RdMolDraw2D.PrepareMolForDrawing(mol, kekulize: false, wedgeBonds: wedgeBonds); } MolDraw2D d2d; switch (imageType) { case "png": d2d = new MolDraw2DCairo(size.Item1, size.Item2); break; case "svg": d2d = new MolDraw2DSVG(size.Item1, size.Item2); break; default: throw new Exception($"{imageType} is not supported."); } if (highlightColor != null) { d2d.DrawOptions().highlightColour = highlightColor; } d2d.DrawOptions().prepareMolsBeforeDrawing = false; d2d.DrawMolecule(mol, legend, highlight_atoms, highlight_bonds); d2d.FinishDrawing(); switch (d2d) { case MolDraw2DCairo d: d.WriteDrawingText(filename); break; case MolDraw2DSVG d: using (var w = new StreamWriter(filename)) { w.Write(d.GetDrawingText()); } break; } }
// // MolDraw2DSVG // public static string GetDrawingText(this MolDraw2DSVG view) { return(view.getDrawingText()); }