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