Skip to content
Snippets Groups Projects
petrack.cpp 178 KiB
Newer Older
  • Learn to ignore specific revisions
  • d.kilic's avatar
    d.kilic committed
            if( mControlWidget->trackShowOnlyList->checkState() == Qt::Checked)
            {
    
                QStringList list = mControlWidget->trackShowOnlyNrList->text().split(",", Qt::SkipEmptyParts);
    
    d.kilic's avatar
    d.kilic committed
                QSet<int> onlyVisible;
                foreach(QString s, list)
                {
                    bool ok = false;
                    int nr = s.toInt(&ok);
                    if(ok/* && nr <= maxPed && nr > 0*/) // einzelne ID
                        onlyVisible.insert(nr-1);
                    else // error or IDs range (e.g. 1-3, 6-10, etc.)
                    {
    
                        QStringList range = s.split("-", Qt::SkipEmptyParts);
    
    d.kilic's avatar
    d.kilic committed
                        int last,first = range[0].toInt(&ok);
    
                        if(ok/* && first <= maxPed && nr > 0*/)
                        {
                            last = range[1].toInt(&ok);
                            if(ok/* && last <= maxPed && nr > 0*/)
                            {
                                if(first>last)
                                    std::swap(first,last);
    
                                for(int i=first;i<=last;i++)
                                    onlyVisible.insert(i-1);
                            }
                        }
    
                    }
                    if(!ok)
                        debout << "Warning: error while reading showOnlyVisible list from input line!" << endl;
                }
                return onlyVisible;//QSet<int>() << mControlWidget->trackShowOnlyNr->text().split(",").toSet(); //in anzeige wird ab 1 gezaehlt, in datenstruktur ab 0
    
            }else // if(ControlWidget->trackShowOnly->checkState() == Qt::Checked) //
            {
                QSet<int> onlyVisible;
                onlyVisible.insert(mControlWidget->trackShowOnlyNr->value()-1);
                return onlyVisible;
            }
        }else
            return QSet<int>();
    }
    
    void Petrack::addManualTrackPointOnlyVisible(QPointF pos)
    {
        int pers = addManualTrackPoint(pos)+1;
        if (pers == 0)
            pers = mTracker->size()+1;
        pers = mControlWidget->trackShowOnlyNr->maximum();
        mControlWidget->trackShowOnlyNr->setValue(pers);
    //    mControlWidget->trackShowOnlyNr->setText(QString::number(pers));
        mControlWidget->trackShowOnly->setChecked(true);
    }
    
    void Petrack::updateControlWidget()
    {
        mControlWidget->trackNumberAll->setText(QString("%1").arg(mTracker->size()));
        mControlWidget->trackShowOnlyNr->setMaximum(MAX(mTracker->size(),1));
        mControlWidget->trackNumberVisible->setText(QString("%1").arg(mTracker->visible(mAnimation->getCurrentFrameNum())));
    }
    
    //void Petrack::showContextMenu(QPointF pos)
    //{
    //    QMenu menu(this);
    //    menu.addAction(mDelPastAct);
    //    menu.addAction(mDelFutureAct);
    //    menu.addAction(mDelAllRoiAct);
    //    menu.exec(pos.toPoint());
    //}
    
    void Petrack::splitTrackPerson(QPointF pos)
    {
        mTracker->splitPersonAt((Vec2F) pos, mAnimation->getCurrentFrameNum(), getOnlyVisible());
        updateControlWidget();
    }
    
    int Petrack::addManualTrackPoint(QPointF pos) //const QPoint &pos
    {
        int pers = -1;
        TrackPoint tP((Vec2F) pos, 110); // 110 ist ueber 100 (hoechste Qualitaetsstufe) und wird nach einfuegen auf 100 gesetzt
        // so kann aber ein punkt immer angepasst werden
        mTracker->addPoint(tP, mAnimation->getCurrentFrameNum(), getOnlyVisible(), &pers);
        updateControlWidget();
        return pers;
    }
    
    // direction zeigt an, ob bis zum aktuellen (-1), ab dem aktuellen (1) oder ganzer trackpath (0)
    // loeschen von Trackpoints einer Trajektorie
    void Petrack::deleteTrackPoint(QPointF pos, int direction) //const QPoint &pos
    {
        mTracker->delPoint((Vec2F) pos, direction, mAnimation->getCurrentFrameNum(), getOnlyVisible());
        updateControlWidget();
    }
    void Petrack::editTrackPersonComment(QPointF pos)
    {
    
        mTracker->editTrackPersonComment((Vec2F) pos, mAnimation->getCurrentFrameNum(), getOnlyVisible());
        updateControlWidget();
    }
    void Petrack::setTrackPersonHeight(QPointF pos)
    {
        mTracker->setTrackPersonHeight((Vec2F) pos, mAnimation->getCurrentFrameNum(), getOnlyVisible());
        updateControlWidget();
    }
    void Petrack::resetTrackPersonHeight(QPointF pos)
    {
        mTracker->resetTrackPersonHeight((Vec2F) pos, mAnimation->getCurrentFrameNum(), getOnlyVisible());
        updateControlWidget();
    }
    
    // direction zeigt an, ob bis zum aktuellen (-1), ab dem aktuellen (1) oder ganzer trackpath (0)
    // loeschen von Trackpoints aller Trajektorien
    void Petrack::deleteTrackPointAll(int direction) //const QPoint &pos
    {
        mTracker->delPointAll(direction, mAnimation->getCurrentFrameNum());
        updateControlWidget();
    }
    
    void Petrack::deleteTrackPointROI()
    {
        mTracker->delPointROI();
        updateControlWidget();
        mScene->update();
    }
    
    void Petrack::deleteTrackPointInsideROI()
    {
        mTracker->delPointInsideROI();
        updateControlWidget();
        mScene->update();
    }
    void Petrack::updateSourceInOutFrames()
    {
        mPlayerWidget->setFrameInNum(mAnimation->getSourceInFrameNum());
        mPlayerWidget->setFrameOutNum(mAnimation->getSourceOutFrameNum());    
    }
    
    // delta gibt menge an Umdrehungen und richtung an
    void Petrack::skipToFrameWheel(int delta)
    {
        mPlayerWidget->skipToFrame(mPlayerWidget->getPos()+delta);
    }
    
    
    #include "moc_petrack.cpp"