Esempio n. 1
0
        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());
        }
Esempio n. 2
0
        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}");
            }
        }
Esempio n. 3
0
            /// <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;
                }
            }
Esempio n. 4
0
        //
        // MolDraw2DSVG
        //

        public static string GetDrawingText(this MolDraw2DSVG view)
        {
            return(view.getDrawingText());
        }