Пример #1
0
        public Molecule(int _id, string _smiles, string _name)
        {
            ID     = _id;
            SMILES = _smiles;
            OBConversion obconv = new OBConversion();

            obconv.SetInFormat("smi");
            Structure = new OBMolecule();
            name      = _name;
            obconv.ReadString(Structure, SMILES);
            Structure.SetTitle(name);
            using (FileStream FS = new FileStream("temp.bin", FileMode.Create))
            {
                byte[] BinMol = Encoding.UTF8.GetBytes(Structure.ToMol());
                FS.Write(BinMol, 0, BinMol.Length);
                FS.Close();
            }
            obconv.SetOutFormat("_png2");
            string TempPic = Functions.TempFile();

            obconv.WriteFile(Structure, TempPic); // Пишем картинку в temp // Это такое колдунство // Мне стыдно, но по-другому не выходит
            obconv.CloseOutFile();
            Picture = Image.FromFile(TempPic);
            Weight  = Structure.GetMolWt();
            Brutto  = Structure.GetFormula();
        }
Пример #2
0
        private void OpenStructure(string StName)
        {
            // Создаём OpenBabel объекты
            OBConversion obconv = new OBConversion();
            OBMol        mol    = Functions.ReadMoleculeFromFile(StName);

            obconv.SetOutFormat("_png2");
            obconv.AddOption("w", OBConversion.Option_type.OUTOPTIONS, panel1.Width.ToString());
            obconv.AddOption("h", OBConversion.Option_type.OUTOPTIONS, panel1.Height.ToString());

            string TempPic = Functions.TempFile();

            obconv.WriteFile(mol, TempPic); // Пишем картинку в temp // Это такое колдунство // Мне стыдно, но по-другому не выходит
            obconv.CloseOutFile();


            Bitmap bmp = new Bitmap(panel1.Width, panel1.Height);

            // Рисуем на панели
            panel1.BackgroundImage = bmp;

            Image    IM = Image.FromFile(TempPic);
            Graphics g  = Graphics.FromImage(panel1.BackgroundImage);

            g.DrawImage(IM, 0, 0);
            IM.Dispose();
            g.Dispose();
            panel1.Invalidate();

            // Высчитываем параметры
            label3.Text = "Молярная масса: " + Math.Round(mol.GetExactMass(), 4);
            label4.Text = "Брутто-формула: " + mol.GetFormula();
        }
Пример #3
0
        private PicElement DrawMoleculeElement(Molecule Mol)
        {
            // Настраиваем конвертер
            OBConversion obconv = new OBConversion();

            obconv.SetOutFormat("_png2");
            Mol.Structure.SetTitle("");
            obconv.AddOption("w", OBConversion.Option_type.OUTOPTIONS, BMP_Width.ToString());
            obconv.AddOption("h", OBConversion.Option_type.OUTOPTIONS, (BMP_Height - TextPanel).ToString());
            // Получаем файл с картинкой
            string TempPic = Functions.TempFile();

            obconv.WriteFile(Mol.Structure, TempPic);
            obconv.CloseOutFile();

            // Рисуем структуру
            Image IM = Image.FromFile(TempPic);
            //Img
            Bitmap   bmp = new Bitmap(BMP_Width, BMP_Height);
            Graphics g   = Graphics.FromImage(bmp);

            g.Clear(Color.White);
            g.DrawImage(IM, 0, 0);
            g.DrawString(Mol.name,
                         new Font("Arial", 14, FontStyle.Bold),
                         new SolidBrush(Color.Black),
                         new PointF(5, BMP_Height - TextPanel + 5));

            g.DrawString(Mol.Status,
                         new Font("Arial", 12, FontStyle.Regular),
                         new SolidBrush(Color.Black),
                         new PointF(5, BMP_Height - TextPanel + 5 + new Font("Arial", 14, FontStyle.Bold).GetHeight()));
            g.Dispose();

            Mol.Structure.SetTitle(Mol.name);

            PicElement El = new PicElement();

            El.Image = bmp;
            El.ID    = Mol.ID;

            return(El);
            //Всё подчищаем
            // bmp.Dispose();
            // IM.Dispose();
        }
Пример #4
0
        public static void Get_Passport(Molecule Mol, string Filename)
        {
            // Настраиваем конвертер
            OBConversion obconv = new OBConversion();

            obconv.SetOutFormat("_png2");
            Mol.Structure.SetTitle("");
            obconv.AddOption("w", OBConversion.Option_type.OUTOPTIONS, "1182");
            obconv.AddOption("h", OBConversion.Option_type.OUTOPTIONS, "1182");
            // Получаем файл с картинкой
            string TempPic = Functions.TempFile();

            obconv.WriteFile(Mol.Structure, TempPic);
            obconv.CloseOutFile();
            Mol.Structure.SetTitle(Mol.name);

            var doc = new Document(PageSize.A4);

            PdfWriter.GetInstance(doc, new FileStream(Filename, FileMode.Create));

            doc.Open();

            BaseFont Times = BaseFont.CreateFont(Application.StartupPath + @"\Fonts\times.ttf",
                                                 BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            BaseFont TimesBold = BaseFont.CreateFont(Application.StartupPath + @"\Fonts\timesb.ttf",
                                                     BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            BaseFont TimesItalic = BaseFont.CreateFont(Application.StartupPath + @"\Fonts\timesi.ttf",
                                                       BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            BaseFont TimesBoldItalic = BaseFont.CreateFont(Application.StartupPath + @"\Fonts\timesbi.ttf",
                                                           BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font Regular   = new Font(Times, 14);
            Font Bold      = new Font(TimesBold, 14);
            Font LargeBold = new Font(TimesBold, 18);
            Font SubScribe = new Font(Times, 10);

            doc.Add(AddText("Институт органического синтеза им. И.Я. Постовского УрО РАН", Bold,
                            Element.ALIGN_CENTER));
            doc.Add(AddText(" ", Bold));
            doc.Add(AddText("620041, г. Екатеринбург, ул. С. Ковалевской/Академическая, 20/22,\n" +
                            "Телефоны (343) 374-11-89, (343) 369-30-58", Regular, Element.ALIGN_CENTER));
            doc.Add(AddLine());
            doc.Add(AddText("ПАСПОРТ НА ОБРАЗЕЦ № " + Mol.name, LargeBold, Element.ALIGN_CENTER));
            doc.Add(AddImage(TempPic, 250));
            doc.Add(AddText("Молярная масса: ",
                            new[] { new Phrase(Math.Round(Mol.Structure.GetMolWt(), 2).ToString(), Regular) }, Bold));
            doc.Add(AddText("Брутто формула: ",
                            new[] { SetSuperSubScript(Mol.Structure.GetFormula(), Regular, SubScribe, SUBSCRIPT) }, Bold));
            doc.Add(AddText("Физическое состояние: ",
                            new[] { new Phrase(Mol.State, Regular) }, Bold));
            doc.Add(AddText("Температура плавления: ",
                            new[] { new Phrase(Mol.MeltingPoint, Regular) }, Bold));
            doc.Add(AddText("Охарактеризовано: ",
                            new[] { SetSuperSubScript(Mol.GetAnalys_Whom(), Regular, SubScribe, SUPERSCRIPT) }, Bold));
            doc.Add(AddText("Растворимость: ",
                            new[] { new Phrase(Mol.Solution, Regular) }, Bold));
            doc.Add(AddText("Условия хранения: ",
                            new[] { new Phrase(Mol.Conditions, Regular) }, Bold));
            doc.Add(AddText("Масса образца: ",
                            new[] { new Phrase(Mol.Mass + " мг", Regular) }, Bold));
            doc.Add(AddText("Синтезировал: ",
                            new[] { new Phrase(Mol.MadeBy.Job + ", " + Mol.MadeBy.GetInitNameFirst() +
                                               " (" + Mol.LaboratoryName + ")", Regular) }, Bold));
            doc.Add(AddText("НАУЧНЫЙ РУКОВОДИТЕЛЬ", Bold));

            PdfPTable table = new PdfPTable(2);

            table.WidthPercentage = 100;
            table.AddCell(new PdfPCell(new Phrase("академик", Bold))
            {
                HorizontalAlignment = Element.ALIGN_LEFT,
                BorderWidth         = 0
            });
            table.AddCell(new PdfPCell(new Phrase("В.Н. Чарушин", Bold))
            {
                HorizontalAlignment = Element.ALIGN_RIGHT,
                BorderWidth         = 0
            });
            doc.Add(table);

            doc.Close();
        }