// AttentionView.cpp : implementation of the CAttentionView class // Project MOT // Kazanovich June 2005 #include "stdafx.h" #include "Attention.h" #include "AttentionDoc.h" #include "AttentionView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAttentionView IMPLEMENT_DYNCREATE(CAttentionView, CScrollView) BEGIN_MESSAGE_MAP(CAttentionView, CScrollView) //{{AFX_MSG_MAP(CAttentionView) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAttentionView construction/destruction CAttentionView::CAttentionView() { // TODO: add construction code here } CAttentionView::~CAttentionView() { } BOOL CAttentionView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CScrollView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CAttentionView drawing #define RED RGB(150, 0, 0) #define BLUE RGB(0, 0, 200) #define GREEN RGB(0, 150, 0) #define LIGHT_RED RGB(255, 50, 50) #define LIGHT_GREEN RGB(50, 255, 50) #define BLACK RGB(0, 0, 0) #define CYAN RGB(30, 255, 255) #include "mot.h" void Connec(); void My_error(CString); void Netalloc(); void Netinit(); void Netreinit(); void Pardef(); void Step(); void Trajclose(); void Trajopen(); void Trajsave(); void Stimgen(); void Stimvar(double t); extern struct network net[noaf]; extern struct parameters par; extern struct integration integr; extern struct image im; const float scalex = 1; const float scaley = 7; const int sqx = 2; // Scale (not less than 2) const int sqy = 2; const int sqx0 = 10;// Origine of the view const int sqy0 = 10; const int pmax = 7; // (pmax + 1) maximal number of frames in the row int it; // the number of iterations void CAttentionView::OnDraw(CDC* pDC) { int i; COLORREF color, palett[7] = {RED, BLUE, GREEN, LIGHT_RED, LIGHT_GREEN, CYAN, BLACK}; Pardef(); int n = par.n; double resthresh = integr.resthresh; double maxt = integr.maxt; double dt = integr.dt; it = 0; double t = 0; int p = 0, q = 0; // coordinates of frames (viewports) #ifdef RANDOMIZE_ON srand(time(NULL)); #endif Stimgen(); #ifdef TRAJSAVE_ON Trajopen(); #endif Netalloc(); Netinit(); Connec(); while (t <= maxt) {//1+ // Displaying the current state if (it%10 == 0) {//2+ // Viewport formation CPoint view_origine(sqx0, sqy0);; CPoint viewport_origine( (ncolumns + 1)*p*sqx, (nrows + 1)*q*sqy); viewport_origine += view_origine; pDC->SetViewportOrg(viewport_origine); int viewport_sizex = ncolumns*sqx; int viewport_sizey = nrows*sqy; CSize viewport_size(viewport_sizex, viewport_sizey); pDC->SetViewportExt(viewport_size); // Frame drawing pDC->SelectStockObject(BLACK_PEN); pDC->SelectStockObject(WHITE_BRUSH); pDC->Rectangle(0, 0, viewport_size.cx, viewport_size.cy); for (i = 1; i <= n; i++) {//3+ if (net[0].osc[i].amp > 0) {//4+ int i1 = i - 1; // enumaration starts from 1 int col = i1%ncolumns; // column in the frame int row = i1/ncolumns; // row in the frame int x = col*sqx; // position in the frame int y = row*sqy; int x1 = x; int y1 = y; int x2 = x1 + sqx; int y2 = y1 + sqy; color = palett[6]; for (int oaf = 0; oaf < noaf; oaf++) { if (net[oaf].osc[i].amp > resthresh) { color |= palett[oaf]; } } CPen penSolid(PS_SOLID, 1, color); CBrush brushFilled(color); pDC->SelectObject(penSolid); pDC->SelectObject(brushFilled); pDC->Rectangle(x1, y1, x2, y2); }//4- }//3- // Marking targets for (i = 0; i < nobj; i++) { if (im.obj[i].type == target) { int x1 = (im.obj[i].cx - im.r - 1)*sqx; int y1 = (im.obj[i].cy - im.r)*sqx; int x2 = (im.obj[i].cx + im.r + 1)*sqx; int y2 = (im.obj[i].cy + im.r + 2)*sqx; CPen penSolid(PS_SOLID, 2, palett[5]); pDC->SelectObject(penSolid); pDC->SelectStockObject(HOLLOW_BRUSH); pDC->Rectangle(x1, y1, x2, y2); } } // Indexing output frame locations p++; if (p > pmax) { p = 0; q++; } }//2- #ifdef TRAJSAVE_ON Trajsave(); #endif Step(); if ( (t > integr.expos) && (t < integr.maxt - integr.probe) && (it%integr.movement_dt == 0) ) { Stimvar(t); Netreinit(); Connec(); } t += dt; it++; }//1- #ifdef TRAJSAVE_ON Trajclose(); #endif } void CAttentionView::OnInitialUpdate() { CScrollView::OnInitialUpdate(); CSize sizeTotal; // TODO: calculate the total size of this view sizeTotal.cx = 3000; sizeTotal.cy = 3000; SetScrollSizes(MM_TEXT, sizeTotal); } ///////////////////////////////////////////////////////////////////////////// // CAttentionView printing BOOL CAttentionView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CAttentionView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CAttentionView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CAttentionView diagnostics #ifdef _DEBUG void CAttentionView::AssertValid() const { CScrollView::AssertValid(); } void CAttentionView::Dump(CDumpContext& dc) const { CScrollView::Dump(dc); } CAttentionDoc* CAttentionView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAttentionDoc))); return (CAttentionDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CAttentionView message handlers