コード例 #1
0
ファイル: stitcherworkspace.cpp プロジェクト: ng110/hawk
void StitcherWorkspace::onLoadGeometryClicked() {
    QString file = QFileDialog::getOpenFileName(0,tr("Load Geometry from File"), QString(),  tr("Image Geometry (*.hig)"));
    if(file.isEmpty()) {
        return;
    }
    QFile fp(file);
    if(!fp.open(QIODevice::ReadOnly)) {
        return;
    }
    QList<QGraphicsItem *> graphicsItems = _stitcherView->items();
    QTextStream in(&fp);
    QString dumb;
    int nImages;
    in >> dumb >> dumb  >> nImages;
    for(int i = 0; i<nImages; i++) {
        QString id;
        double dx,dy,dz,theta;
        in >> dumb >> id;
        ImageItem * item = NULL;
        for(int j = 0; j < graphicsItems.size(); j++) {
            item = qgraphicsitem_cast<ImageItem *>(graphicsItems[j]);
            if(item && item->identifier() == id) {
                break;
            } else {
                item = NULL;
            }
        }
        in >> dumb >> dx;
        in >> dumb >> dy;
        in >> dumb >> dz;
        in >> dumb >> theta;
        if(item) {
            item->setDx(dx);
            item->setDy(dy);
            item->setDz(dz);
            item->setTheta(theta);
        }
    }
    fp.close();
    loadGeometry();
}
コード例 #2
0
ファイル: stitcherworkspace.cpp プロジェクト: ng110/hawk
void StitcherWorkspace::onLoadControlPointsClicked() {
    QString file = QFileDialog::getOpenFileName(0,tr("Load Control Points from File"), QString(),  tr("Image Control Points (*.hicp)"));
    if(file.isEmpty()) {
        return;
    }
    QFile fp(file);
    if(!fp.open(QIODevice::ReadOnly)) {
        return;
    }
    QList<QGraphicsItem *> graphicsItems = _stitcherView->items();
    QTextStream in(&fp);
    QString dumb;
    int nImages;
    in >> dumb >> dumb  >> nImages;
    for(int i = 0; i<nImages; i++) {
        QString id;
        double dx,dy;
        in >> dumb >> id;
        ImageItem * item = NULL;
        for(int j = 0; j < graphicsItems.size(); j++) {
            item = qgraphicsitem_cast<ImageItem *>(graphicsItems[j]);
            if(item && item->identifier() == id) {
                break;
            } else {
                item = NULL;
            }
        }
        int nPoints;
        in >> dumb >> dumb  >> nPoints;
        for(int j = 0; j<nPoints; j++) {
            in >> dumb >> dx;
            in >> dumb >> dy;
            if(item) {
                item->addControlPoint(QPointF(dx,dy));
            }
        }
    }
    fp.close();
}
コード例 #3
0
ファイル: stitcherworkspace.cpp プロジェクト: ng110/hawk
void StitcherWorkspace::loadGeometry() {
    /*
       This is a prefix to distinguish Hawk Geometry properties from the
       normal widget properties
    */
    const QString tag("HawkGeometry_");
    QList<QGraphicsItem *> ii  = _stitcherView->items();
    QMap<QString,ImageItem *> sortMap;
    for(int i = 0; i<ii.size(); i++) {
        if(ImageItem * imageItem = qgraphicsitem_cast<ImageItem *>(ii[i])) {
            if(imageItem->isVisible()) {
                sortMap.insert(imageItem->identifier(),imageItem);
            }
        }
    }
    QList<ImageItem *>sortedItems = sortMap.values();
    QStandardItemModel * model = qobject_cast<QStandardItemModel *>(geometryTree->model());
    model->clear();
    model->setHorizontalHeaderLabels(QStringList() << "Parameter" << "Value" << "Locked");

    for(int i = 0; i<sortedItems.size(); i++) {
        ImageItem * imageItem = sortedItems[i];
        const QMetaObject *metaobject =  imageItem->metaObject();
        int count = metaobject->propertyCount();
        QStandardItem * itemName = new QStandardItem(imageItem->identifier());
        QStandardItem * itemValue = new QStandardItem();
        QStandardItem * itemLocked = new QStandardItem();
        itemLocked->setFlags(itemLocked->flags() & ~Qt::ItemIsEditable);
        QStandardItem *parentItem = model->invisibleRootItem();
        itemName->setFlags(itemName->flags() & ~Qt::ItemIsEditable);
        itemValue->setFlags(itemValue->flags() & ~Qt::ItemIsEditable);
        if(model->findItems(itemName->text()).empty()) {
            parentItem->appendRow(QList<QStandardItem *>() << itemName <<  itemValue << itemLocked);
            parentItem = itemName;
        } else {
            parentItem = model->findItems(itemName->text()).first();
        }
        for (int j=0; j<count; ++j) {
            QMetaProperty metaproperty = metaobject->property(j);
            const char *name = metaproperty.name();
            if(!QString(name).startsWith(tag)) {
                continue;
            }
            QVariant var =  imageItem->property(name);
            Qt::ItemFlags itemValueFlags = Qt::ItemIsSelectable|Qt::ItemIsEnabled;
            if(metaproperty.isWritable()) {
                itemValueFlags |= Qt::ItemIsEditable;
            }
            if(var.type() == QVariant::Double) {
                double value = var.toDouble();
                if(QString(name).endsWith("_theta") || QString(name).endsWith("_alpha")) {
                    /* convert to degrees */
                    value *= 180/M_PI;
                }
                if(QString(name).endsWith("_dy")) {
                    /* swap axis */
                    value = -value;
                }
                QStandardItem * itemName = new QStandardItem(_stitcherView->propertyNameToDisplayName(name,tag));
                QStandardItem * itemValue = new QStandardItem(QString("%0").arg(value));
                itemValue->setData(value,Qt::UserRole + 1);
                itemValue->setData(QString(name),Qt::UserRole + 2);
                itemValue->setData(QVariant::fromValue(imageItem),Qt::UserRole + 3);
                itemName->setFlags(itemName->flags() & ~Qt::ItemIsEditable);
                itemValue->setFlags(itemValueFlags);
                QStandardItem * itemLocked = new QStandardItem();
                itemLocked->setFlags(itemLocked->flags() & ~Qt::ItemIsEditable);
                /* check for lock property */
                QString lockedPropertyName = name + QString("_locked");
                if(imageItem->property(lockedPropertyName.toAscii().data()).isValid()) {
                    bool locked = imageItem->property(lockedPropertyName.toAscii().data()).toBool();
                    itemLocked->setCheckable(true);
                    itemLocked->setData(locked,Qt::UserRole + 1);
                    itemLocked->setData(QString(lockedPropertyName),Qt::UserRole + 2);
                    itemLocked->setData(QVariant::fromValue(imageItem),Qt::UserRole + 3);
                    if(locked) {
                        itemLocked->setCheckState(Qt::Checked);
                        itemValue->setEnabled(false);
                    }
                }
                /* Temporarily disable Dz and Alpha */
                if(itemName->text() == "Dz" ||
                        itemName->text() == "Alpha") {
                    itemLocked->setCheckState(Qt::Checked);
                    itemName->setEnabled(false);
                    itemValue->setEnabled(false);
                    itemLocked->setEnabled(false);
                    itemName->setToolTip("Currently disabled");
                    itemValue->setToolTip("Currently disabled");
                    itemLocked->setToolTip("Currently disabled");
                }
                parentItem->appendRow(QList<QStandardItem *>() << itemName << itemValue << itemLocked);
            }
        }
    }
    geometryTree->expandAll();
    geometryTree->resizeColumnToContents(0);
    geometryTree->sortByColumn(0,Qt::AscendingOrder);
}