diff src/myframe.cpp @ 4:fdba695b99f1

More fast ( read from DB ). Improve the precision of marksheet judgement.
author pyon@macmini
date Wed, 11 Sep 2013 19:09:14 +0900
parents 1a64119ab257
children bc2e2b304095
line wrap: on
line diff
--- a/src/myframe.cpp	Tue Aug 27 18:50:00 2013 +0900
+++ b/src/myframe.cpp	Wed Sep 11 19:09:14 2013 +0900
@@ -1,5 +1,5 @@
 // Filename   : myframe.cpp
-// Last Change: 27-Aug-2013.
+// Last Change: 11-Sep-2013.
 //
 #include "main.h"
 #include "db.h"
@@ -7,7 +7,7 @@
 #include "kana.h"
 #include "hist.h"
 #include "index.h"
-#include "mask.h"
+#include "param.h"
 #include "marksheet.h"
 #include "myframe.h"
 #include "bprint.h"
@@ -97,9 +97,17 @@
 	wxMenuItem* m_menuItemBkup = new wxMenuItem( m_menuFile, ID_MNDBBKUP, wxString( wxT("DBバックアップ(&B)") ) , wxT("Backup databases"), wxITEM_NORMAL );
 	m_menuFile->Append( m_menuItemBkup );
 
-	wxMenuItem* m_menuItemMask = new wxMenuItem( m_menuFile, ID_MNMASKPARAM, wxString( wxT("マスクパラメータ(&M)") ) , wxT("Setup mask parameters"), wxITEM_NORMAL );
-	m_menuFile->Append( m_menuItemMask );
+    // params
+	m_menuParam = new wxMenu();
+	wxMenuItem* m_menuItemMask = new wxMenuItem( m_menuParam, ID_MNMASKPARAM, wxString( wxT("マスク(&M)") ) , wxT("Setup mask parameters"), wxITEM_NORMAL );
+	m_menuParam->Append( m_menuItemMask );
 
+	wxMenuItem* m_menuItemMark = new wxMenuItem( m_menuParam, ID_MNMARKPARAM, wxString( wxT("マークシート(&S)") ) , wxT("Setup marksheet parameters"), wxITEM_NORMAL );
+	m_menuParam->Append( m_menuItemMark );
+
+	m_menuFile->Append( -1, wxT("パラメータ(&P)"), m_menuParam );
+
+    //
 	wxMenuItem* m_menuItemAppDir = new wxMenuItem( m_menuFile, ID_MNAPPDIR, wxString( wxT("アプリケーションフォルダを開く(&O)") ) , wxT("Open application directory"), wxITEM_NORMAL );
 	m_menuFile->Append( m_menuItemAppDir );
 	
@@ -200,7 +208,7 @@
     SetStatusText( wxT("被保番を入力してスタート!") );
 	
 	this->Centre( wxBOTH );
-    LoadMaskParam();
+    LoadParam();
 }
 
 MyFrame::~MyFrame()
@@ -216,6 +224,7 @@
     EVT_MENU( ID_MNINDEX, MyFrame::OnIndex )
     EVT_MENU( ID_MNDBBKUP, MyFrame::OnDBBackup )
     EVT_MENU( ID_MNMASKPARAM, MyFrame::OnMaskParam )
+    EVT_MENU( ID_MNMASKPARAM, MyFrame::OnMarkParam )
     EVT_MENU( ID_MNAPPDIR, MyFrame::OnOpenAppDir )
     EVT_LIST_ITEM_ACTIVATED( ID_LIST, MyFrame::OnSelectHhsDir )
     EVT_BUTTON( ID_KANA, MyFrame::OnKana )
@@ -263,8 +272,8 @@
 
     event.Skip();
 }
-/* マスクパラメータを設定ファイルから読み込む */
-void MyFrame::LoadMaskParam( void )
+/* パラメータを設定ファイルから読み込む */
+void MyFrame::LoadParam( void )
 {
     conf_file = wxGetCwd() + wxFILE_SEP_PATH + wxT("app.conf");
     config = new wxFileConfig( wxT("MyApp"), wxT("T.Mutoh"), conf_file, wxEmptyString, wxCONFIG_USE_LOCAL_FILE );
@@ -330,14 +339,20 @@
 
     wxString file;
     bool cout = dir.GetFirst( &file, wxT("*.jpg"), wxDIR_FILES );
+    bool notyet_mask = true;
     int n = 0;
     wxString tmpdir = wxGetCwd() + wxFILE_SEP_PATH + wxT("tmp") + wxFILE_SEP_PATH;
     while ( cout ) {
         file = path[0] + wxFILE_SEP_PATH + file;
         file.Replace( wxFILE_SEP_PATH, wxT("/") );
         wxString tmpjpg = wxString::Format( wxT("%stmp%d.jpg"), tmpdir, n );
+
+        double zmin = 0.095713;
+        double zmax = 0.147142;
+        long lmin = 2072393;
+        long lmax = 2472318;
         
-        if ( n == 0 ) {       // 1枚目はマスクする
+        if ( notyet_mask && IsMarksheet( file, zmin, zmax, lmin, lmax ) ) {  // マークシート表面をマスクする
             wxImage img_org( file, wxBITMAP_TYPE_JPEG );
             int ver = GetMarksheetVersion( file );
             if ( ver == 2 ) {
@@ -351,6 +366,7 @@
                 img_org.SetRGB( m_mask3old, 255, 255, 255 );   // barcode
             }
             img_org.SaveFile( tmpjpg );
+            notyet_mask = false;
         }
         else {
             wxCopyFile( file, tmpjpg, true );
@@ -397,26 +413,31 @@
     index->SetRootdir( rootdir );
     index->ShowModal();
 }
+/* マークシートパラメータ設定ダイアログ */
+void MyFrame::OnMarkParam( wxCommandEvent& WXUNUSED(event) )
+{
+    ParamDialog* param = new ParamDialog( this, wxID_ANY, wxT("マークシート判定パラメータの指定"), wxDefaultPosition, wxSize( 350, 250 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
+}
 /* マスクパラメータ設定ダイアログ */
 void MyFrame::OnMaskParam( wxCommandEvent& WXUNUSED(event) )
 {
-    MaskDialog* mask = new MaskDialog( this, wxID_ANY, wxT("マスク位置とサイズの指定"), wxDefaultPosition, wxSize( 350, 250 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
-    mask->SetMask1( m_mask1 );
-    mask->SetMask2( m_mask2 );
-    mask->SetMask3( m_mask3 );
-    mask->SetMask1Old( m_mask1old );
-    mask->SetMask2Old( m_mask2old );
-    mask->SetMask3Old( m_mask3old );
-    mask->LoadParams();
-    mask->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM );
+    ParamDialog* param = new ParamDialog( this, wxID_ANY, wxT("マスク位置とサイズの指定"), wxDefaultPosition, wxSize( 350, 250 ), wxCAPTION|wxFRAME_NO_TASKBAR|wxSTAY_ON_TOP|wxTAB_TRAVERSAL );
+    param->SetMask1( m_mask1 );
+    param->SetMask2( m_mask2 );
+    param->SetMask3( m_mask3 );
+    param->SetMask1Old( m_mask1old );
+    param->SetMask2Old( m_mask2old );
+    param->SetMask3Old( m_mask3old );
+    param->LoadParams();
+    param->ShowWithEffect( wxSHOW_EFFECT_SLIDE_TO_BOTTOM );
 
-    if ( mask->ShowModal() == wxID_OK ) {
-        m_mask1    = mask->GetMask1();
-        m_mask2    = mask->GetMask2();
-        m_mask3    = mask->GetMask3();
-        m_mask1old = mask->GetMask1Old();
-        m_mask2old = mask->GetMask2Old();
-        m_mask3old = mask->GetMask3Old();
+    if ( param->ShowModal() == wxID_OK ) {
+        m_mask1    = param->GetMask1();
+        m_mask2    = param->GetMask2();
+        m_mask3    = param->GetMask3();
+        m_mask1old = param->GetMask1Old();
+        m_mask2old = param->GetMask2Old();
+        m_mask3old = param->GetMask3Old();
 
         config->SetPath( wxT("/Mask") );