示例#1
0
            public DataTableCrystalDatabaseRow CreateRow(Crystal2 c)
            {
                var elementList = new StringBuilder();

                foreach (var n in c.atoms.Select(a => a.AtomNo).Distinct())
                {
                    elementList.Append($"{n:000} ");
                }

                var d = new float[8];

                if (c.d != null)
                {
                    Array.Copy(c.d, d, c.d.Length);
                }

                DataTableCrystalDatabaseRow dr;

                try
                {
                    rwlock.EnterWriteLock();
                    dr = NewDataTableCrystalDatabaseRow();
                }
                finally { rwlock.ExitWriteLock(); }

                var(cellValues, _) = c.Cell;

                dr.SerializedCrystal2 = serialize(c);
                dr.Name          = c.name;
                dr.Formula       = c.formula;
                dr.Density       = c.density;
                dr.A             = cellValues.A;
                dr.B             = cellValues.B;
                dr.C             = cellValues.C;
                dr.Alpha         = cellValues.Alpha;
                dr.Beta          = cellValues.Beta;
                dr.Gamma         = cellValues.Gamma;
                dr.CrystalSystem = SymmetryStatic.StrArray[c.sym][16];//s.CrystalSystemStr;
                dr.PointGroup    = SymmetryStatic.StrArray[c.sym][13];
                dr.SpaceGroup    = SymmetryStatic.StrArray[c.sym][3];
                dr.Authors       = c.auth;
                dr.Title         = Crystal2.GetFullTitle(c.sect);
                dr.Journal       = Crystal2.GetFullJournal(c.jour);
                dr.Elements      = elementList.ToString();
                dr.D1            = d[0];
                dr.D2            = d[1];
                dr.D3            = d[2];
                dr.D4            = d[3];
                dr.D5            = d[4];
                dr.D6            = d[5];
                dr.D7            = d[6];
                dr.D8            = d[7];

                return(dr);
            }
示例#2
0
 /// <summary>
 /// srcCrystalはbindingSourceMain.Currentオブジェクト.
 /// </summary>
 /// <param name="srcCrystal"></param>
 /// <param name="targetcrystal"></param>
 public void Replace(object srcCrystal, Crystal2 targetcrystal)
 {
     if (srcCrystal is DataRowView drv && drv.Row is DataTableCrystalDatabaseRow src)
     {
         var target = CreateRow(targetcrystal);
         for (int j = 0; j < drv.Row.ItemArray.Length; j++)
         {
             src[j] = target[j];
         }
     }
 }
示例#3
0
            public DataTableCrystalDatabaseRow CreateRow(Crystal2 c)
            {
                DataTableCrystalDatabaseRow dr;

                lock (lockObj)
                    dr = NewDataTableCrystalDatabaseRow();

                dr.SerializedCrystal2 = serialize(c);
                dr.Name    = c.name;
                dr.Formula = c.formula;
                dr.Density = c.density;
                (dr.A, dr.B, dr.C, dr.Alpha, dr.Beta, dr.Gamma) = c.Cell.Values;
                dr.CrystalSystem = SymmetryStatic.StrArray[c.sym][16];//s.CrystalSystemStr;
                dr.PointGroup    = SymmetryStatic.StrArray[c.sym][13];
                dr.SpaceGroup    = SymmetryStatic.StrArray[c.sym][3];
                dr.Authors       = c.auth;
                dr.Title         = Crystal2.GetFullTitle(c.sect);
                dr.Journal       = Crystal2.GetFullJournal(c.jour);
                dr.Elements      = string.Join(' ', c.atoms.Select(a => a.AtomNo).Distinct().Select(b => b.ToString("000")));


                var d = ArrayPool <float> .Shared.Rent(8);

                if (c.d != null)
                {
                    Array.Copy(c.d, d, c.d.Length);
                }
                dr.D1 = d[0] * 10;
                dr.D2 = d[1] * 10;
                dr.D3 = d[2] * 10;
                dr.D4 = d[3] * 10;
                dr.D5 = d[4] * 10;
                dr.D6 = d[5] * 10;
                dr.D7 = d[6] * 10;
                dr.D8 = d[7] * 10;
                ArrayPool <float> .Shared.Return(d);

                return(dr);
            }
示例#4
0
 public void Add(Crystal2 crystal) => Add(CreateRow(crystal));
示例#5
0
 static byte[] serialize(Crystal2 c) => MessagePackSerializer.Serialize(c, msgOptions);