public void TestDrawMolecule() { var mol = RWMol.MolFromSmiles("c1ccc(C)c(C)c1C"); var drawer = new MolDraw2DCairo(300, 300, -1, -1, true); drawer.drawOptions().addAtomIndices = true; drawer.drawMolecule(mol); drawer.finishDrawing(); var png1 = drawer.getImage().ToArray(); drawer.writeDrawingText("test.png"); byte[] png2 = File.ReadAllBytes("test.png"); Assert.Equal(png1.Length, png2.Length); for (int i = 0; i < png1.Length; i++) { Assert.Equal(png1[i], png2[i]); } File.Delete("test.png"); }
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; } }
// // MolDraw2DCairo // public static void WriteDrawingText(this MolDraw2DCairo view, string fName) { view.writeDrawingText(fName); }