void CContourSliderManager::OnMouseMove( UINT nFlags, CPoint point) { Base::OnMouseMove(nFlags, point); bool xChange = false; bool yChange = false; int tempXPos = m_xPos; int tempYPos = m_yPos; int tempHeight = m_height; int tempWidth = m_width; m_nOperation = OperationNone; CWin* pWin; CBody* pBody = FindFirstBody(); if ( pBody == NULL ) return; pWin = pBody->GetWndInfo(); // kde nastala udalost CDblPoint currPoint = PtToGL(*pWin, point, false); /*POSITION pos = FindBodyHeadPosition(currPoint, FIND_MESH_ELEMENT); if ( !pos ) return;*/ // kde nastala udalost OnMouseLDown CDblPoint startPoint = PtToGL(*pWin, m_mouseStart, false); CBodyMesh *pBodyMesh = (CBodyMesh*) FindBody(pBody->GetID()); tag_BODYSIZE TrBody = pBodyMesh->GetTrBodySize(); // indexy dlazdice, ve ktere nastala udalost CPoint tilePoint; tilePoint.x = currPoint.x / m_tileSizeX / pWin->GetSx() + m_sizeX / 2; tilePoint.y = currPoint.y / m_tileSizeY / pWin->GetSy() + m_sizeY / 2; if (!m_resizing) { //MOVING//////////////////////// if( tilePoint.x > m_xPos + 0.5 && tilePoint.x < m_xPos + m_width - 0.5 && tilePoint.y > m_yPos + 0.5 && tilePoint.y < m_yPos+m_height - 0.5) { m_nOperation = OperationMove; } //HORIZONTAL RESIZING else if( ((tilePoint.x <= m_xPos + 0.5 && tilePoint.x >= m_xPos - 0.5) || (tilePoint.x <= m_xPos + m_width + 0.5 && tilePoint.x >= m_xPos + m_width - 0.5)) && (tilePoint.y >= m_yPos + 0.5 && tilePoint.y <= m_yPos+m_height - 0.5)) { if(tilePoint.x <= m_xPos + 0.5) leftOrUp = true; else leftOrUp = false; m_nOperation = OperationResizeHorizontal; } //VERTICAL RESIZING /*else if (((tilePoint.y <= m_yPos + 0.5 && tilePoint.y >= m_yPos - 0.5) || (tilePoint.y <= m_yPos + m_height + 0.5 && tilePoint.y >= m_yPos + m_height - 0.5)) && (tilePoint.x >= m_xPos + 0.5 && tilePoint.x <= m_xPos + m_width - 0.5)) { if(tilePoint.y <=m_yPos+0.5) leftOrUp = true; else leftOrUp = false; m_nOperation = OperationResizeVertical; } //DIAGONAL RESIZING-TOP LEFT else if (tilePoint.y <= m_yPos + m_height + 0.5 && tilePoint.y >= m_yPos + m_height - 0.5 && tilePoint.x <= m_xPos + 0.5 && tilePoint.x >= m_xPos - 0.5) { leftOrUp = true; m_nOperation = OperationResizeDiagonal; } //DIAGONAL RESIZING - BOOTOM RIGHT else if (tilePoint.y <= m_yPos + 0.5 && tilePoint.y >= m_yPos - 0.5 && tilePoint.x <= m_xPos + m_width + 0.5 && tilePoint.x >= m_xPos + m_width - 0.5) { leftOrUp = false; m_nOperation = OperationResizeDiagonal; } //DIAGONAL RESIZING - TOP RIGHT else if (tilePoint.y <= m_yPos + m_height + 0.5 && tilePoint.y >= m_yPos + m_height - 0.5 && tilePoint.x <= m_xPos + m_width + 0.5 && tilePoint.x >= m_xPos + m_width - 0.5) { leftOrUp = false; m_nOperation = OperationResizeDiagonalOther; } //DIAGONAL RESIZING - BOTTOM LEFT else if (tilePoint.y <= m_yPos + 0.5 && tilePoint.y >= m_yPos - 0.5 && tilePoint.x <= m_xPos + 0.5 && tilePoint.x >= m_xPos - 0.5) { leftOrUp = true; m_nOperation = OperationResizeDiagonalOther; }*/ } if (m_mouseDown) { m_xPos += (currPoint.x - startPoint.x) / m_tileSizeX / pWin->GetSx(); m_yPos += (currPoint.y - startPoint.y) / m_tileSizeY / pWin->GetSy(); Invalidate(); } else if (m_resizingHorizontal) { if(leftOrUp) { m_xPos += (currPoint.x - startPoint.x) / m_tileSizeX / pWin->GetSx(); m_width -= (currPoint.x - startPoint.x) / m_tileSizeX / pWin->GetSx(); } else { m_width += (currPoint.x - startPoint.x) / m_tileSizeX / pWin->GetSx(); } Invalidate(); } else if (m_resizingVertical) { if(leftOrUp) { m_yPos += (currPoint.y - startPoint.y) / m_tileSizeY / pWin->GetSy(); m_height -= (currPoint.y - startPoint.y) / m_tileSizeY / pWin->GetSy(); } else { m_height += (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy(); } Invalidate(); } else if (m_resizingDiagonal)//TOP LEFT TO BOOTOM RIGHT { if (leftOrUp) { m_height += (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy(); m_xPos += (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx(); m_width -= (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx(); } else { m_yPos += (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy(); m_height -= (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy(); m_width += (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx(); } Invalidate(); } else if (m_resizingDiagonalOther)//TOP RIGHT TO BOOTM LEFT { if (leftOrUp) { m_yPos += (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy(); m_height -= (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy(); m_xPos += (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx(); m_width -= (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx(); } else { m_width += (currPoint.x - startPoint.x)/m_tileSizeX/pWin->GetSx(); m_height += (currPoint.y - startPoint.y)/m_tileSizeY/pWin->GetSy(); } //m_mouseStart = point; Invalidate(); } if (m_width < m_minWidth) { m_width = tempWidth; m_xPos = tempXPos; } else { m_mouseStart.x = point.x; } if (m_height < m_minHeight) { m_height = tempHeight; m_yPos = tempYPos; } else { m_mouseStart.y = point.y; } if (tilePoint.x < 0 || m_xPos <0) { m_xPos=0; m_width = tempWidth; xChange = true; } else if (tilePoint.x > m_sizeX ||m_xPos > m_sizeX - m_width) { m_width = tempWidth; m_xPos = m_sizeX-m_width; xChange = true; } if(tilePoint.y < 0 || m_yPos<0) { m_yPos=0; m_height = tempHeight; yChange = true; } else if (tilePoint.y > m_sizeY || m_yPos > m_sizeY - m_height) { m_height = tempHeight; m_yPos = m_sizeY-m_height; yChange = true; } if (!xChange) m_mouseStart.x = point.x; if (!yChange) m_mouseStart.y = point.y; }