void Ut_StatusIndicatorMenuWindow::testStatusIndicatorMenuIsClosedWhenStatusBarIsTapped()
{
    QFETCH(bool, pressInside);
    QFETCH(bool, releaseInside);
    QFETCH(MSceneWindow::SceneWindowState, sceneWindowState);

    statusIndicatorMenuWindow->displayActive();

    // Map the bounding rect to the scene
    QRectF statusBarGeometry(statusIndicatorMenuWindow->statusBar->sceneBoundingRect());
    QPoint pressPoint(statusBarGeometry.x(), statusBarGeometry.y());
    QPoint releasePoint(statusBarGeometry.x(), statusBarGeometry.y());

    if (!pressInside) {
        pressPoint += QPoint(-1, -1);
    }

    if (!releaseInside) {
        releasePoint += QPoint(-1, -1);
    }

    // Then map the press point to the viewport
    pressPoint = statusIndicatorMenuWindow->mapFromScene(pressPoint);
    releasePoint = statusIndicatorMenuWindow->mapFromScene(releasePoint);

    QMouseEvent pressEvent(QEvent::MouseButtonPress, pressPoint, Qt::LeftButton, Qt::MouseButtons(Qt::LeftButton), Qt::KeyboardModifiers(Qt::NoModifier));
    QMouseEvent releaseEvent(QEvent::MouseButtonRelease, releasePoint, Qt::LeftButton, Qt::MouseButtons(Qt::LeftButton), Qt::KeyboardModifiers(Qt::NoModifier));

    statusIndicatorMenuWindow->mousePressEvent(&pressEvent);
    statusIndicatorMenuWindow->mouseReleaseEvent(&releaseEvent);

    QCOMPARE(statusIndicatorMenuWindow->menuWidget->sceneWindowState(), sceneWindowState);
}
示例#2
0
bool arlCore::Mesh::releaseTriangle( unsigned int noTriangle )
{
    unsigned int i;
    for( i=0 ; i<3 ; ++i )
        releasePoint(m_triangles[noTriangle][i]);
    m_freeTriangles.push_back(noTriangle);
    return true;
}
示例#3
0
bool arlCore::Mesh::simplify( void )
{
#ifndef ANN
    return false;
#else // ANN
    unsigned int i, j;
    const unsigned int Size = m_pointList->visibleSize();
    const unsigned int Dimension = m_pointList->getDimension();
    ANNpointArray ANNPoints = annAllocPts( Size, Dimension );
    for( i=0 ; i<m_pointList->size() ; ++i )
        for( j=0 ; j<Dimension ; ++j )
            ANNPoints[i][j]=(*m_pointList)[i]->get(j);
    const int BucketSize = 1;
    ANNkd_tree* ANNtree = new ANNkd_tree( ANNPoints, Size, Dimension, BucketSize, ANN_KD_SL_MIDPT );
    const double Epsilon = 1e-8;// Error bound
    const double SquaredEpsilon = Epsilon*Epsilon;
    ANNpoint ANNPt = annAllocPt(Dimension); // Query point
    const unsigned int NbNeighbors = 20;
    ANNidxArray Nn_idx = new ANNidx[NbNeighbors]; // near neighbor indices
    ANNdistArray SquaredDists = new ANNdist[NbNeighbors]; // near neighbor distances
    for( i=0 ; i<m_pointList->size() ; ++i )
        if((*m_pointList)[i]->isVisible())
        {
            std::vector<unsigned int> oldIndex;
            for( j=0 ; j<Dimension; ++j )
                ANNPt[j] = (*m_pointList)[i]->get(j);
            ANNtree->annkSearch( ANNPt, NbNeighbors, Nn_idx, SquaredDists, Epsilon );
            // Cherche points les plus proches
            for( j=0 ; j<NbNeighbors ; ++j )
                if(SquaredDists[j]<=SquaredEpsilon)
                {
                     releasePoint(Nn_idx[j]);
                     oldIndex.push_back(Nn_idx[j]);
                }
            replacePointIndex(oldIndex, i);
        }
    delete ANNtree;
    annDeallocPt( ANNPt );
    annDeallocPts( ANNPoints );
    delete[] Nn_idx;
    delete[] SquaredDists;
    annClose();
    return true;
#endif // ANN
}