using OTSCLRINTERFACE; using OTSDataType; using OTSModelSharp.DTLBase; using System; using System.Collections.Generic; using System.Data; using System.Data.SQLite; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace OTSModelSharp { public class CMergeParticleDB : CSQLiteDB { public CMergeParticleDB(IDBStoreBase _conStr, IDBTableBase _table) : base(_conStr, _table) { } public bool SaveAParticle( COTSParticleClr a_pParticle, CPosXrayClr a_pXray, System.Drawing.Point fldPos) { var tableInfoPtr = GetTableInfo(); var datastorePtr = GetDatastore(); Rectangle prec = (Rectangle)a_pParticle.GetParticleRect(); System.Drawing.Point pos = (System.Drawing.Point)a_pParticle.GetAbsolutPos(); String sInsertFormat = tableInfoPtr.GetInsertCommandFormatString(true); var cmd = tableInfoPtr.GetInsertCommand(true); var paras = cmd.Value; paras[0].Value = a_pParticle.GetFieldId(); paras[1].Value = a_pParticle.GetAnalysisId(); paras[2].Value = a_pParticle.GetAveGray(); paras[3].Value = prec.Left; paras[4].Value = prec.Top; paras[5].Value = prec.Width; paras[6].Value = prec.Height; paras[7].Value = a_pParticle.GetActualArea(); paras[8].Value = pos.X; paras[9].Value = pos.Y; paras[10].Value = a_pParticle.GetType(); paras[11].Value = a_pXray.GetElementQuantifyData().Count; paras[12].Value = a_pParticle.GetFeature().GetSegmentsList().Count; paras[13].Value = fldPos.X; paras[14].Value = fldPos.Y; paras[15].Value = a_pParticle.GetTagId(); paras[16].Value = a_pParticle.GetDMAX(); paras[17].Value = a_pParticle.GetDMIN(); paras[18].Value = a_pParticle.GetDMPERP(); paras[19].Value = a_pParticle.GetDPRIMETER(); paras[20].Value = a_pParticle.GetORIENTATION(); paras[21].Value = a_pParticle.GetDINSCR(); paras[22].Value = a_pParticle.GetDMEAN(); paras[23].Value = a_pParticle.GetDELONG(); paras[24].Value = a_pParticle.GetFeretDiameter(); paras[25].Value = a_pParticle.GetTypeName(); paras[26].Value = a_pParticle.GetTypeColor(); paras[27].Value = a_pParticle.GetSubParticles(); // String sSQLCommand = String.Format(sInsertFormat, // a_pParticle.GetFieldId(), //a_pParticle.GetAnalysisId(), //a_pParticle.GetAveGray(), // prec.Left, // prec.Top, // prec.Width, // prec.Height, //a_pParticle.GetActualArea(), // pos.X, // pos.Y, //a_pParticle.GetType(), //(int) a_pXray.GetElementQuantifyData().Count, //(int) (a_pParticle.GetFeature().GetSegmentsList().Count), //fldPos.X, //fldPos.Y, //a_pParticle.GetTagId(), //a_pParticle.GetDMAX(), //a_pParticle.GetDMIN(), //a_pParticle.GetDMPERP(), //a_pParticle.GetDPRIMETER(), //a_pParticle.GetORIENTATION(), //a_pParticle.GetDINSCR(), //a_pParticle.GetDMEAN(), //a_pParticle.GetDELONG(), //a_pParticle.GetFeretDiameter(), //a_pParticle.GetTypeName(), //a_pParticle.GetTypeColor(), //a_pParticle.GetSubParticles() //); //var helper = new SQLiteHelper(datastorePtr); List> cmds = new List>(); cmds.Add(cmd); datastorePtr.ExecuteNonQueryBatch(ref cmds); return true; } public bool UpdataAParticle( COTSParticleClr a_pParticle) { var tableInfoPtr = GetTableInfo(); var datastorePtr = GetDatastore(); String sSQLCommand = "Update IncAData \'{0}\' WHERE {1} = {2} AND {3} ={4} AND {5} ={6} AND {7} = {8};"; sSQLCommand= String.Format(sSQLCommand, a_pParticle.GetAveGray(), a_pParticle.GetActualArea(), a_pParticle.GetType(), a_pParticle.GetFieldId(), a_pParticle.GetTagId()); //var helper = new SQLiteHelper(datastorePtr); if (datastorePtr.RunCommand(sSQLCommand) != true) { return false; } return true; } public bool GetAllFieldsRecord(ref List allFlds) { var allRecords = this.GetQueryOfAllRecord(); Dictionary mapFld = new Dictionary(); for (int i = 0; i < allRecords.Rows.Count; i++) { int curFldId = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_FIELD_ID][0]; if (!mapFld.Keys.Contains(curFldId)) { COTSFieldData fld = new COTSFieldData(); fld.SetId((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_FIELD_ID][0]); System.Drawing.Point fldPos = new System.Drawing.Point(); fldPos.X = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_FldPosX][0]; fldPos.Y = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_FldPosY][0]; fld.SetOTSPosition(fldPos); List< COTSParticleClr> ps = fld.GetListAnalysisParticles(); COTSParticleClr p = new COTSParticleClr(); p.SetTagId((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_PARTICLE_ID][0]); p.SetClassifyId((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_INCA_ID][0]); int top = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_RECT_TOP][0]; int left = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_RECT_LEFT][0]; int width = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_RECT_WIDTH][0]; int height = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_RECT_HEIGHT][0]; Rectangle r = new Rectangle(left, top, width, height); p.SetParticleRect(r); p.SetAveGray(Convert.ToByte(allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_AVE_GRAY][0])); p.SetArea((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_AREA][0]); p.SetAnalysisId((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_XRAY_ID][0]); //p.SetDMax((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DMAX][0]); //p.SetDMin((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DMIN][0]); //p.SetDPerp((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DPERP][0]); //p.SetDInscr((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DINSCR][0]); //p.SetDMean((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DMEAN][0]); //p.SetDElong((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DELONG][0]); //p.SetPerimeter((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_PERIMETER][0]); //p.SetOrientation((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_ORIENTATION][0]); //p.TypeName(allRecords.Rows[(int)CMergeParticleTable.ColumnID.S_NAME][0].ToString()); //p.TypeColor(allRecords.Rows[(int)CMergeParticleTable.ColumnID.S_COLOR][0].ToString()); ps.Add(p); allFlds.Add(fld); mapFld[curFldId] = fld; } else { COTSFieldData fld = mapFld[curFldId]; List< COTSParticleClr> ps = fld.GetListAnalysisParticles(); COTSParticleClr p = new COTSParticleClr(); p.SetFieldId(fld.GetId()); p.SetTagId((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_PARTICLE_ID][0]); p.SetClassifyId((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_INCA_ID][0]); int top = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_RECT_TOP][0]; int left = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_RECT_LEFT][0]; int width = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_RECT_WIDTH][0]; int height = (int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_RECT_HEIGHT][0]; Rectangle r = new Rectangle(left, top, width, height); p.SetParticleRect(r); p.SetAveGray(Convert.ToByte(allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_AVE_GRAY][0])); p.SetArea((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_AREA][0]); p.SetAnalysisId((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.N_XRAY_ID][0]); //p.SetDMax((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DMAX][0]); //p.SetDMin((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DMIN][0]); //p.SetDPerp((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DPERP][0]); //p.SetDInscr((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DINSCR][0]); //p.SetDMean((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DMEAN][0]); //p.SetDElong((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_DELONG][0]); //p.SetPerimeter((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_PERIMETER][0]); //p.SetOrientation((int)allRecords.Rows[(int)CMergeParticleTable.ColumnID.F_ORIENTATION][0]); //p.TypeName(allRecords.Rows[(int)CMergeParticleTable.ColumnID.S_NAME][0].ToString()); //p.TypeColor(allRecords.Rows[(int)CMergeParticleTable.ColumnID.S_COLOR][0].ToString()); ps.Add(p); } allRecords.NewRow(); }; allRecords.Clear(); return true; } public DataTable GetQueryOfAllRecord() { DataTable query; var datastorePtr = GetDatastore(); var tableInfoPtr = GetTableInfo(); String sSQLCommand = ""; String.Format("SELECT * FROM \'{0}\' WHERE {1} = {2} AND {3} ={4} AND {5} ={6} AND {7} = {8};", (String)tableInfoPtr.GetTableName()); //var helper = datastorePtr; query = datastorePtr.QueryByCmdForDataTable(sSQLCommand); ; return query; } public DataTable GetQueryById( long a_nXrayId, long a_nFieldId) { DataTable query; var datastorePtr = GetDatastore(); var tableInfoPtr = GetTableInfo(); var sXrayIdColumnName = tableInfoPtr.GetColumnName((int)CMergeParticleTable.ColumnID.N_XRAY_ID - (int)CMergeParticleTable.ColumnID.MIN); var sFieldIdColumnName = tableInfoPtr.GetColumnName((int)CMergeParticleTable.ColumnID.N_FIELD_ID - (int)CMergeParticleTable.ColumnID.MIN); String sSQLCommand = ""; String.Format("SELECT * FROM \'{0}\' WHERE {1} = {2} AND {3} ={4} AND {5} ={6} AND {7} = {8};", (String) tableInfoPtr.GetTableName(), sFieldIdColumnName, a_nFieldId, sXrayIdColumnName, a_nXrayId); //var helper = new SQLiteHelper(datastorePtr); query = datastorePtr.QueryByCmdForDataTable(sSQLCommand); return query; } } }