using OTSCLRINTERFACE; using OTSDataType; using OTSModelSharp.DTLBase; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; namespace OTSModelSharp { public class CXRayDataDB : CSQLiteDB { List m_listPosXray; const long GENERALXRAYCHANNELS = 2000; public CXRayDataDB(IDBStoreBase _fileName, IDBTableBase _table) : base(_fileName, _table) { m_listPosXray = new List(); } public List< CPosXrayClr> GetXrayList( bool a_bForce/* = FALSE*/) { if (a_bForce) { m_listPosXray.Clear(); } if (m_listPosXray.Count == 0) { ReadAllXrayList(); } return m_listPosXray; } public bool ReadAllXrayList() { var t = GetTableInfo(); var query = GetTableQueryForDataTable(t.GetTableName()); ReadXrayListFromAQuery(query,ref m_listPosXray); return true; } public bool ReadXrayListFromAQuery(DataTable a_query,ref List a_XrayList) { Dictionary mapXrayInfo = new Dictionary(); foreach (DataRow row in a_query.Rows) { int nCol = (int)CXRayDataTable.ColumnID.N_FIELD_ID - (int)CXRayDataTable.ColumnID.MIN; int curFldId = Convert.ToInt32(row[nCol]); nCol = (int)CXRayDataTable.ColumnID.N_INDEX - (int)CXRayDataTable.ColumnID.MIN; int xrayId = Convert.ToInt32(row[nCol]); string fldvec = ""; fldvec+=curFldId.ToString(); fldvec += "_"; fldvec += xrayId.ToString(); nCol = (int)CXRayDataTable.ColumnID.N_XRAY_DATA - (int)CXRayDataTable.ColumnID.MIN; byte[] xraydata = (byte[])row[nCol]; uint[] uintData = new uint[GENERALXRAYCHANNELS]; for (int j = 0; j < GENERALXRAYCHANNELS; j++) { int m = j * 4; uint d = xraydata[m + 3]; d = d << 8; d = d | xraydata[m + 2]; d = d << 8; d = d | xraydata[m + 1]; d = d << 8; d = d | xraydata[m]; uintData[j] = d; } if (!mapXrayInfo.ContainsKey(fldvec)) { CPosXrayClr xray = new CPosXrayClr(); xray.SetXrayData(uintData); mapXrayInfo.Add(fldvec, xray); } else { CPosXrayClr xray = mapXrayInfo[fldvec]; xray.SetXrayData(uintData); } } foreach (var keyvalue in mapXrayInfo) { a_XrayList.Add(keyvalue.Value); } return true; } public bool GetAllMapedXrayData(ref Dictionary mapXrayInfo) { var t = GetTableInfo(); var query = GetTableQueryForDataTable(t.GetTableName()); foreach (DataRow row in query.Rows) { int nCol = (int)CXRayDataTable.ColumnID.N_FIELD_ID - (int)CXRayDataTable.ColumnID.MIN; int curFldId = Convert.ToInt32(row[nCol]); nCol = (int)CXRayDataTable.ColumnID.N_INDEX - (int)CXRayDataTable.ColumnID.MIN; int xrayId = Convert.ToInt32(row[nCol]); string fldvec = ""; fldvec+=curFldId.ToString(); fldvec+="_"; fldvec += xrayId.ToString(); nCol = (int)CXRayDataTable.ColumnID.N_XRAY_DATA - (int)CXRayDataTable.ColumnID.MIN; byte[] xraydata = (byte[])row[nCol]; uint[] uintData = new uint[GENERALXRAYCHANNELS]; for (int j = 0; j < GENERALXRAYCHANNELS; j++) { int m = j * 4; uint d = xraydata[m + 3]; d = d << 8; d = d | xraydata[m + 2]; d = d << 8; d = d | xraydata[m + 1]; d = d << 8; d = d | xraydata[m]; uintData[j] = d; } if (!mapXrayInfo.ContainsKey(fldvec)) { CPosXrayClr xray = new CPosXrayClr(); xray.SetXrayData(uintData); mapXrayInfo.Add(fldvec, xray); } else { CPosXrayClr xray = mapXrayInfo[fldvec]; xray.SetXrayData(uintData); } } return true; } } }