class//COmdFile0

為了防止世界被破壞,為了讓主程式的操作簡化,為了讓Gamma.omd神奇的跑出來,為了這一切的一切,就把omd的操作,再用一個皮包起來,用它就可以自動判斷是否有量測Gamma,是否需要輸出Gamma.omd,這一切都讓這一個類別去自動運作,稱之為OmdFile_Zero。
這個Zero的細部操作其實滿複雜的,只是這樣做的確可以增加主程式在讀寫該檔時的程式碼可讀性。
omd檔有三種格式,一種是舊的一般版,一種是新的一般版,最後是Gamma版。

COmdFile0.h

#ifndef OMDFILE0_H
#define OMDFILE0_H

#include "COmdFile1.h"
#include "COmdFileGm.h"

enum KindOfOmd { OMD_OLD = 0, OMD_AtYPE, OMD_GAMMA  };

class COmdFile0
{
//Diff of Txt file
    COmdFileFactor *m_Omd;
    COmdFileFactor *m_GmOmd;
    TxtStrData m_dTxt;
public:
    OmdHead& GetFileHead();
    const OmdHead GetFileHead() const;
    void SetFileHead(const OmdHead& _H);

    //這些介面剩下 void CSelExcelDlg::otherOmd2xls(CXlsFile2* pHDfXls) 在使用
    CString GetPnlID () const;
    CString GetMsrDvc() const;
    CString GetPrb   () const;
    CString GetCHID  () const;
    CString GetInch  () const;
    CString GetNitsLv() const;
    
    void SetPnlID  (const CString& _S);
    void SetMsrDvc (const CString& _S);
    void SetPrb    (const CString& _S);
    void SetCHID   (const CString& _S);
    void SetInch   (const CString& _S);
    void SetNitsLv (const CString& _S);
public:
    COmdFile0();
    virtual ~COmdFile0();
    BOOL Open(LPCTSTR _S);
    BOOL Open(LPCTSTR _S, CFileException& _Fx);
    BOOL Save(LPCTSTR _S, CFileException& _Fx, RNA& _D);
    
    void Close();

    void iOmdData(RNA& data);
    void oOmdData(RNA& data);
    RNA  oOmdData();

private:
    void openWhichKindOmefile();
    void saveWhichKindOmefile(RNA&);
    void getOpenSample(LPCTSTR , CFileException& );
};

#endif // OMDFILE0_H

COmdFile0.cpp

自動判斷要讀的檔和寫成什麼檔

簡化omd檔的操作,讓各式omd檔都保有特定的特微可以判斷。
void COmdFile0::openWhichKindOmefile()
{
    KindOfOmd omdKind;
    if (m_dTxt.at(0).Find(':') != -1)
        omdKind = OMD_OLD;
    else if (m_dTxt.at(0).Find("Gamma") != -1)
        omdKind = OMD_GAMMA;
    else
        omdKind = OMD_AtYPE;

    switch(omdKind)
    {
        case OMD_AtYPE: m_Omd = new COmdFile1(OMD_AtYPE); break;
        case OMD_GAMMA: m_Omd = new COmdFileGm();         break;
        case OMD_OLD:
        default:        m_Omd = new COmdFile1(OMD_OLD);
    }
}

void COmdFile0::saveWhichKindOmefile(RNA& _R)
{
    CString str;
    for (int i = 0; i < 256; ++i)
    {
        str.Format("%d", i);
        if ((_R.Find("白","gamma",str,"0 255 255").GetSqncArea() != AA_00) ||  //有量測 = .GetMsrFlowNo() != 99
            (_R.Find("紅","gamma",str,"0 255 255").GetSqncArea() != AA_00) ||
            (_R.Find("綠","gamma",str,"0 255 255").GetSqncArea() != AA_00) ||
            (_R.Find("藍","gamma",str,"0 255 255").GetSqncArea() != AA_00))
        {
            //omdKind = OMD_GAMMA;
            m_GmOmd = new COmdFileGm();
            break;
        }
    }
    m_Omd = new COmdFile1(OMD_AtYPE);
}

沒有留言:

張貼留言

文章分類維度