互動設計//量測順序

已知,量測TFT-LCD時,會定義各式各樣的量測點位,大致上可以分成九宮格(以長寬各為三分之一概分)每一格的定義也不一定是一個點,量測的顏色也不一定只有白色。

為應付一次量測好幾種量測點定義,這裡的設計,為了在不受手持量測影響準確度的情況,量測的速度加快。

舉例的情境

在此使用兩個量測項目,共十八個點做例子。
  • 白色9點,離邊4cm
  • 黑色9點,離邊1/3
黑色白色皆可先量,在此以黑色先量為例子。

定義「簡稱」

白色:R,黑色:B
白色9點:R9
白色9點第3點:R9_3....依此類推

定義「圖例箭頭」

藍色:從1離開
紅色:跨九宮格
其它:不定義。

原本的順序


D1W1→D2→D3→D7→D4→D8→D5→D6→D9(結束D的量測)W2→W3→W7→W4→W8→W5→W6→W9(結束W的量測)

優點

中心點先量,可先卡中心點規格

缺點

左右來回多趟,大尺寸量測需花來來回回的時間。
Probe移動位移大

設計的量測順序


B1→R1→B2→R2→B3→R3→B4→R4→B5→R5→B6→R6→B7→R7→B8→R8→B9(結束B的量測)R9(結束R的量測)

優點

中心點先量,可先卡中心點規格
打破量測量測的分界,將所有點以區域分群,成為9群,各群中的各點再依序量完,左右來回一趟,Probe移動位移小。

缺點

作業人員不習慣,操作過程畫面背景色閃動幅度大。



如何設計
在DNA轉RNA的過程中,有一個Area順序,在TranScripter::setSquence裡,設定其順序,再利用STL的sort做排序就可以做到了。

void TranScripter::setSquence(Cartridge2& _Car, const std::vector<Nucleotide>::size_type& size, const int& msrItemIndex) const
{
    const CPoint center(m_nScrmH/2, m_nScrmV/2);
    const CPoint carPoint(_Car.GetPointPosi());
    const int shift = 5;
    const CPoint aP(center.x - shift, center.y - shift), 
                 dP(center.x + shift, center.y + shift);
    
    //從point判斷area code
    if (carPoint.y < aP.y)
    {
             if ( (carPoint.x >= 0   ) && (carPoint.x <  aP.x) ) _Car.SetSqncArea(AA_02); 
        else if ( (carPoint.x >= aP.x) && (carPoint.x <= dP.x) ) _Car.SetSqncArea(AA_03);
        else                                                     _Car.SetSqncArea(AA_07);
    }
    else if ((carPoint.y >= aP.y) && (carPoint.y <= dP.y))
    {
             if ( (carPoint.x >= 0   ) && (carPoint.x <  aP.x) ) _Car.SetSqncArea(AA_04); 
        else if ( (carPoint.x >= aP.x) && (carPoint.x <= dP.x) ) _Car.SetSqncArea(AA_01);
        else                                                     _Car.SetSqncArea(AA_08);
    }
    else
    {
             if ( (carPoint.x >= 0   ) && (carPoint.x <  aP.x) ) _Car.SetSqncArea(AA_05); 
        else if ( (carPoint.x >= aP.x) && (carPoint.x <= dP.x) ) _Car.SetSqncArea(AA_06);
        else                                                     _Car.SetSqncArea(AA_09);
    }

    //依area code判斷順序的選擇
    if (m_curDnaCellItor->GetMsrPointTotal() == Pn21)
        if (msrItemIndex+1 == m_curDnaCellItor->GetMsrPointTotal()) 
            _Car.SetSqncFrm(1);
        else
            _Car.SetSqncFrm(size + 2);
    else if ( (m_curDnaCellItor->GetMsrPointTotal() == Pn4) || 
              (m_curDnaCellItor->GetMsrPointTotal() == PnGamma) )
        _Car.SetSqncFrm(size);
    else
    {
        if (msrItemIndex <  m_curDnaCellItor->GetMsrPointTotal()/2) _Car.SetSqncFrm(size + 2); 
        if (msrItemIndex == m_curDnaCellItor->GetMsrPointTotal()/2) _Car.SetSqncFrm(1);
        if (msrItemIndex >  m_curDnaCellItor->GetMsrPointTotal()/2) _Car.SetSqncFrm(size + 1);
    }
}

沒有留言:

張貼留言

文章分類維度