Макрос для картинки [РЕШЕНО]

Автор Grif, 7 марта 2022, 11:55

0 Пользователи и 1 гость просматривают эту тему.

Grif

Приветствую, товарищи! Подскажите, пожалуйста, как мне в макросе повернуть выделенную картинку на 90 градусов против часовой стрелки и убрать на задний план?
Базовая задача - сделать кнопку либо хоткей, который выделенную картинку повернёт, задаст положение и размер, запнёт на задний план. С ресайзом проблем нет, с позиционированием тоже. Код этот я нагуглил, писал не сам, ибо не умею в скриптописание для LibreOffice, только цифирки подправил на нужные. А вменяемого описания работы с картинками в Draw вообще не нашёл. Вручную всё происходит нормально, но слишком долго, блин. У меня тут 400+ листов, карту к распечатке готовлю. И это не последняя, вот в чём беда.

UPD2
Полная победа. Из надёрганных кусков кода собрал рабочий скрипт. Выглядит он вот так:

REM  *****  BASIC  *****

sub ADJUSTROTATIONBYDEGREE (byval nDelta as long)
dim oDoc as variant: oDoc=thisComponent
dim sDocType as string: sDocType = oDoc.Identifier
dim oSelected as variant: oSelected = oDoc.getCurrentSelection
if oSelected.ImplementationName <> "com.sun.star.drawing.SvxShapeCollection" then exit sub
if oSelected.Count <> 1 then exit sub
dim oPicture as variant: oPicture = oSelected.getByIndex(0)
if oPicture.ShapeType <> "com.sun.star.drawing.GraphicObjectShape" then exit sub
rem Now it is sure, that an image in a spreadsheet is selected.
rem Angles are stored in 1/100 degree.
dim nOldAngle as long: nOldAngle = oPicture.RotateAngle
dim nNewAngle as long: nNewAngle = nOldAngle + nDelta
oPicture.RotateAngle = nNewAngle
dim dummy as integer: dummy=0: rem dummy line for setting a breadpoint.
end sub

Sub RotateMoveResizeGraphic
ADJUSTROTATIONBYDEGREE(9000)
Dim oCurrSel As Object
Dim oItem As Object
Dim aSize As New com.sun.star.awt.Size
Dim aPosition As New com.sun.star.awt.Point

oCurrSel = ThisComponent.getCurrentSelection()
If oCurrSel.ImplementationName = "com.sun.star.drawing.SvxShapeCollection" Then
oItem = oCurrSel.getByIndex(0)
aSize.width=19000
aSize.height=28000
oItem.setsize(aSize)
aPosition.X = 850
aPosition.Y = 20000
oItem.setposition(aPosition)
Else
MsgBox "Image not selected"
End If

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:SendToBack", "", 0, Array())

End Sub