コード例 #1
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();
        }
コード例 #2
0
ファイル: MoleculesList.cs プロジェクト: kim-g/MolBase_Client
        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();
        }
コード例 #3
0
        public static void trajectoryFrameToCIF(string frame, string outFile, List <int> esequence,
                                                OBConversion obconv)
        {
            //converts a frame from the above function into a CIF file
            //lammps trajectory files have unit cell dimension data for every frame
            //requires an element sequence for identifying element type from lammps atom types
            OBUnitCell  uc  = new OBUnitCell();
            OBMol       mol = new OBMol();
            OBMatrix3x3 mat = new OBMatrix3x3();

            using (StringReader reader = new StringReader(frame)) {
                string line        = "";
                bool   foundMatrix = false;

                do
                {
                    line = reader.ReadLine();
                    if (line.Contains("BOX BOUNDS"))
                    {
                        //data from lammps is in this format
                        //ITEM: BOX BOUNDS xy xz yz
                        //xlo_bound xhi_bound xy
                        //ylo_bound yhi_bound xz
                        //zlo_bound zhi_bound yz
                        string row0 = reader.ReadLine();

                        double[] row0d = OBFunctions.spacedStringToDoubleArray(row0);
                        double   xlo   = row0d[0];

                        double xhi = row0d[1];
                        double xy  = row0d[2];

                        string   row1  = reader.ReadLine();
                        double[] row1d = OBFunctions.spacedStringToDoubleArray(row1);
                        double   ylo   = row1d[0];
                        double   yhi   = row1d[1];
                        double   xz    = row1d[2];


                        string   row2  = reader.ReadLine();
                        double[] row2d = OBFunctions.spacedStringToDoubleArray(row2);
                        double   zlo   = row2d[0];
                        double   zhi   = row2d[1];
                        double   yz    = row2d[2];


                        //adjust box bounds, taken from VMD's source for reading lammps files

                        double xdelta = Math.Min(0, xy);
                        xdelta = Math.Min(xdelta, xz);
                        xdelta = Math.Min(xdelta, xy + xz);
                        xlo    = xlo - xdelta;
                        xdelta = Math.Max(0, xy);
                        xdelta = Math.Max(xdelta, xz);
                        xdelta = Math.Max(xdelta, xy + xz);
                        xhi    = xhi - xdelta;
                        ylo    = ylo - Math.Min(0, yz);
                        yhi    = yhi - Math.Max(0, yz);
                        OBVector3 A = new OBVector3(xhi - xlo, 0, 0);
                        OBVector3 B = new OBVector3(xy, yhi - ylo, 0);
                        OBVector3 C = new OBVector3(xz, yz, zhi - zlo);
                        //OBVector3 A = new OBVector3 (xhi-xlo, xy, xz);
                        //OBVector3 B = new OBVector3 (0, yhi-ylo, yz);
                        //OBVector3 C= new OBVector3 (0, 0, zhi-zlo);
                        mat = new OBMatrix3x3(A, B, C);
                        uc.SetData(A, B, C);

                        foundMatrix = true;
                    }
                } while (!foundMatrix);
                //uc.SetData (mat);
                bool foundAtoms = false;
                do
                {
                    line = reader.ReadLine();
                    if (line.Contains("ITEM: ATOMS"))
                    {
                        foundAtoms = true;
                    }
                } while (!foundAtoms);

                while ((line = reader.ReadLine()) != null)
                {
                    string[] splitline  = line.Split((char[])null, StringSplitOptions.RemoveEmptyEntries);
                    int      lammpstype = Convert.ToInt32(splitline[1]) - 1;
                    int      atype      = esequence[lammpstype];
                    OBAtom   a          = new OBAtom();
                    a.SetAtomicNum(atype);
                    //position in fraction coordinates
                    OBVector3 fvec = new OBVector3(Convert.ToDouble(splitline[3]), Convert.ToDouble(splitline[4]),
                                                   Convert.ToDouble(splitline[5]));
                    //OBVector3 fvec = new OBVector3 (Convert.ToDouble (splitline [2]), Convert.ToDouble (splitline [3]), Convert.ToDouble (splitline [4]));
                    //convert to cartesian.
                    OBVector3 cvec = uc.FractionalToCartesian(fvec);
                    a.SetVector(cvec);
                    mol.AddAtom(a);
                }

                mol.CloneData(uc);
                obconv.SetOutFormat("cif");
                obconv.AddOption("b");
                obconv.WriteFile(mol, outFile);
            }
        }
コード例 #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();
        }