# rubberbox

растягиваемая рамка для прямоугольного выделения

## Последовательность вызова

                [final_rect, btn] = rubberbox()
                [final_rect, btn] = rubberbox(initial_rect)
                [final_rect, btn] = rubberbox(edition_mode)
                [final_rect, btn] = rubberbox(initial_rect, edition_mode)

## Аргументы

initial_rect

  вектор с двумя или четырьмя элементами. С четырьмя элементами он даёт исходный прямоугольник, определяемый в виде `[x_min, y_max, width, height]`, где `x_min` и `y_max` - координаты начального угла, `width` - ширина и `height` - высота; если элементов два, то ширина и высота предполагаются нулевыми.

edition_mode

  логическое значение, режим редактирования. Если `edition_mode` равно `%t`, то нажатие на кнопку выбирает первый угол, отпуск кнопки выбирает противоположный угол. Если `edition_mode` равен `%f`, то нажатие на кнопку или щелчок выбирает первый угол, для выбора противоположного угла необходимо щёлкнуть ещё раз. Значение по умолчанию равно `%f`.

final_rect

  прямоугольник, определяемый как `[x_min, y_max, width, height]` ,где `x_min` и `y_max` - координаты начального угла, `width` - ширина и `height` - высота.

btn

  целое число, количество щелчков кнопкой мыши.

## Описание

`rubberbox(initial_rect)` тянет растягиваемую рамку в текущем графическом окне, следуя за мышью. При щелчке мышью `rubberbox` возвращает определение конечного прямоугольника в `final_Rect`. Если аргумент `initial_rect` не определён, то для фиксации положения начального угла необходим щелчок мыши.

## Примеры

    clf
    plot2d()
    a = gca();
    db = a.data_bounds;
    x0 = (db(1)*2+db(2))/3;
    dx = (db(2)-db(1))/3;
    y0 = (db(3)+db(4)*2)/3;
    dy = (db(4)-db(3))/3;
    xtitle(msprintf("С исходным начальным углом: x0 = %0.2f, y0 = %0.2f",x0,y0))
    r = rubberbox([x0 y0])

    clf
    plot2d()
    a = gca();
    db = a.data_bounds;
    x0 = (db(1)*2+db(2))/3;
    dx = (db(2)-db(1))/3;
    y0 = (db(3)+db(4)*2)/3;
    dy = (db(4)-db(3))/3;
    xtitle(msprintf("С исходной рамкой: x0 = %0.2f, y0 = %0.2f, ширина = %0.2f, высота = %0.2f,",x0-dx/4,y0+dy/5,2*dx,dy))
    r = rubberbox([x0-dx/4 y0+dy/5 2*dx dy])

    clf
    plot2d()
    a = gca();
    db = a.data_bounds;
    x0 = (db(1)*2+db(2))/3;
    dx = (db(2)-db(1))/3;
    y0 = (db(3)+db(4)*2)/3;
    dy = (db(4)-db(3))/3;
    xtitle("Режим выбора: нажать -- тащить -- отпустить")
    r = rubberbox(%t)

    clf
    plot2d()
    a = gca();
    db = a.data_bounds;
    x0 = (db(1)*2+db(2))/3;
    dx = (db(2)-db(1))/3;
    y0 = (db(3)+db(4)*2)/3;
    dy = (db(4)-db(3))/3;
    xtitle("Режим выбора: щёлкнуть -- тащить -- щёлкнуть")
    r = rubberbox()

## Смотрите также

- xrect
- xrects
- xclick
- xgetmouse
- dragrect