Работа со встроенными объектами
Работа со встроенными объектами для текстовых и табличных документов различается, поэтому описания вставки и перечисления объектов описаны в отдельных разделах:
В данном разделе описаны общие методы работы со встроенными объектами, одинаковые для текстовых и табличных документов.
1. Получение размеров
Размеры встроенного объекта могут быть получены из объектов InlineFrame или AbsoluteFrame, которые, в свою очередь, могут быть получены посредством использования методов MediaObject::getFrame(), Image::getFrame(), Chart::getFrame(), Shape::getFrame(), TextBox::getFrame() (см раздел Frame).
if (InlineFrame* inlineFrame = boost::variant2::get_if<InlineFrame>(&frame))
{
std::printf("%d", inlineFrame->getDimensions().get().height);
}
else if (AbsoluteFrame* absoluteFrame = boost::variant2::get_if<AbsoluteFrame>(&frame))
{
std::printf("%d", absoluteFrame->getDimensions().get().height);
}
2. Получение текущей позиции
С помощью методов InlineFrame::getPosition(), AbsoluteFrame::getTopLeft() можно получить текущую позицию объекта.
if (InlineFrame* inlineFrame = boost::variant2::get_if<InlineFrame>(&frame))
{
std::printf("%d", inlineFrame->getPosition().get().horizontal);
}
else if (AbsoluteFrame* absoluteFrame = boost::variant2::get_if<AbsoluteFrame>(&frame))
{
std::printf("%d", absoluteFrame->getTopLeft().get().x);
}
3. Установка размеров
С помощью методов InlineFrame::setDimensions(), AbsoluteFrame::setDimensions() можно изменить размеры встроенных объектов
auto size = Size<float>(50.0, 50.0);
if (InlineFrame* inlineFrame = boost::variant2::get_if<InlineFrame>(&frame))
{
inlineFrame->setDimensions(size);
}
else if (AbsoluteFrame* absoluteFrame = boost::variant2::get_if<AbsoluteFrame>(&frame))
{
absoluteFrame->setDimensions(size);
}
4. Установка позиции
Для объекта AbsoluteFrame используется метод AbsoluteFrame::moveTo()
if (AbsoluteFrame* absoluteFrame = boost::variant2::get_if<AbsoluteFrame>(&frame))
{
Point<Unit> position = Point<Unit> position(50, 50);
absoluteFrame->moveTo(position);
}
Для объекта InlineFrame используется метод InlineFrame::setPosition(). Примеры использования с различными параметрами приведены в разделе описании метода.
5. Масштабирование размеров
Для объекта AbsoluteFrame используется метод AbsoluteFrame::scale()
if (AbsoluteFrame* absoluteFrame = boost::variant2::get_if<AbsoluteFrame>(&frame))
{
absoluteFrame->scale(100, 100, ScaleFrom::TopLeft);
}
6. Установка обтекания текстом
Для InlineFrame вариант обтекания текстом графического объекта TextWrapType может быть задан посредством использованием метода InlineFrame::setWrapType().
inlineFrame->setWrapType(TextWrapType::Inline);
7. Вращение и отражение объектов
Следующие возможности предусмотрены только для объектов Shape и TextBox.
Для данных объектов могут быть заданы угол вращения и вертикальное / горизонтальное отражение посредством использования методов Shape::setGeometryProperties(), TextBox::setGeometryProperties().
GeometryProperties geometryProperties = shape.getGeometryProperties();
geometryProperties.rotation = 45.0;
geometryProperties.horizontalFlip = true;
geometryProperties.verticalFlip = false;
shape.setGeometryProperties(geometryProperties);
geometryProperties = textBox.getGeometryProperties();
geometryProperties.rotation = 45.0;
geometryProperties.horizontalFlip = true;
geometryProperties.verticalFlip = false;
textBox.setGeometryProperties(geometryProperties);
Метод Image::getGeometryProperties вернет геометрические свойства изображения.
Метод Image::setGeometryProperties в данный момент не реализован и вызовет исключение NotImplementedError.