Filter Library Camera Interface Physics

ScanFilterClip.cpp

00001 // ScanFilterClip.cpp: implementation of the CScanFilterClip class.
00002 //
00003 //////////////////////////////////////////////////////////////////////
00004 
00005 #include "stdafx.h"
00006 #include "resource.h"
00007 #include <Camera/InterfaceDll.h>                                // Interface Dll definitions
00008 #include <Camera/CameraGeneralDefines.h>
00009 #include "ScanBaseBuffer.h"                      
00010 #include "ScanFilter.h"
00011 #include "ScanFilterClip.h"
00012 
00013 #include "FilterDlg.h"
00014 //#include "FilterDlg_Clip.h"
00015 
00016 #ifdef _DEBUG
00017 #undef THIS_FILE
00018 static char THIS_FILE[]=__FILE__;
00019 #define new DEBUG_NEW
00020 #endif
00021 
00022 //////////////////////////////////////////////////////////////////////
00023 // Construction/Destruction
00024 //////////////////////////////////////////////////////////////////////
00025 
00026 CScanFilterClip::CScanFilterClip() :
00027    m_rcClipArea( NonIntersectingRect )
00028 {
00029 //   Q_LOG( _T("CScanFilterClip::CScanFilterClip()") );
00030         m_csFilterName = m_lpcsFilterName;
00031 //      m_rcClipArea = CRect(0,0,100,80);     // FIXME-REMOVE:
00032 }
00033 
00034 CScanFilterClip::~CScanFilterClip()
00035 {
00036 //   Q_LOG( _T("CScanFilterClip::~CScanFilterClip()") );
00037 }
00038 
00039 LPCTSTR CScanFilterClip::m_lpcsFilterName = _T("Clip");
00040                                         // this filter's short name
00041 LPCTSTR CScanFilterClip::m_lpcsShortFilterName = CScanFilterClip::m_lpcsFilterName;
00042 IMPLEMENT_SERIAL(CScanFilterClip, CScanFilter, 0)
00043 
00044 //-------------------------------------------------------------------------------//
00045 
00046 void CScanFilterClip::Serialize(CArchive& ar)
00047 {
00048 //   Q_LOG( _T("CScanFilterClip::Serialize") );
00049         CScanFilter::Serialize( ar );
00050 };
00051 
00052 /*
00053  * set parameters for filter-script execution of filter;
00054  * see also CScanFilterNull::SetParameters().
00055  */
00056 BOOL CScanFilterClip::SetParameters( LPCTSTR lpParameters )
00057 {
00058 //   Q_LOG( _T("CScanFilterClip::SetParameters()") );
00059 
00060    if ( Q_INVALID( NULL == lpParameters && "CScanFilterClip (SetParameters): parameters expected, none provided (NULL)." ) )
00061    {
00062       return FALSE;
00063    }
00064 
00065    /*
00066     * set defaults, read parameter string with factor and optional offset:
00067     */
00068    int nfields = _stscanf( lpParameters, _T( "%d,%d,%d,%d" ),
00069                     &m_rcClipArea.left, &m_rcClipArea.top, &m_rcClipArea.right, &m_rcClipArea.bottom );
00070 
00071    if ( Q_INVALID( 4 > nfields && "CScanFilterClip (SetParameters): left, top, right, bottom expected, got fewer." ) )
00072    {
00073       return FALSE;
00074    }
00075 
00076    if ( Q_INVALID( m_rcClipArea.IsRectEmpty() && "CScanFilterClip (SetParameters): empty clip rectange." ) )
00077    {
00078       return FALSE;
00079    }
00080 
00081    return TRUE;
00082 }
00083 
00084 //-------------------------------------------------------------------------------//
00085 
00086 LPCTSTR CScanFilterClip::GetParameters() const
00087 {
00088 //   Q_LOG( _T("CScanFilterClip::GetParameters()") );
00089         CString csTmp;
00090         csTmp.Format(_T("%d,%d,%d,%d"),m_rcClipArea.left,m_rcClipArea.top,m_rcClipArea.right,m_rcClipArea.bottom);
00091 
00092         // Make a copy and return that string
00093         LPTSTR pReturn = new TCHAR[ csTmp.GetLength() + 1];
00094         strcpy(pReturn, csTmp);
00095         return pReturn;
00096 }
00097 
00098 //-------------------------------------------------------------------------------//
00099 
00100 BOOL CScanFilterClip::Apply()
00101 {
00102 //   Q_LOG( _T("CScanFilterClip::Apply()") );
00103 
00104         ASSERT(m_lpsbIn);
00105         ASSERT(m_lpsbOut);
00106 
00107         CRect rcTestClip;
00108         m_rcClipArea.NormalizeRect();
00109         rcTestClip.IntersectRect(CRect(0,0,m_lpsbIn->m_dwSizeX,m_lpsbIn->m_dwSizeY),m_rcClipArea);
00110 
00111    /*
00112     * copy the filter settings (not the data):
00113     */
00114    Q_RETURN( m_lpsbOut->CreateOutputBufferFor( *m_lpsbIn ) );
00115    Q_RETURN( m_lpsbOut->ResizeDataBuffer( CSize( rcTestClip.Width(), rcTestClip.Height() ) ) );
00116 
00117         m_lpsbOut->m_csBufferName.Format(_T("%s - %s"),m_lpsbIn->m_csBufferName, m_lpcsShortFilterName );
00118 
00119 //      m_lpsbOut->m_dwSizeX = rcTestClip.Width();
00120 //      m_lpsbOut->m_dwSizeY = rcTestClip.Height();
00121 //      m_lpsbOut->m_dwPixels = m_lpsbOut->m_dwSizeX * m_lpsbOut->m_dwSizeY;
00122 //
00123 //      m_lpsbOut->m_dwPixelOffset = 0;
00124 //      m_lpsbOut->m_dwPixelCount  = m_lpsbOut->m_dwPixels;
00125 //
00126 //      m_lpsbOut->m_dwPixels *= ((m_lpsbIn->m_dwFlags & SPM_SDBF_LEFT2RIGHT) && (m_lpsbIn->m_dwFlags & SPM_SDBF_RIGHT2LEFT) ? 2 : 1);
00127 //      m_lpsbOut->CheckAndSetBufferSize();
00128 
00129         // Copy Area's
00130         for (int y=0; y<(int)m_lpsbOut->m_dwSizeY; y++)
00131                 memcpy( m_lpsbOut->m_pwData + (int)m_lpsbOut->m_dwSizeX * y, m_lpsbIn->m_pwData + (int)m_lpsbIn->m_dwSizeX * (y + rcTestClip.top) + rcTestClip.left, (int)m_lpsbOut->m_dwSizeX * sizeof(short));
00132 
00133         if ((m_lpsbIn->m_dwFlags & SPM_SDBF_LEFT2RIGHT) && (m_lpsbIn->m_dwFlags & SPM_SDBF_RIGHT2LEFT))
00134         {
00135                 DWORD dwOffsetIn = m_lpsbIn->m_dwSizeX*m_lpsbIn->m_dwSizeY;
00136                 DWORD dwOffsetOut = m_lpsbOut->m_dwSizeX*m_lpsbOut->m_dwSizeY;
00137                 for (int y=0; y<(int)m_lpsbOut->m_dwSizeY; y++)
00138                         memcpy( m_lpsbOut->m_pwData + (int)m_lpsbOut->m_dwSizeX * y + (int)dwOffsetOut, m_lpsbIn->m_pwData + (int)m_lpsbIn->m_dwSizeX * (y + rcTestClip.top) + rcTestClip.left + (int)dwOffsetIn, (int)m_lpsbOut->m_dwSizeX * sizeof(short));
00139         }
00140 
00141         m_lpsbOut->m_dwParameterMask  = 0;              // Recalculate all temp.vars.
00142         return TRUE;
00143 }
00144 
00145 //-------------------------------------------------------------------------------//
00146 
00147 #pragma warning( push )
00148 #pragma warning( disable : 4100 )       // unreferenced formal parameter
00149 
00150 void CScanFilterClip::SetDragInput( BOOL bL2R, CRect rcIn )
00151 {
00152 //   Q_LOG( _T("CScanFilterClip::SetDragInput()") );
00153 
00154         m_rcClipArea = rcIn;
00155 
00156         // Apply();             // Do not apply just jet, because the result is not set.
00157         // TODO ((CFilterDlg_Clip *)m_pDlg)->UpdateView();
00158 }
00159 
00160 #pragma warning( pop )
00161 
00162 //-------------------------------------------------------------------------------//
00163 
00164 #pragma warning( push )
00165 #pragma warning( disable : 4100 )       // unreferenced formal parameters
00166 
00167 BOOL CScanFilterClip::RunModeless( CWnd* pParentWnd, CDocument* pDoc )
00168 {
00169 //   Q_LOG( _T("CScanFilterClip::RunModeless()") );
00170 //      CFilterDlg_Clip *pDlg = new CFilterDlg_Clip();
00171 //      pDlg->SetParameters(this,pDoc,pView);
00172 //      BOOL bRet = pDlg->Create(IDD_FILTERDLG_CLIP,pParentWnd);
00173 
00174 //      Apply();
00175 //      pDlg->UpdateView();
00176 
00177 //      m_pDlg = pDlg;
00178         return FALSE; //bRet;
00179 }
00180 
00181 #pragma warning( pop )
00182 
00183 //-------------------------------------------------------------------------------//
00184 

Camera Filter Library documentation © 2004-2007 by Leiden Probe Microscopy