Beispiel #1
0
    void on_lbutton_end_drag(viewport::control& Viewport, const GdkEventButton& Event)
    {
        k3d::rectangle selection_rectangle;
        if(k3d::inode* const rubber_band = k3d::ngui::selection::state(m_document_state.document()).rubber_band())
        {
            selection_rectangle = k3d::property::pipeline_value<k3d::rectangle>(*rubber_band, "rectangle");
            selection_rectangle.y1 = Viewport.get_height() - selection_rectangle.y1;
            selection_rectangle.y2 = Viewport.get_height() - selection_rectangle.y2;
            k3d::property::set_internal_value(*rubber_band, "camera", static_cast<k3d::inode*>(0));
        }

        k3d::icrop_window* const crop_window = dynamic_cast<k3d::icrop_window*>(Viewport.camera());
        return_if_fail(crop_window);

        const k3d::rectangle box = k3d::rectangle::normalize(selection_rectangle);
        const k3d::point2 top_left = widget_to_ndc(Viewport, k3d::point2(box.x1, box.y1));
        const k3d::point2 bottom_right = widget_to_ndc(Viewport, k3d::point2(box.x2, box.y2));

        k3d::record_state_change_set change_set(m_document_state.document(), _("Set Camera Crop Window"), K3D_CHANGE_SET_CONTEXT);

        const double left = top_left[0];
        const double right = bottom_right[0];
        const double top = top_left[1];
        const double bottom = bottom_right[1];

        k3d::property::set_internal_value(crop_window->crop_left(), left);
        k3d::property::set_internal_value(crop_window->crop_right(), right);
        k3d::property::set_internal_value(crop_window->crop_top(), top);
        k3d::property::set_internal_value(crop_window->crop_bottom(), bottom);
    }
Vector2i MouseCoordinatesTracker::widget_to_pixel(const QPoint& point) const
{
    const Vector2d ndc = widget_to_ndc(point);

    return
        Vector2i(
            static_cast<int>(ndc.x * m_content_width),
            static_cast<int>(ndc.y * m_content_height));
}
void MouseCoordinatesTracker::set_label_text(const QPoint& point) const
{
    const Vector2i pix = widget_to_pixel(point);
    const Vector2d ndc = widget_to_ndc(point);

    m_label->setText(
        QString("Pixel: %1, %2  -  NDC: %3, %4")
        .arg(QString::number(pix.x))
        .arg(QString::number(pix.y))
        .arg(QString::number(ndc.x, 'f', 5))
        .arg(QString::number(ndc.y, 'f', 5)));
}
Beispiel #4
0
    void on_lbutton_double_click(viewport::control& Viewport, const GdkEventButton& Event)
    {
        // If the user double-clicks outside the current crop window, reset it to render the entire frame ...
        k3d::icrop_window* const crop_window = dynamic_cast<k3d::icrop_window*>(Viewport.camera());
        if(crop_window)
        {
            const k3d::rectangle window(
                k3d::property::pipeline_value<double>(crop_window->crop_left()),
                k3d::property::pipeline_value<double>(crop_window->crop_right()),
                k3d::property::pipeline_value<double>(crop_window->crop_top()),
                k3d::property::pipeline_value<double>(crop_window->crop_bottom())
            );

            if(!window.contains(widget_to_ndc(Viewport, k3d::point2(Event.x, Event.y))))
            {
                k3d::record_state_change_set change_set(m_document_state.document(), _("Reset Camera Crop Window"), K3D_CHANGE_SET_CONTEXT);
                k3d::property::set_internal_value(crop_window->crop_left(), 0.0);
                k3d::property::set_internal_value(crop_window->crop_right(), 1.0);
                k3d::property::set_internal_value(crop_window->crop_top(), 0.0);
                k3d::property::set_internal_value(crop_window->crop_bottom(), 1.0);

                return;
            }
        }

        // Otherwise, render a preview ...
        k3d::icamera* camera = Viewport.camera();
        if(!camera)
            camera = pick_camera(m_document_state);
        if(!camera)
            return;

        k3d::irender_camera_preview* render_engine = Viewport.camera_preview_engine();
        if(!render_engine)
            render_engine = pick_camera_preview_render_engine(m_document_state);
        if(!render_engine)
            return;

        Viewport.set_camera(camera);
        Viewport.set_camera_preview_engine(render_engine);

        render(*camera, *render_engine);
    }