コード例 #1
0
//--------------------------------------------------------------------------------------------------
/// Make the object a constant pixel size
//--------------------------------------------------------------------------------------------------
void FixedSizeTransform::updateWorldTransform(const cvf::Camera* camera)
{
    Transform::updateWorldTransform(camera);
    
    if (m_fixedPixelSizeModelUnits > 0.0)
    {
        cvf::Vec3d objectCenter(0,0,0);
        objectCenter.transformPoint(m_worldMatrix);

        double eyeDist = (objectCenter - camera->position())*camera->direction();

        if (eyeDist > 0)
        {
            double scaleFactor = 1.0;

            if (camera->projection() == Camera::PERSPECTIVE)
            {
                double nearPlane = camera->nearPlane();
                double frontPlanePixelHeigth = camera->frontPlanePixelHeight();
                scaleFactor = (fixedPixelSizeModelUnits()*frontPlanePixelHeigth*eyeDist)/nearPlane;
            }
            else
            {
                scaleFactor = camera->frontPlanePixelHeight();
            }

            Mat4d scaleMatrix = Mat4d::fromScaling(Vec3d(scaleFactor, scaleFactor, scaleFactor));
            m_worldMatrix = m_worldMatrix*scaleMatrix;
        }
    }
}
コード例 #2
0
QPointF EllipseObject::objectQuadrant270() const
{
    qreal halfH = objectHeight()/2.0;
    qreal rot = radians(rotation()+270.0);
    qreal x = halfH*qCos(rot);
    qreal y = halfH*qSin(rot);
    return objectCenter() + QPointF(x,y);
}
コード例 #3
0
QPointF EllipseObject::objectQuadrant180() const
{
    qreal halfW = objectWidth()/2.0;
    qreal rot = radians(rotation()+180.0);
    qreal x = halfW*qCos(rot);
    qreal y = halfW*qSin(rot);
    return objectCenter() + QPointF(x,y);
}
コード例 #4
0
// Returns the closest snap point to the mouse point
QPointF EllipseObject::mouseSnapPoint(const QPointF& mousePoint)
{
    QPointF center  = objectCenter();
    QPointF quad0   = objectQuadrant0();
    QPointF quad90  = objectQuadrant90();
    QPointF quad180 = objectQuadrant180();
    QPointF quad270 = objectQuadrant270();

    qreal cntrDist = QLineF(mousePoint, center).length();
    qreal q0Dist   = QLineF(mousePoint, quad0).length();
    qreal q90Dist  = QLineF(mousePoint, quad90).length();
    qreal q180Dist = QLineF(mousePoint, quad180).length();
    qreal q270Dist = QLineF(mousePoint, quad270).length();

    qreal minDist = qMin(qMin(qMin(q0Dist, q90Dist), qMin(q180Dist, q270Dist)), cntrDist);

    if     (minDist == cntrDist) return center;
    else if(minDist == q0Dist)   return quad0;
    else if(minDist == q90Dist)  return quad90;
    else if(minDist == q180Dist) return quad180;
    else if(minDist == q270Dist) return quad270;

    return scenePos();
}
コード例 #5
0
QList<QPointF> EllipseObject::allGripPoints()
{
    QList<QPointF> gripPoints;
    gripPoints << objectCenter() << objectQuadrant0() << objectQuadrant90() << objectQuadrant180() << objectQuadrant270();
    return gripPoints;
}
コード例 #6
0
ファイル: EP1.cpp プロジェクト: jtula/OpenCV-Calculator
int main(int argc, char ** argv) {

    std::cout.imbue(std::locale(""));
    char path[10], *method;
    method = argv[1];

    if(argc != 2) {

        usage(argv[0]);
    }

    if ( (strlen(method) != 1) || (method[0] != 't') && (method[0] != 'm') && (method[0] != 'c') ) {

        usage(argv[0]);
    }

    //configuration file
    Config conf("config.cfg");

    cv::namedWindow("calculator", CV_WINDOW_AUTOSIZE);

    //template pattern
    templ = cv::imread("./circulo.png");

    if(!templ.data ) {

        std::cout <<  "Could not open or find pattern" << std::endl ;
        return -1;
    }

    cv::Size size(90,90);
    cv::resize(templ,templ, size);

    try {

        cv::VideoCapture video(0);
        video.set(CV_CAP_PROP_FRAME_WIDTH, FRAME_WIDTH);
        video.set(CV_CAP_PROP_FRAME_HEIGHT, FRAME_HEIGHT);

        KeyManager * manager = new KeyManager(conf, FRAME_WIDTH, FRAME_HEIGHT);

        for(;;) {

            cv::Mat mirrow, frame, edge;
            cv::Point objectCenter(0,0);

            video >> mirrow;
            cv::flip(mirrow, frame, 1);

            int currentTime = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count();

            if(method[0]=='m') {

                cv::setMouseCallback("calculator", mousePosition, NULL);
            }
            else if(method[0]=='t') {

                std::vector<cv::Mat> refs, tpls, results;
                tplMatch(frame);
            }
            else if(method[0]=='c') {

                findWithContours(frame);
            }

            manager->update(currentTime, centerMouse);
            manager->draw(frame);

            bool quit = manager->getOutActive();

            cv::imshow("calculator", frame);
            if(cv::waitKey(30) >= 0 || quit) break;

        }
    }
    catch (cv::Exception e) {
        std::cout << "An exception has accurred: \n";
    }

    return(0);
}
コード例 #7
0
void CircleObject::gripEdit(const QPointF& before, const QPointF& after)
{
    if(before == objectCenter()) { QPointF delta = after-before; moveBy(delta.x(), delta.y()); }
    else                         { setObjectRadius(QLineF(objectCenter(), after).length()); }
}
コード例 #8
0
void CircleObject::updateRubber(QPainter* painter)
{
    int rubberMode = objectRubberMode();
    if(rubberMode == OBJ_RUBBER_CIRCLE_1P_RAD)
    {
        QPointF sceneCenterPoint = objectRubberPoint("CIRCLE_CENTER");
        QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_RADIUS");
        QPointF itemCenterPoint = mapFromScene(sceneCenterPoint);
        QPointF itemQSnapPoint = mapFromScene(sceneQSnapPoint);
        QLineF itemLine(itemCenterPoint, itemQSnapPoint);
        setObjectCenter(sceneCenterPoint);
        QLineF sceneLine(sceneCenterPoint, sceneQSnapPoint);
        qreal radius = sceneLine.length();
        setObjectRadius(radius);
        if(painter) drawRubberLine(itemLine, painter, VIEW_COLOR_CROSSHAIR);
        updatePath();
    }
    else if(rubberMode == OBJ_RUBBER_CIRCLE_1P_DIA)
    {
        QPointF sceneCenterPoint = objectRubberPoint("CIRCLE_CENTER");
        QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_DIAMETER");
        QPointF itemCenterPoint = mapFromScene(sceneCenterPoint);
        QPointF itemQSnapPoint = mapFromScene(sceneQSnapPoint);
        QLineF itemLine(itemCenterPoint, itemQSnapPoint);
        setObjectCenter(sceneCenterPoint);
        QLineF sceneLine(sceneCenterPoint, sceneQSnapPoint);
        qreal diameter = sceneLine.length();
        setObjectDiameter(diameter);
        if(painter) drawRubberLine(itemLine, painter, VIEW_COLOR_CROSSHAIR);
        updatePath();
    }
    else if(rubberMode == OBJ_RUBBER_CIRCLE_2P)
    {
        QPointF sceneTan1Point = objectRubberPoint("CIRCLE_TAN1");
        QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_TAN2");
        QLineF sceneLine(sceneTan1Point, sceneQSnapPoint);
        setObjectCenter(sceneLine.pointAt(0.5));
        qreal diameter = sceneLine.length();
        setObjectDiameter(diameter);
        updatePath();
    }
    else if(rubberMode == OBJ_RUBBER_CIRCLE_3P)
    {
        QPointF sceneTan1Point = objectRubberPoint("CIRCLE_TAN1");
        QPointF sceneTan2Point = objectRubberPoint("CIRCLE_TAN2");
        QPointF sceneTan3Point = objectRubberPoint("CIRCLE_TAN3");

        double sceneCenterX;
        double sceneCenterY;
        getArcCenter(sceneTan1Point.x(), sceneTan1Point.y(),
                     sceneTan2Point.x(), sceneTan2Point.y(),
                     sceneTan3Point.x(), sceneTan3Point.y(),
                     &sceneCenterX, &sceneCenterY);
        QPointF sceneCenterPoint(sceneCenterX, sceneCenterY);
        QLineF sceneLine(sceneCenterPoint, sceneTan3Point);
        setObjectCenter(sceneCenterPoint);
        qreal radius = sceneLine.length();
        setObjectRadius(radius);
        updatePath();
    }
    else if(rubberMode == OBJ_RUBBER_GRIP)
    {
        if(painter)
        {
            QPointF gripPoint = objectRubberPoint("GRIP_POINT");
            if(gripPoint == objectCenter())
            {
                painter->drawEllipse(rect().translated(mapFromScene(objectRubberPoint(QString()))-mapFromScene(gripPoint)));
            }
            else
            {
                qreal gripRadius = QLineF(objectCenter(), objectRubberPoint(QString())).length();
                painter->drawEllipse(QPointF(), gripRadius, gripRadius);
            }

            QLineF rubLine(mapFromScene(gripPoint), mapFromScene(objectRubberPoint(QString())));
            drawRubberLine(rubLine, painter, VIEW_COLOR_CROSSHAIR);
        }
    }
}