Guide de programmation de StarOffice 8 pour BASIC
  Procure somente este livro
Fazer download desta apostila em PDF (1328 KB)

Chapitre 8 Dessins et présentations

Ce chapitre propose une introduction à la création et à l'édition de dessins à partir de macros. La première section décrit la structure des dessins, et notamment les éléments de base contenus dans les dessins. La seconde section concerne les fonctions d'édition plus complexes, comme le groupement, la rotation et la mise à l'échelle d'objets.

Vous trouverez des informations sur la création, l'ouverture et l'enregistrement de dessins dans le chapitre 5, Utilisation de documents StarOffice.

Structure des dessins

StarOffice ne limite pas le nombre de pages que peut contenir un dessin. Vous pouvez concevoir chaque page séparément. Il n'y a pas de limite non plus sur le nombre d'éléments de dessin que vous pouvez ajouter à une page.

La présence de couches rend la situation légèrement plus complexe. Par défaut, chaque document contient les couches Mise en page, Contrôles et Lignes de cote. Tous les éléments de dessin sont ajoutés à la couche Mise en page. Vous avez également la possibilité d'ajouter de nouvelles couches. Pour plus d'informations sur les couches de dessin, reportez-vous au StarOffice Developer's Guide (Guide du développeur).

Pages

Les pages d'un dessin sont disponibles via la liste DrawPages. Vous pouvez accéder aux différentes pages soit par leur numéro, soit par leur nom. Si un document contient une seule page, nommée Slide 1, les exemples suivants seront équivalents.

Exemple 1 :

Dim Doc As Object
Dim Page As Object

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

Exemple 2 :

Dim Doc As Object
Dim Page As Object

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages.getByName("Slide 1")

Dans le premier exemple, on accède à la page par son numéro (la numérotation commençant à 0). Dans le second, on y accède par son nom et par la méthode getByName.

Dim sUrl As String, sFilter As String
Dim sOptions As String
Dim oSheets As Object, oSheet As Object

   oSheets = oDocument.Sheets

   If oSheets.hasByName("Link") Then
      oSheet = oSheets.getByName("Link")
   Else
      oSheet = oDocument.createInstance("com.sun.star.sheet.Spreadsheet")
      oSheets.insertByName("Link", oSheet)
      oSheet.IsVisible = False
   End If

L'appel ci-dessus renvoie un objet Page prenant en charge le service com.sun.star.drawing.DrawPage. Ce service reconnaît les propriétés suivantes :

  • BorderLeft (Long) : bordure gauche en centièmes de millimètre.

  • BorderRight (Long) : bordure droite en centièmes de millimètre.

  • BorderTop (Long) : bordure supérieure en centièmes de millimètre.

  • BorderBottom (Long) : bordure inférieure en centièmes de millimètre.

  • Width (Long) : largeur de page en centièmes de millimètre.

  • Height (Long) : hauteur de page en centièmes de millimètre.

  • Number (Short) : nombre de pages (la numérotation commençant à 1), en lecture seule.

  • Orientation (Enum) : orientation de la page correspondant à l'énumération com.sun.star.view.PaperOrientation.

En cas de modification de ces paramètres, toutes les pages du document seront affectées.

Dans l'exemple suivant, la taille de page du dessin qui vient d'être ouvert est définie sur 20 × 20 centimètres, avec une marge de 0,5 centimètre :

Dim Doc As Object
Dim Page As Object

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

Page.BorderLeft = 500
Page.BorderRight = 500
Page.BorderTop = 500
Page.BorderBottom = 500

Page.Width = 20000
Page.Height = 20000

Propriétés élémentaires des objets de dessin

Les objets de dessin comprennent des formes (rectangles, cercles, etc.), des lignes et des objets texte. Ils partagent tous un certain nombre de caractéristiques communes et prennent en charge le service com.sun.star.drawing.Shape. Ce service définit les propriétés Size et Position d'un objet de dessin.

StarOffice Basic propose également plusieurs autres services permettant de modifier ces propriétés, en appliquant du formatage ou des remplissages par exemple. Les options de formatage disponibles dépendent du type d'objet de dessin.

L'exemple suivant crée et insère un rectangle dans un dessin :

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

Page.add(RectangleShape)

Cet exemple utilise l'appel StarDesktop.CurrentComponent pour déterminer quel document est ouvert. L'objet Document déterminé de cette manière renvoie la première page du dessin via l'appel drawPages(0).

Les structures Point et Size contenant le point d'origine (angle gauche) et la taille de l'objet de dessin sont ensuite initialisées. Les longueurs sont spécifiées en centièmes de millimètre.

Le code du programme utilise ensuite l'appel Doc.createInstance pour créer l'objet de dessin rectangulaire tel qu'il a été spécifié par le service com.sun.star.drawing.RectangleShape. L'objet de dessin est ensuite assigné à une page avec un appel Page.add.

Propriétés de remplissage

Cette section décrit quatre services et, pour chacun, l'exemple de code utilise un élément de forme rectangulaire associé à différents types de formatage. Les propriétés de remplissage sont associées dans le service com.sun.star.drawing.FillProperties.

Au moment de remplir une zone, StarOffice reconnaît quatre types de formatage principaux. Le cas le plus simple est celui d'un remplissage uni. Les options définissant des dégradés de couleurs et des hachures permettent de faire appel à d'autres couleurs. Le quatrième cas de figure consiste à projeter des images existantes dans la zone à remplir.

Le mode Remplissage d'un objet de dessin se définit avec la propriété FillStyle. Les valeurs autorisées sont définies dans com.sun.star.drawing.FillStyle.

Remplissages unis

La principale propriété des remplissages unis est :

  • FillColor (Long) : couleur de remplissage de la zone.

Pour utiliser le mode Remplissage, vous devez définir la propriété FillStyle sur le mode de Remplissage SOLID.

L'exemple suivant crée une forme rectangulaire et la remplit de rouge (valeur RVB 255, 0, 0) :

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID
RectangleShape.FillColor = RGB(255,0,0)

Page.add(RectangleShape)

Dégradé de couleurs

Si vous définissez la propriété FillStyle sur GRADIENT, vous pourrez appliquer un dégradé de couleurs à toutes les zones à remplir dans un document StarOffice.

Pour appliquer un dégradé de couleurs prédéfini, il suffit d'assigner le nom associé de la propriété FillTransparenceGradientName. Pour définir votre propre dégradé de couleurs, vous devez constituer une structure com.sun.star.awt.Gradient afin d'assigner la propriété FillGradient. Cette propriété propose les options suivantes :

  • Style (Enum) : type de dégradé (linéaire ou radial, par exemple), avec des valeurs par défaut correspondant à com.sun.star.awt.GradientStyle.

  • StartColor (Long) : couleur de début du dégradé de couleurs.

  • EndColor (Long) : couleur de fin du dégradé de couleurs.

  • Angle (Short) : angle du dégradé de couleurs en dixièmes de degré.

  • XOffset (Short) : coordonnée X correspondant au point de départ du dégradé de couleurs, exprimé en centièmes de millimètre.

  • YOffset (Short) : coordonnée Y correspondant au point de départ du dégradé de couleurs, exprimé en centièmes de millimètre.

  • StartIntensity (Short) : intensité de StartColor exprimée en pourcentage (dans StarOffice Basic, vous pouvez également spécifier des valeurs supérieures à 100 %).

  • EndIntensity (Short) : intensité de EndColor exprimée en pourcentage (dans StarOffice Basic, vous pouvez également spécifier des valeurs supérieures à 100 %).

  • StepCount (Short) : nombre de couleurs intermédiaires utilisées par StarOffice pour calculer les dégradés.

L'exemple suivant illustre l'utilisation de dégradés de couleurs avec la structure com.sun.star.awt.Gradient :

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Dim Gradient As New com.sun.star.awt.Gradient

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point
Gradient.Style = com.sun.star.awt.GradientStyle.LINEAR
Gradient.StartColor = RGB(255,0,0)
Gradient.EndColor = RGB(0,255,0)
Gradient.StartIntensity = 150
Gradient.EndIntensity = 150
Gradient.Angle = 450
Gradient.StepCount = 100

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.GRADIENT
RectangleShape.FillGradient = Gradient

Page.add(RectangleShape)

Cet exemple crée un dégradé de couleurs linéaire (Style = LINEAR). Le dégradé commence en rouge (StartColor) dans l'angle supérieur gauche et finit, en suivant un angle de 45 degrés (Angle), en vert (EndColor) dans l'angle inférieur droit. L'intensité des couleurs de début et de fin est de 150 % (StartIntensity et EndIntensity), d'où un effet de couleurs apparemment plus claires que les valeurs spécifiées dans les propriétés StartColor et EndColor. Le dégradé de couleurs est constitué de cent couleurs intermédiaires (StepCount).

Hachures

Pour créer un remplissage hachuré, vous devez définir la propriété FillStyle sur HATCH. Le code de programme de définition des hachures ressemble beaucoup à celui des dégradés de couleurs. La structure auxiliaire, com.sun.star.drawing.Hatch en l'occurrence, sert ici à définir l'apparence des hachures. La structure de hachures possède les propriétés suivantes :

  • Style (Enum) : type de hachure (simple, carrée ou carrée avec diagonales), avec des valeurs par défaut correspondant à com.sun.star.awt.HatchStyle.

  • Color (Long) : couleur des lignes.

  • Distance (Long) : distance entre les lignes en centièmes de millimètre.

  • Angle (Short) : angle de la hachure en dixièmes de degré.

L'exemple suivant illustre l'utilisation d'une structure de hachures :

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Dim Hatch As New com.sun.star.drawing.Hatch

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.HATCH

Hatch.Style = com.sun.star.drawing.HatchStyle.SINGLE
Hatch.Color = RGB(64,64,64)
Hatch.Distance = 20
Hatch.Angle = 450

RectangleShape.FillHatch = Hatch

Page.add(RectangleShape)

Ce code crée une structure de hachures simple (HatchStyle = SINGLE) et fait pivoter les lignes de cette structure sur 45 degrés (Angle). Les lignes sont gris foncé (Color) et espacées de 0,2 millimètres (Distance).

Bitmaps

Pour utiliser une projection bitmap comme remplissage, vous devez définir la propriété FillStyle sur BITMAP. Si le bitmap est déjà disponible dans StarOffice, il vous suffit de spécifier son nom dans la propriété FillBitMapName et son style d'affichage (simple, carrelage ou étiré) dans la propriété FillBitmapMode. Les valeurs par défaut correspondent à com.sun.star.drawing.BitmapMode.

Pour utiliser un fichier bitmap externe, vous pouvez spécifier son URL dans la propriété FillBitmapURL.

L'exemple suivant crée un rectangle et dispose le bitmap Sky disponible dans StarOffice en carrelage, afin de remplir le rectangle :

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.BITMAP
RectangleShape.FillBitmapName = "Sky"
RectangleShape.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT

Page.add(RectangleShape)

Transparence

Vous avez la possibilité d'adapter la transparence des différents remplissages que vous appliquez. La manière la plus simple de modifier la transparence d'un élément de dessin consiste à utiliser la propriété FillTransparence.

L'exemple suivant crée un rectangle rouge avec une transparence de 50 %.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID
RectangleShape.FillTransparence = 50
RectangleShape.FillColor = RGB(255,0,0)

Page.add(RectangleShape)

Pour rendre le remplissage transparent, définissez la propriété FillTransparence sur 100.

En plus de la propriété FillTransparence, le service com.sun.star.drawing.FillProperties propose également la propriété FillTransparenceGradient. Elle sert à définir un dégradé pour la transparence d'une zone à remplir.

Propriétés de ligne

Tous les objets de dessin susceptibles d'avoir une ligne de bordure prennent en charge le service com.sun.star.drawing.LineStyle. Ce service propose notamment les propriétés suivantes :

  • LineStyle (Enum) : type de ligne, avec des valeurs par défaut correspondant à com.sun.star.drawing.LineStyle.

  • LineColor (Long) : couleur de ligne.

  • LineTransparence (Short) : transparence de ligne.

  • LineWidth (Long) : épaisseur de ligne en centièmes de millimètre.

  • LineJoint (Enum) : transitions vers les points de connexion, avec des valeurs par défaut correspondant à com.sun.star.drawing.LineJoint.

L'exemple suivant crée un rectangle avec une bordure pleine (LineStyle = SOLID) de 5 millimètres d'épaisseur (LineWidth) et une transparence de 50 %. Les arêtes droite et gauche de la ligne se prolongent jusqu'à ce qu'elles se rejoignent (LineJoint = MITER) pour former un angle droit.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.LineColor = RGB(128,128,128)
RectangleShape.LineTransparence = 50
RectangleShape.LineWidth = 500
RectangleShape.LineJoint = com.sun.star.drawing.LineJoint.MITER

RectangleShape.LineStyle = com.sun.star.drawing.LineStyle.SOLID

Page.add(RectangleShape)

En plus des propriétés indiquées précédemment, le service com.sun.star.drawing.LineStyle propose des options permettant de dessiner des lignes pointillées. Pour plus d'informations, consultez la référence de l'API StarOffice.

Propriétés de texte (objets de dessin)

Les services com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties permettent de formater du texte dans des objets de dessin. Ces services portent sur les caractères individuels et sur les paragraphes, et sont traités en détail dans le chapitre 6, Documents texte.

L'exemple suivant permet d'insérer du texte dans un rectangle et d'en formater la police grâce au service com.sun.star.style.CharacterProperties.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

Page.add(RectangleShape)

RectangleShape.String = "This is a test"
RectangleShape.CharWeight = com.sun.star.awt.FontWeight.BOLD
RectangleShape.CharFontName = "Arial"

Ce code fait appel à la propriété String du rectangle pour insérer le texte, et aux propriétés CharWeight et CharFontName du service com.sun.star.style.CharacterProperties pour formater la police du texte.

Le texte ne peut être inséré qu'après que l'objet de dessin a été ajouté à la page de dessin. Vous pouvez également utiliser le service com.sun.star.drawing.Text pour positionner et formater du texte dans un objet de dessin. Voici quelques propriétés importantes de ce service :

  • TextAutoGrowHeight (Boolean) : adapte la hauteur de l'élément de dessin au texte qu'il contient.

  • TextAutoGrowWidth (Boolean) : adapte la largeur de l'élément de dessin au texte qu'il contient.

  • TextHorizontalAdjust (Enum) : position horizontale du texte à l'intérieur de l'élément de dessin, avec des valeurs par défaut correspondant à com.sun.star.drawing.TextHorizontalAdjust.

  • TextVerticalAdjust (Enum) : position verticale du texte à l'intérieur de l'élément de dessin, avec des valeurs par défaut correspondant à com.sun.star.drawing.TextVerticalAdjust.

  • TextLeftDistance (Long) : écart sur la gauche séparant l'élément de dessin et le texte, exprimé en centièmes de millimètre.

  • TextRightDistance (Long) : écart sur la droite séparant l'élément de dessin et le texte, exprimé en centièmes de millimètre.

  • TextUpperDistance (Long) : écart séparant les bords supérieurs de l'élément de dessin et du texte, exprimé en centièmes de millimètre.

  • TextLowerDistance (Long) : écart séparant les bords inférieurs de l'élément de dessin et du texte, exprimé en centièmes de millimètre.

L'exemple suivant illustre l'utilisation des propriétés nommées.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

Page.add(RectangleShape)

RectangleShape.String = "This is a test"   ' Ne peut se trouver 
                                           ' qu'après Page.add!

RectangleShape.TextVerticalAdjust = com.sun.star.drawing.TextVerticalAdjust.TOP
RectangleShape.TextHorizontalAdjust = com.sun.star.drawing.TextHorizontalAdjust.LEFT

RectangleShape.TextLeftDistance = 300
RectangleShape.TextRightDistance = 300
RectangleShape.TextUpperDistance = 300
RectangleShape.TextLowerDistance = 300

Ce code insère un élément de dessin dans une page, puis ajoute du texte dans l'angle supérieur gauche de celui-ci grâce aux propriétés TextVerticalAdjust et TextHorizontalAdjust. L'écart minimum entre le texte et le bord de l'objet de dessin est de trois millimètres.

Propriétés d'ombre

Vous pouvez ajouter une ombre à la plupart des objets de dessin en utilisant le service com.sun.star.drawing.ShadowProperties. Ce service propose les propriétés suivantes :

  • Shadow (Boolean) : active l'ombre.

  • ShadowColor (Long) : couleur d'ombre.

  • ShadowTransparence (Short) : transparence de l'ombre.

  • ShadowXDistance (Long) : écart vertical séparant l'ombre et l'objet de dessin, exprimé en centièmes de millimètre.

  • ShadowYDistance (Long) : écart horizontal séparant l'ombre et l'objet de dessin, exprimé en centièmes de millimètre.

L'exemple suivant crée un rectangle avec une ombre présentant un décalage vertical et un décalage horizontal de 2 millimètres. L'ombre prend une couleur gris foncé avec une transparence de 50 %.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.Shadow = True
RectangleShape.ShadowColor = RGB(192,192,192)
RectangleShape.ShadowTransparence = 50
RectangleShape.ShadowXDistance = 200
RectangleShape.ShadowYDistance = 200

Page.add(RectangleShape)

Présentation de différents objets de dessin

Formes rectangulaires

Les objets de forme rectangulaire (com.sun.star.drawing.RectangleShape) prennent en charge les services suivants pour leur formatage :

  • Propriétés de remplissage : com.sun.star.drawing.FillProperties.

  • Propriétés de ligne : com.sun.star.drawing.LineProperties.

  • Propriétés de texte : com.sun.star.drawing.Text (avec com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties).

  • Propriétés d'ombre : com.sun.star.drawing.ShadowProperties.

  • CornerRadius (Long) : rayon d'arrondissement des angles en centièmes de millimètre.

Cercles et ellipses

Le service com.sun.star.drawing.EllipseShape gère les cercles et les ellipses, et prend en charge les services suivants :

  • Propriétés de remplissage : com.sun.star.drawing.FillProperties.

  • Propriétés de ligne : com.sun.star.drawing.LineProperties.

  • Propriétés de texte : com.sun.star.drawing.Text (avec com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties).

  • Propriétés d'ombre : com.sun.star.drawing.ShadowProperties.

Outre ces services, les cercles et les ellipses offrent les propriétés suivantes :

  • CircleKind (Enum) : type de cercle ou d'ellipse, avec des valeurs par défaut correspondant à com.sun.star.drawing.CircleKind.

  • CircleStartAngle (Long) : angle de départ exprimé en dixièmes de degré (pour les segments de cercle ou d'ellipse uniquement).

  • CircleEndAngle (Long) : angle final exprimé en dixièmes de degré (pour les segments de cercle ou d'ellipse uniquement).

La propriété CircleKind détermine si un objet est un cercle complet, une tranche de cercle ou une section de cercle. Les valeurs disponibles sont les suivantes :

  • com.sun.star.drawing.CircleKind.FULL : cercle entier ou ellipse entière.

  • com.sun.star.drawing.CircleKind.CUT : section de cercle (cercle partiel dont les interfaces sont liées directement les unes aux autres).

  • com.sun.star.drawing.CircleKind.SECTION : tranche de cercle.

  • com.sun.star.drawing.CircleKind.ARC : angle (sans ligne de cercle).

L'exemple suivant crée une tranche de cercle avec un angle de 70 degrés, résultant de la différence entre l'angle de départ (20 degrés) et l'angle final (90 degrés).

Dim Doc As Object
Dim Page As Object
Dim EllipseShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

EllipseShape = Doc.createInstance("com.sun.star.drawing.EllipseShape")
EllipseShape.Size = Size
EllipseShape.Position = Point

EllipseShape.CircleStartAngle = 2000
EllipseShape.CircleEndAngle = 9000
EllipseShape.CircleKind =  com.sun.star.drawing.CircleKind.SECTION

Page.add(EllipseShape)

Lignes

StarOffice propose le service com.sun.star.drawing.LineShape pour les objets Ligne. Les objets Ligne prennent en charge tous les services de formatage généraux, à l'exception des zones. Vous trouverez ci-après toutes les propriétés associées au service LineShape :

  • Propriétés de ligne : com.sun.star.drawing.LineProperties.

  • Propriétés de texte : com.sun.star.drawing.Text (avec com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties).

  • Propriétés d'ombre : com.sun.star.drawing.ShadowProperties.

L'exemple suivant crée et formate une ligne à l'aide des propriétés nommées. L'origine de la ligne est spécifiée dans la propriété Location, tandis que les coordonnées répertoriées dans la propriété Size déterminent le point limite de la ligne.

Dim Doc As Object
Dim Page As Object
Dim LineShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

LineShape = Doc.createInstance("com.sun.star.drawing.LineShape")
LineShape.Size = Size
LineShape.Position = Point

Page.add(LineShape)

Formes polypolygonales

StarOffice prend également en charge les formes polygonales complexes via le service com.sun.star.drawing.PolyPolygonShape. Un polypolygone n'est pas à proprement parler un simple polygone : il s'agit d'un polygone multiple. Il est donc possible de spécifier plusieurs listes indépendantes contenant des points d'inflexion et de les combiner pour former un objet complet.

Comme pour les formes rectangulaires, toutes les propriétés de formatage des objets de dessin sont également disponibles pour les polypolygones :

  • Propriétés de remplissage : com.sun.star.drawing.FillProperties.

  • Propriétés de ligne : com.sun.star.drawing.LineProperties.

  • Propriétés de texte : com.sun.star.drawing.Text (avec com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties).

  • Propriétés d'ombre : com.sun.star.drawing.ShadowProperties.

Le service PolyPolygonShape propose également une propriété permettant de définir les coordonnées d'un polygone :

  • PolyPolygon (Array) : champ contenant les coordonnées du polygone (matrice double possédant des points de type com.sun.star.awt.Point).

L'exemple suivant montre comment définir un triangle avec le service PolyPolygonShape.

Dim Doc As Object
Dim Page As Object
Dim PolyPolygonShape As Object
Dim PolyPolygon As Variant
Dim Coordinates(2) As New com.sun.star.awt.Point

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

PolyPolygonShape = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape")
Page.add(PolyPolygonShape)   ' Page.add doit être spécifié avant les coordonnées

Coordinates(0).x = 1000
Coordinates(1).x = 7500
Coordinates(2).x = 10000
Coordinates(0).y = 1000
Coordinates(1).y = 7500
Coordinates(2).y = 5000

PolyPolygonShape.PolyPolygon = Array(Coordinates())

Les points d'un polygone étant définis comme des valeurs absolues, il n'est pas nécessaire d'en spécifier la taille ou la position de départ. Nous vous conseillons de créer une matrice de points, de l'intégrer à une seconde matrice (à l'aide de l'appel Array(Coordinates()),() puis d'assigner cette matrice au polygone. Pour que l'appel correspondant puisse s'effectuer, le polygone doit être inséré dans le document.

La matrice double de la définition permet de créer des formes complexes en fusionnant plusieurs polygones. Vous pouvez créer par exemple un rectangle et y insérer un autre rectangle afin de créer un trou dans le rectangle d'origine :

Dim Doc As Object
Dim Page As Object
Dim PolyPolygonShape As Object
Dim PolyPolygon As Variant
Dim Square1(3) As New com.sun.star.awt.Point
Dim Square2(3) As New com.sun.star.awt.Point
Dim Square3(3) As New com.sun.star.awt.Point

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

PolyPolygonShape = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape")

Page.add(PolyPolygonShape)   ' Page.add doit être spécifié avant les coordonnées

Square1(0).x = 5000
Square1(1).x = 10000
Square1(2).x = 10000
Square1(3).x = 5000
Square1(0).y = 5000
Square1(1).y = 5000
Square1(2).y = 10000
Square1(3).y = 10000

Square2(0).x = 6500
Square2(1).x = 8500
Square2(2).x = 8500
Square2(3).x = 6500
Square2(0).y = 6500
Square2(1).y = 6500
Square2(2).y = 8500
Square2(3).y = 8500

Square3(0).x = 6500
Square3(1).x = 8500
Square3(2).x = 8500
Square3(3).x = 6500
Square3(0).y = 9000
Square3(1).y = 9000
Square3(2).y = 9500
Square3(3).y = 9500

PolyPolygonShape.PolyPolygon = Array(Square1(), Square2(), Square3())

Pour distinguer les zones remplies des zones à trous, StarOffice applique une règle simple : l'arête de la forme extérieure correspond toujours à la bordure extérieure du polypolygone. La ligne suivante vers l'intérieur correspond à la bordure intérieure de la forme et marque la transition vers le premier trou. S'il existe une autre ligne vers l'intérieur, elle marque la transition vers une zone remplie.

Images

Les derniers éléments de dessin présentés ici sont des objets graphiques basés sur le service com.sun.star.drawing.GraphicObjectShape. Ils peuvent être utilisés avec les images de StarOffice, dont l'apparence peut être adaptée grâce à une vaste gamme de propriétés.

Les objets graphiques prennent en charge deux des propriétés de formatage générales :

  • Propriétés de texte : com.sun.star.drawing.Text (avec com.sun.star.style.CharacterProperties et com.sun.star.style.ParagraphProperties).

  • Propriétés d'ombre : com.sun.star.drawing.ShadowProperties.

Les autres propriétés prises en charge par les objets graphiques sont les suivantes :

  • GraphicURL (String) : URL de l'image.

  • AdjustLuminance (Short) : luminance des couleurs, exprimée en pourcentage (les valeurs négatives sont autorisées).

  • AdjustContrast (Short) : contraste exprimé en pourcentage (les valeurs négatives sont autorisées).

  • AdjustRed (Short) : valeur de la couleur rouge exprimée en pourcentage (les valeurs négatives sont autorisées).

  • AdjustGreen (Short) : valeur de la couleur verte exprimée en pourcentage (les valeurs négatives sont autorisées).

  • AdjustBlue (Short) : valeur de la couleur bleue exprimée en pourcentage (les valeurs négatives sont autorisées).

  • Gamma (Short) : valeur gamma d'une image.

  • Transparency (Short) : transparence d'une image exprimée en pourcentage.

  • GraphicColorMode (enum) : mode de couleur (par exemple, standard, niveaux de gris, noir et blanc) avec des valeurs par défaut correspondant à com.sun.star.drawing.ColorMode.

L'exemple suivant montre comment insérer une page dans une image object.Dim Doc As Object :

Dim Page As Object
Dim GraphicObjectShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000         ' spécifications, non primordiales car les dernières
                       ' coordonnées

Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

GraphicObjectShape = Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")

GraphicObjectShape.Size = Size
GraphicObjectShape.Position = Point

GraphicObjectShape.GraphicURL = "file:///c:/test.jpg"
GraphicObjectShape.AdjustBlue = -50
GraphicObjectShape.AdjustGreen = 5
GraphicObjectShape.AdjustBlue = 10
GraphicObjectShape.AdjustContrast = 20
GraphicObjectShape.AdjustLuminance = 50
GraphicObjectShape.Transparency = 40
GraphicObjectShape.GraphicColorMode = com.sun.star.drawing.ColorMode.STANDARD

Page.add(GraphicObjectShape)

Ce code permet d'insérer l'image test.jpg et d'adapter son apparence à l'aide des propriétés Adjust. Dans cet exemple, les images sont représentées avec 40 % de transparence et aucune autre conversion de couleur (GraphicColorMode = STANDARD).

Édition des objets de dessin

Groupement d'objets

Il est souvent utile de regrouper plusieurs objets de dessin individuels afin qu'ils se comportent comme un seul objet.

L'exemple suivant associe deux objets de dessin :

Dim Doc As Object
Dim Page As Object
Dim Square As Object
Dim Circle As Object
Dim Shapes As Object
Dim Group As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Dim NewPos As New com.sun.star.awt.Point
Dim Height As Long
Dim Width As Long

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
Point.x = 3000
Point.y = 3000
Size.Width = 3000
Size.Height = 3000
' create square drawing element
Square = Doc.createInstance("com.sun.star.drawing.RectangleShape")
Square.Size = Size
Square.Position = Point
Square.FillColor = RGB(255,128,128)
Page.add(Square)
' create circle drawing element
Circle = Doc.createInstance("com.sun.star.drawing.EllipseShape")
Circle.Size = Size
Circle.Position = Point
Circle.FillColor = RGB(255,128,128)
Circle.FillColor = RGB(0,255,0)
Page.add(Circle)
' combine square and circle drawing elements
Shapes = createUnoService("com.sun.star.drawing.ShapeCollection")
Shapes.add(Square)
Shapes.add(Circle)
Group = Page.group(Shapes)
' centre combined drawing elements
Height = Page.Height
Width = Page.Width
NewPos.X = Width / 2
NewPos.Y = Height / 2
Height = Group.Size.Height
Width = Group.Size.Width
NewPos.X = NewPos.X - Width / 2
NewPos.Y = NewPos.Y - Height / 2
Group.Position = NewPos

Ce code crée un rectangle et un cercle, puis les insère dans une page. Un objet prenant en charge le service com.sun.star.drawing.ShapeCollection est ensuite créé et la méthode Add est utilisée pour ajouter le rectangle et le cercle à cet objet. Le service ShapeCollection est ajouté à la page à l'aide de la méthode Group et renvoie l'objet Group réel qui peut être édité individuellement comme une forme Shape.

Si vous souhaitez formater les différents objets d'un groupe, appliquez le formatage avant de les ajouter au groupe. Une fois qu'ils ont été insérés dans un groupe, les objets ne peuvent pas être modifiés.

Rotation et cisaillement des objets de dessin

Tous les objets de dessin décrits dans les sections précédentes peuvent également faire l'objet de rotations et de cisaillements à l'aide du service com.sun.star.drawing.RotationDescriptor.

Ce service offre les propriétés suivantes :

  • RotateAngle (Long) : angle de rotation en centièmes de degré.

  • ShearAngle (Long) : angle de cisaillement en centièmes de degré.

L'exemple suivant crée un rectangle et le fait pivoter de 30 degrés à l'aide de la propriété RotateAngle :

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.RotateAngle = 3000

Page.add(RectangleShape)

L'exemple suivant crée le même rectangle que dans le précédent, mais en appliquant un cisaillement de 30 degrés à l'aide de la propriété ShearAngle.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.ShearAngle = 3000

Page.add(RectangleShape)

Recherche et remplacement

Tout comme les documents texte, les documents de dessin comportent une fonction de recherche et de remplacement. Cette fonction est semblable à celle utilisée dans les documents texte et est décrite dans le chapitre 6, Documents texte. Dans les dessins, toutefois, les objets Descriptor pour la recherche et le remplacement ne sont pas créés directement au moyen de l'objet Document, mais par l'intermédiaire du niveau de caractère associé. L'exemple suivant illustre le processus de remplacement dans un dessin :

Dim Doc As Object
Dim Page As Object
Dim ReplaceDescriptor As Object
Dim I As Integer

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

ReplaceDescriptor = Page.createReplaceDescriptor()
ReplaceDescriptor.SearchString = "is"
ReplaceDescriptor.ReplaceString = "was"

For I = 0 to Doc.drawPages.Count - 1
   Page = Doc.drawPages(I)
   Page.ReplaceAll(ReplaceDescriptor)
Next I

Ce code utilise le premier DrawPage du document pour créer un ReplaceDescriptor avant d'appliquer ce descripteur dans une boucle à toutes les pages du dessin.

Présentations

Les présentations StarOffice sont basées sur des dessins. Chaque page de la présentation est une diapo. L'accès aux diapos s'effectue de la même manière que l'accès à un dessin standard, via la liste DrawPages de l'objet Document. Le service com.sun.star.presentation.PresentationDocument gère les présentations et fournit une version complète du service com.sun.star.drawing.DrawingDocument.

Utilisation des présentations

Outre les fonctions de dessin offertes par la propriété Presentation, les présentations contiennent un objet Presentation qui permet d'accéder aux propriétés principales et aux mécanismes de contrôle des présentations. Cet objet propose par exemple une méthode start permettant de lancer les présentations.

Dim Doc As Object
Dim Presentation As Object

Doc = StarDesktop.CurrentComponent
Presentation = Doc.Presentation
Presentation.start()

Le code utilisé dans cet exemple crée un objet Doc faisant référence à la présentation active et un objet Presentation correspondant. La méthode start() de l'objet permet de lancer l'exemple et d'exécuter la présentation à l'écran.

Les méthodes suivantes sont fournies comme objets Presentation :

  • start : lance la présentation.

  • end : met fin à la présentation.

  • rehearseTimings : lance la présentation depuis le début et calcule son temps d'exécution.

Les propriétés suivantes sont également disponibles :

  • AllowAnimations (Boolean) : exécute les animations de la présentation.

  • CustomShow (String) : permet de spécifier le nom de la présentation afin de pouvoir y faire référence dans la présentation.

  • FirstPage (String) : nom de la première diapo qui servira au lancement de la présentation.

  • IsAlwaysOnTop (Boolean) : affiche toujours la fenêtre de la présentation au premier plan.

  • IsAutomatic (Boolean) : exécute la présentation automatiquement.

  • IsEndless (Boolean) : une fois la présentation terminée, la relance depuis le début.

  • IsFullScreen (Boolean) : lance automatiquement la présentation en mode plein écran.

  • IsMouseVisible (Boolean) : affiche la souris pendant la présentation.

  • Pause (long) : durée pendant laquelle un écran noir s'affiche à la fin de la présentation.

  • StartWithNavigator (Boolean) : affiche la fenêtre du navigateur au lancement de la présentation.

  • UsePn (Boolean) : affiche le pointeur pendant la présentation.