示例#1
0
void Canvas::mouseReleaseEvent(QMouseEvent *)
{

    if(currentShape()->type() != LineSegment::LineSegmentType::Type
            && !currentScene->shapes.isEmpty())
    {
        AbstractShape * item = currentShape();
        currentScene->edge()->setPen(currentPen);
        QRectF tmp = item->boundingRect();
        currentScene->edge()->draw(tmp.topLeft().x(), tmp.topLeft().y(),
                                   tmp.bottomRight().x(), tmp.bottomRight().y());
        currentScene->edge()->show();
        currentScene->update();
        edgeLocker = false;
    }

    isMoved = false;
    if(enableFill)
    {
        enableFill = false;
        currentScene->currentShape()->setPen(currentPen);
        if(currentShape()->type() == Triangle::TriangleType::Type &&
                ((Triangle *)currentShape())->normalizeFlag)
        {
            currentScene->currentShape()->normalize(startX(), startY(),
                            startX() - rect().topLeft().x());
        }
        else
        {
            currentScene->currentShape()->draw(startX(), startY(), endX(), endY());
        }
        currentScene->update();
    }
    else
        _normalize = NormalizeNone;
    if(buttonPressed)
    {
        _direction = None;
        _normalize = NormalizeNone;

        isMoved = false;
        shapeDrawn = true;
        buttonPressed = false;
        shapeSet = false;
        enableResize = true;
    }
}
示例#2
0
文件: Touch.cpp 项目: bradwarrum/RTVT
void Touch::process()
{
    switch (this->getCycle())
	{
	    case 0: setupX(); break;
		case 1: startX(); break;
		case 2: setupY(); break;
		case 3: startY(); break;
		default: asm("nop");
	}
}
示例#3
0
文件: Area3D.cpp 项目: jlaura/isis3
/**
 * Returns the intersection of this 3D area with another 3D area. If there is
 *   no intersection, an invalid 3D area will be returned.
 *
 * @param otherArea the area to intersect this 3D area with
 * @return the 3D area that is the intersection
 */
Area3D Area3D::intersect(const Area3D &otherArea) const {
    Area3D result;

    // Check validity because of comparison operators.
    if (isValid() && otherArea.isValid()) {
        Displacement startX(std::max(getStartX(), otherArea.getStartX()));
        Displacement startY(std::max(getStartY(), otherArea.getStartY()));
        Displacement startZ(std::max(getStartZ(), otherArea.getStartZ()));
        Displacement endX(std::min(getEndX(), otherArea.getEndX()));
        Displacement endY(std::min(getEndY(), otherArea.getEndY()));
        Displacement endZ(std::min(getEndZ(), otherArea.getEndZ()));


        if (startX <= endX && startY <= endY && startZ <= endZ)
            result = Area3D(startX, startY, startZ, endX, endY, endZ);
    }

    return result;
}
示例#4
0
void Canvas::mouseMoveEvent(QMouseEvent *event)
{
    if(!enableFill)
    {
        if(!isMoved)
        {
            AbstractShape * item = currentShape();
            QPointF p = event->pos();
            QRectF r = item->boundingRect();

            QPointF tl = mapFromScene(r.topLeft());
            QPointF br = mapFromScene(r.bottomRight());
            QPointF tr = mapFromScene(r.topRight());
            QPointF bl = mapFromScene(r.bottomLeft());

            checkIfProperRect(tl, br, tr, bl);

            if(enableResize && shapeDrawn)
            {
                //checkIfProperRect(tl, br);
                if(item != nullptr && item->type() != AbstractShape::AbstractType::Type + 1)
                {

                    if(belongToFirstCorners(p, tl, br))
                    {
                        setCursor(Qt::SizeBDiagCursor);
                    }
                    /*else if(belongToSecondCorners(p, tl, br))
                    {
                        setCursor(Qt::SizeFDiagCursor);
                    }*/
                    else if(((p.x() <= tl.x() && p.x() > tl.x() - 3) &&
                        p.y() > tl.y() - 3 && p.y() < br.y()) ||
                        ((p.x() > br.x() - 3 && p.x() <= br.x()) &&
                        p.y() > tl.y() - 3 && p.y() < br.y()))
                    {
                        setCursor(Qt::SizeHorCursor);
                    }
                    else if(((p.y() > br.y() - 3 && p.y() <= br.y()) &&
                             p.x() > tl.x() - 3 && p.x() < br.x()) ||
                            (p.y() <= tl.y() && p.y() > tl.y() - 3) &&
                            p.x() > tl.x() - 3 && p.x() < br.x())
                    {
                        setCursor(Qt::SizeVerCursor);
                    }
                    else if(p.x() >= tl.x() && p.x() <= br.x()
                            && p.y() >= tl.y() && p.y() <= br.y())
                    {
                        setCursor(Qt::SizeAllCursor);
                    }
                    else
                    {
                        setCursor(Qt::CrossCursor);
                    }

                    if(event->buttons() & Qt::LeftButton)
                    {

                        QPointF tl = mapFromScene(r.topLeft());
                        QPointF br = mapFromScene(r.bottomRight());
                        QPointF point = mapToScene(event->pos());
                        switch(_direction)
                        {
                        case Left :
                        {
                            if(sceneLocker(point))
                            {
                                if(tl.x() > br.x())
                                {
                                    _endX = point.x();
                                }
                                else
                                {
                                    _startX = point.x();
                                }

                            }
                            break;
                        }

                        case Right :
                        {
                            if(sceneLocker(point))
                            {
                                if(tl.x() > br.x())
                                {
                                    _startX = point.x();
                                }
                                else
                                {
                                     _endX = point.x();
                                }
                            }
                            break;
                        }

                        case Top:
                        {
                            if(sceneLocker(point))
                            {
                                if(tl.y() > br.y())
                                {
                                    _endY = point.y();
                                }
                                else
                                {
                                    _startY = point.y();
                                }
                            }
                            break;
                        }
                        case Bottom :
                        {
                            if(sceneLocker(point))
                            {
                                if(tl.y() > br.y())
                                {
                                    _startY = point.y();
                                }
                                else
                                {
                                    _endY = point.y();
                                }
                            }
                            break;
                        }
                        }
                        item->draw(startX(), startY(), endX(), endY());
                        currentScene->edge()->draw(startX(), startY(),
                                                   endX(), endY());
                        currentScene->update();

                        switch(_normalize)
                        {
                        case NormalizeLeft:
                        {

                            _startX = point.x();
                            _startY = point.y();
                            item->normalize(point.x(), point.y(),
                                            point.x() - rect().topLeft().x());
                            QRectF tmp = item->boundingRect();
                            currentScene->edge()->draw(tmp.topLeft().x(), tmp.topLeft().y(),
                                                       tmp.bottomRight().x(), tmp.bottomRight().y());
                            _startX = tmp.topLeft().x();
                            _startY = tmp.topLeft().y();
                            _endX = tmp.bottomRight().x();
                            _endY = tmp.bottomRight().y();

                            if(item->type() == Triangle::TriangleType::Type)
                            {
                                ((Triangle*)item)->normalizeFlag = true;
                                _startX = point.x();
                                _startY = point.y();
                            }
                            break;
                        }
                        }
                    }
                }
            }

            QPointF point = mapToScene(event->pos());
            if(event->buttons() & Qt::LeftButton && _direction == None
                    && _normalize == NormalizeNone)
            {
                preventOverBoundingOnDraw(point, _endX, _endY);

                if(shapeSet)
                {
                    currentScene->currentShape()->setPen(currentPen);
                    currentScene->currentShape()->draw(startX(), startY(), endX(), endY());
                    currentScene->update();
                    edgeLocker = true;
                }
            }
        }
        else if((event->buttons() & Qt::LeftButton) && isMoved
                && currentScene->currentShape()->type()
                != LineSegment::LineSegmentType::Type
                && (!currentScene->shapes.isEmpty()
                || !currentScene->lines.isEmpty()))
        {
            QRectF r = currentShape()->boundingRect();
            QPoint tmp = QPoint(event->pos().x() -
                                coordinatesIterationMove.x(),
                                event->pos().y() -
                                coordinatesIterationMove.y());

            preventOverBoundingOnMove(r, tmp);
            currentScene->currentShape()->setPen(currentPen);
            if(currentShape()->type() == Triangle::TriangleType::Type &&
                    ((Triangle *)currentShape())->normalizeFlag)
            {
                currentScene->currentShape()->normalize(startX(), startY(),
                                startX() - rect().topLeft().x());
            }
            else
            {
                currentScene->currentShape()->draw(startX(), startY(), endX(), endY());
            }

            if(!linesEnds.isEmpty())
            {
                for(auto i: linePointIndexes)
                {
                    preventOverBoundingOnDraw(linesEnds[linePointIndexes.indexOf(i)],
                            linesEnds[linePointIndexes.indexOf(i)].rx(),
                            linesEnds[linePointIndexes.indexOf(i)].ry());
                    linesEnds[linePointIndexes.indexOf(i)] += tmp;
                    currentScene->lines.at(i)->draw(linesStarts[linePointIndexes.indexOf(i)].x(),
                            linesStarts[linePointIndexes.indexOf(i)].y(),
                            linesEnds[linePointIndexes.indexOf(i)].x(),
                            linesEnds[linePointIndexes.indexOf(i)].y());
                }
            }

            currentScene->edge()->hide();
            currentScene->update();
            coordinatesIterationMove = event->pos();
        }
    }
    else
    {
        AbstractShape * tmp = currentShape();
        if(tmp->isUnderMouse())
        {
            setCursor(Qt::PointingHandCursor);
        }
        else
        {
            setCursor(Qt::CrossCursor);
        }
    }
}
示例#5
0
void Canvas::updateScene()
{
    currentShape()->setPen(currentPen);
    currentShape()->draw(startX(), startY(), endX(), endY());
    currentScene->update();
}
void MarbleGraphicsGridLayout::updatePositions( MarbleGraphicsItem *parent )
{
    // Initialize with 0.0
    QVector<double> maxWidth( d->m_columns, 0.0 );
    QVector<double> maxHeight( d->m_rows, 0.0 );

    // Determining the cell sizes
    for ( int row = 0; row < d->m_rows; row++ ) {
        for ( int column = 0; column < d->m_columns; column++ ) {
            if ( d->m_items[row][column] == 0 ) {
                continue;
            }

            QSizeF size = d->m_items[row][column]->size();
            double width = size.width();
            double height = size.height();

            if ( width > maxWidth[column] ) {
                maxWidth[column] = width;
            }
            if ( height > maxHeight[row] ) {
                maxHeight[row] = height;
            }
        }
    }

    QVector<double> startX( d->m_columns );
    QVector<double> endX( d->m_columns );
    QVector<double> startY( d->m_rows );
    QVector<double> endY( d->m_rows );
    QRectF contentRect = parent->contentRect();

    for ( int i = 0; i < d->m_columns; i++ ) {
        if ( i == 0 ) {
            startX[0] = contentRect.left();
        }
        else if ( maxWidth[i] == 0 ) {
            startX[i] = endX[i-1];
        }
        else {
            startX[i] = endX[i-1] + d->m_spacing;
        }

        endX[i] = startX[i] + maxWidth[i];
    }

    for ( int i = 0; i < d->m_rows; i++ ) {
        if ( i == 0 ) {
            startY[0] = contentRect.left();
        }
        else if ( maxHeight[i] == 0 ) {
            startY[i] = endY[i-1];
        }
        else {
            startY[i] = endY[i-1] + d->m_spacing;
        }

        endY[i] = startY[i] + maxHeight[i];
    }

    // Setting the positions
    for ( int row = 0; row < d->m_rows; row++ ) {
        for ( int column = 0; column < d->m_columns; column++ ) {
            if ( d->m_items[row][column] == 0 ) {
                continue;
            }

            double xPos, yPos;

            Qt::Alignment align = alignment( d->m_items[row][column] );

            if ( align & Qt::AlignRight ) {
                xPos = endX[column] - d->m_items[row][column]->size().width();
            }
            else if ( align & Qt::AlignHCenter ) {
                xPos = startX[column]
                       + ( maxWidth[column] - d->m_items[row][column]->size().width() ) / 2.0;
            }
            else {
                xPos = startX[column];
            }

            if ( align & Qt::AlignBottom ) {
                yPos = endY[row] - d->m_items[row][column]->size().height();
            }
            else if ( align & Qt::AlignVCenter ) {
                yPos = startY[row]
                       + ( maxHeight[row] - d->m_items[row][column]->size().height() ) / 2.0;
            }
            else {
                yPos = startY[row];
            }

            d->m_items[row][column]->setPosition( QPointF( xPos, yPos ) );
        }
    }

    parent->setContentSize( QSizeF( endX[d->m_columns - 1] - contentRect.left(),
                                    endY[d->m_rows - 1] - contentRect.top() ) );
}