Struttura dei disegni

From Apache OpenOffice Wiki
< IT‎ | Documentation‎ | BASIC Guide
Revision as of 10:39, 17 July 2009 by Sseminario (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Apache OpenOffice non limita il numero delle pagine di un documento disegno. Inoltre, è possibile progettare ogni pagina separatamente e non esistono limiti al numero degli elementi del disegno aggiungibili a una pagina.

Pagine

Le pagine di un disegno sono disponibili tramite l'elenco DrawPages. È possibile accedere alle singole pagine sia attraverso il numero che attraverso il nome. Se un documento ha una pagina denominata Slide 1, gli esempi seguenti sono identici.

Esempio 1:

Dim Doc As Object
Dim Page As Object
 
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

Esempio 2:

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

Nell'esempio 1, la pagina è identificata dal suo numero (il conteggio inizia a 0). Nel secondo esempio, si accede alla pagina utilizzando il suo nome e il metodo 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

La chiamata precedente restituisce un oggetto pagina che supporta il servizio com.sun.star.drawing.DrawPage. Questo servizio riconosce le proprietà seguenti:

BorderLeft (Long)
Bordo sinistro in centesimi di millimetro
BorderRight (Long)
Bordo destro in centesimi di millimetro
BorderTop (Long)
Bordo superiore in centesimi di millimetro
BorderBottom (Long)
Bordo inferiore in centesimi di millimetro
Width (Long)
Larghezza della pagina in centesimi di millimetro
Height (Long)
Altezza della pagina in centesimi di millimetro
Number (Short)
Numero di pagine (la numerazione inizia con 1), sola lettura
Orientation (Enum)
Orientamento della pagina (conforme all'enumerazione com.sun.star.view.PaperOrientation)

La modifica di queste impostazioni incide su tutte le pagine del documento.

L'esempio seguente imposta il formato della pagina di un disegno appena aperto su 20 x 20 centimetri con un margine della pagina di 0,5 centimetri:

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

Proprietà elementari degli oggetti di disegno

Gli oggetti disegno includono forme (rettangoli, cerchi e così via), linee e oggetti testo, che condividono una serie di funzioni comuni e supportano il servizio com.sun.star.drawing.Shape. Questo servizio definisce le proprietà Size e Position di un oggetto di disegno.

Apache OpenOffice Basic offre inoltre diversi altri servizi tramite i quali modificare tali proprietà, come la formattazione o l'applicazione di riempimenti. Le opzioni di formattazione disponibili dipendono dal tipo di oggetto disegno.

L'esempio seguente crea e inserisce un rettangolo nel disegno:

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)

Questo esempio utilizza la chiamata StarDesktop.CurrentComponent per determinare quale documento è aperto. L'oggetto documento così determinato restituisce la prima pagina del disegno tramite la chiamata drawPages(0).

Vengono quindi inizializzate le strutture Point e Size con il punto di origine (angolo sinistro) e il formato dell'oggetto disegno. Le lunghezze sono specificate in centesimi di millimetro.

Il codice del programma utilizza quindi la chiamata Doc.createInstance per creare l'oggetto disegno rettangolo come specificato dal servizio com.sun.star.drawing.RectangleShape. Al termine, l'oggetto disegno è assegnato a una pagina utilizzando una chiamata Page.add.

Proprietà di riempimento

Questa sezione descrive quattro servizi e in ciascun caso il codice del programma di esempio utilizza un elemento di forma rettangolare che combina diversi tipi di formattazione. Le proprietà di riempimento vengono combinate nel servizio com.sun.star.drawing.FillProperties.

Apache OpenOffice riconosce quattro tipi principali di formattazione per un'area di riempimento. La variante più semplice è il riempimento a colore singolo. Le opzioni per definire le sfumature di colore e i tratteggi permettono di creare e introdurre altri colori. La quarta variante è l'opzione che consente di proiettare immagini preesistenti nell'area di riempimento.

Il modo riempimento di un oggetto disegno viene definito tramite la proprietà FillStyle. I valori consentiti sono definiti in com.sun.star.drawing.FillStyle.

Riempimenti a colore singolo

La proprietà principale per i riempimenti a colore singolo è la seguente:

FillColor (Long)
Colore di riempimento di un'area.

Per utilizzare il modo riempimento, dovete impostare la proprietà FillStyle sul SOLIDmodo di riempimento.

L'esempio seguente crea una forma rettangolare e un riempimento rosso (valore RGB 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)

Sfumatura di colore

Se si imposta la proprietà FillStyle su GRADIENT è possibile applicare una sfumatura di colore a qualsiasi area di riempimento di un documento Apache OpenOffice.

Per applicare una sfumatura di colore predefinita, è possibile assegnare il nome associato della proprietà FillTransparenceGradientName. Per definire una sfumatura di colore personalizzata, dovete completare una struttura com.sun.star.awt.Gradient per assegnare la proprietà FillGradient, che dispone delle opzioni seguenti:

Style (Enum)
Tipo di sfumatura, ad esempio, lineare o radiale (valori predefiniti conformi a com.sun.star.awt.GradientStyle)
StartColor (Long)
Colore iniziale di una sfumatura di colore
EndColor (Long)
Colore finale di una sfumatura di colore
Angle (Short)
Angolo della sfumatura di colore in decimi di grado
XOffset (Short)
Coordinata X in corrispondenza della quale inizia la sfumatura di colore, specificata in centesimi di millimetro
YOffset (Short)
Coordinata Y in corrispondenza della quale inizia la sfumatura di colore, specificata in centesimi di millimetro
StartIntensity (Short)
Intensità di StartColor come percentuale (in Apache OpenOffice Basic, si possono specificare anche valori superiori al 100 percento)
EndIntensity (Short)
Intensità di EndColor come percentuale (in Apache OpenOffice Basic, si possono specificare anche valori superiori al 100 percento)
StepCount (Short)
Numero di gradazioni di colore che Apache OpenOffice deve calcolare per le sfumature

L'esempio seguente dimostra l'uso delle sfumature di colore con l'ausilio della struttura 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)

Questo esempio crea una sfumatura di colore lineare (Style = LINEAR). La sfumatura inizia con il rosso (StartColor) nell'angolo superiore sinistro e si estende a un angolo di 45 gradi (Angle) fino al verde (EndColor) nell'angolo inferiore destro. L’intensità di colore dei colori iniziale e finale è 150 percento (StartIntensity e EndIntensity) pertanto i colori risultano più brillanti rispetto ai valori specificati nelle proprietà StartColor e EndColor. La sfumatura di colore è rappresentata utilizzando un centinaio di singoli colori sfumati (StepCount).

Tratteggi

Per creare un riempimento tratteggiato, la proprietà FillStyle deve essere impostata su HATCH. Il codice del programma per definire il tratteggio è molto simile al codice per le sfumature di colore. Anche in questo caso una struttura ausiliaria, com.sun.star.drawing.Hatch, è utilizzata per definire l'aspetto dei tratteggi. La struttura dei tratteggi ha le seguenti proprietà:

Style (Enum)
Tipo di tratteggio: semplice, squadrato, o squadrato con diagonali (valori predefiniti conformi a com.sun.star.awt.HatchStyle)
Color (Long)
Colore delle linee
Distance (Long)
Distanza tra le linee, espressa in centesimi di millimetro
Angle (Short)
Angolo del tratteggio in decimi di grado

L'esempio seguente dimostra l'uso di una struttura di tratteggio:

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)

Questo codice crea una struttura di tratteggio semplice (HatchStyle = SINGLE) le cui linee sono ruotate di 45 gradi (Angle). Le linee sono grigio scuro (Color) e sono distanziate di 0,2 millimetri (Distance).

Bitmap

Per utilizzare la proiezione bitmap come riempimento, impostate la proprietà FillStyle su BITMAP. Se la bitmap è già disponibile in Apache OpenOffice, è sufficiente specificarne il nome nella proprietà FillBitMapName e il modello di visualizzazione (semplice, affiancata, o allungata) nella proprietà FillBitmapMode (valori predefiniti conformi a com.sun.star.drawing.BitmapMode).

Per utilizzare un file bitmap esterno, specificatene l'URL nella proprietà FillBitmapURL.

L'esempio seguente crea una rettangolo e affianca la bitmap Sky disponibile in Apache OpenOffice per riempire l'area del rettangolo:

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)

Trasparenza

È possibile regolare la trasparenza di qualsiasi riempimento applicato. Il modo più semplice di modificare la trasparenza di un elemento di disegno è rappresentato dall'utilizzo della proprietà FillTransparence.

L'esempio seguente crea un rettangolo rosso con una trasparenza del 50 percento.

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)

Per rendere trasparente il riempimento, impostare la proprietà FillTransparence su 100.

Oltre alla proprietà FillTransparence, il servizio com.sun.star.drawing.FillProperties fornisce anche la proprietà FillTransparenceGradient, la quale permette di definire una sfumatura che specifica la trasparenza dell'area di riempimento.

Proprietà delle linee

Tutti gli oggetti disegno che hanno un bordo supportano il servizio com.sun.star.drawing.LineStyle. Di seguito sono elencate alcune delle proprietà offerte da questo servizio:

LineStyle (Enum)
Tipo di linea (valori predefiniti conformi a com.sun.star.drawing.LineStyle)
LineColor (Long)
Colore della linea
LineTransparence (Short)
Trasparenza della linea
LineWidth (Long)
Spessore della linea espresso in centesimi di millimetro
LineJoint (Enum)
Transizioni ai punti di connessione (valori predefiniti conformi a com.sun.star.drawing.LineJoint)

L'esempio seguente crea un rettangolo con bordo pieno (LineStyle = SOLID) di 5 millimetri di spessore (LineWidth) e trasparente al 50 percento. I bordi destro e sinistro della linea si estendono ai loro punti di reciproca intersezione (LineJoint = MITER) per formare un angolo retto.

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)

Oltre alle proprietà elencate, il servizio com.sun.star.drawing.LineStyle fornisce opzioni per il disegno di linee punteggiate o tratteggiate. Per ulteriori informazioni, consultate il riferimento dell'API di Apache OpenOffice.

Proprietà del testo (oggetti di disegno)

I servizi com.sun.star.style.CharacterProperties e com.sun.star.style.ParagraphProperties formattano il testo negli oggetti di disegno. Questi servizi sono relativi ai singoli caratteri e paragrafi e sono descritti in maggior dettaglio in Documenti di testo.

L'esempio seguente inserisce il testo in un rettangolo e formatta il servizio dei caratteri 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"

Questo codice utilizza la proprietà Stringdel rettangolo per inserire il testo e le proprietà CharWeight e CharFontName del servizio com.sun.star.style.CharacterProperties per formattare il carattere del testo.

Il testo può essere inserito solo una volta aggiunto l'oggetto di disegno alla pagina di disegno. Potete inoltre utilizzare il servizio com.sun.star.drawing.Text per posizionare e formattare il testo nell'oggetto di disegno. Di seguito sono riportate alcune delle proprietà più importanti di questo servizio:

TextAutoGrowHeight (Boolean)
Adatta l'altezza dell'elemento di disegno al testo che contiene
TextAutoGrowWidth (Boolean)
Adatta la larghezza dell'elemento di disegno al testo che contiene
TextHorizontalAdjust (Enum)
Posizione orizzontale del testo all'interno dell'elemento di disegno (valori predefiniti conformi a com.sun.star.drawing.TextHorizontalAdjust)
TextVerticalAdjust (Enum)
Posizione verticale del testo all'interno dell'elemento di disegno (valori predefiniti conformi a com.sun.star.drawing.TextVerticalAdjust)
TextLeftDistance (Long)
Distanza a sinistra tra l'elemento di disegno e il testo in centesimi di millimetro
TextRightDistance (Long)
Distanza a destra tra l'elemento di disegno e il testo in centesimi di millimetro
TextUpperDistance (Long)
Distanza superiore tra l'elemento di disegno e il testo in centesimi di millimetro
TextLowerDistance (Long)
Distanza inferiore tra l'elemento di disegno e il testo in centesimi di millimetro

L'esempio seguente dimostra l'uso delle proprietà citate.

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"   ' May only take place after 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

Questo codice inserisce un elemento di disegno in una pagina, quindi aggiunge il testo all'angolo superiore sinistro dell'oggetto disegno utilizzando le proprietà TextVerticalAdjust e TextHorizontalAdjust. La distanza minima tra il bordo del testo e l'oggetto disegno è impostata su tre millimetri.

Proprietà dell'ombra

È possibile aggiungere un'ombra alla maggior parte degli oggetti disegno con il servizio com.sun.star.drawing.ShadowProperties. Le proprietà di questo servizio sono:

Shadow (Boolean)
Attiva l'ombra
ShadowColor (Long)
Colore dell'ombra
ShadowTransparence (Short)
Trasparenza dell'ombra
ShadowXDistance (Long)
Distanza verticale dell'ombra dall'oggetto disegno in centesimi di millimetro
ShadowYDistance (Long)
Distanza orizzontale dell'ombra dall'oggetto disegno in centesimi di millimetro

L'esempio seguente crea una rettangolo con un'ombra scostata di 2 millimetri dal rettangolo in senso verticale e orizzontale. L'ombra è resa in grigio scuro con il 50 percento di trasparenza.

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)

Panoramica dei diversi oggetti di disegno

Forme rettangolari

Gli oggetti di forma rettangolare (com.sun.star.drawing.RectangleShape) supportano i seguenti servizi di formattazione:

Fill properties
com.sun.star.drawing.FillProperties
Line properties
com.sun.star.drawing.LineProperties
Text properties
com.sun.star.drawing.Text (con com.sun.star.style.CharacterProperties e com.sun.star.style.ParagraphProperties)
Shadow properties
com.sun.star.drawing.ShadowProperties
CornerRadius (Long)
Raggio per l'arrotondamento degli angoli espresso in centesimi di millimetro

Cerchi ed ellissi

Il servizio com.sun.star.drawing.EllipseShape è responsabile di cerchi ed ellissi e supporta i seguenti servizi:

Fill properties
com.sun.star.drawing.FillProperties
Line properties
com.sun.star.drawing.LineProperties
Text properties
com.sun.star.drawing.Text (con com.sun.star.style.CharacterProperties e com.sun.star.style.ParagraphProperties)
Shadow properties
com.sun.star.drawing.ShadowProperties

Oltre a questi servizi, cerchi ed ellissi offrono le seguenti proprietà:

CircleKind (Enum)
Tipo di cerchio o ellissi (valori predefiniti conformi a com.sun.star.drawing.CircleKind )
CircleStartAngle (Long)
Angolo iniziale in decimi di grado (solo per segmenti di cerchio o ellisse)
CircleEndAngle (Long)
Angolo finale in decimi di grado (solo per segmenti di cerchio o ellisse)

La proprietà CircleKind determina se un oggetto è un cerchio completo, una porzione circolare o una sezione di un cerchio. Sono disponibili i seguenti valori:

com.sun.star.drawing.CircleKind.FULL
Cerchio completo o ellisse completa
com.sun.star.drawing.CircleKind.CUT
Sezione di cerchio (cerchio parziale le cui interfacce sono collegate direttamente)
com.sun.star.drawing.CircleKind.SECTION
Porzione di cerchio
com.sun.star.drawing.CircleKind.ARC
Angolo (non comprendente la linea del cerchio)

L'esempio seguente crea una porzione circolare con un angolo di 70 gradi (prodotta dalla differenza tra l'angolo iniziale di 20 gradi e l'angolo finale di 90 gradi).

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)

Linee

Apache OpenOffice fornisce il servizio com.sun.star.drawing.LineShape per gli oggetti linea. Gli oggetti linea supportano tutti i servizi di formattazione generale ad eccezione delle aree. Di seguito sono riportate tutte le proprietà associate al servizio LineShape:

Line properties
com.sun.star.drawing.LineProperties
Text properties
com.sun.star.drawing.Text (con com.sun.star.style.CharacterProperties e com.sun.star.style.ParagraphProperties)
Shadow properties
com.sun.star.drawing.ShadowProperties

L'esempio seguente crea e formatta una linea con l'ausilio delle proprietà citate. L'origine della linea è specificata nella proprietà Location mentre le coordinate elencate nella proprietà Size specificano il punto finale della linea.

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)

Forme polipoligonali

Apache OpenOffice supporta anche forme poligonali complesse tramite il servizio com.sun.star.drawing.PolyPolygonShape. In senso stretto, un polipoligono non è un poligono semplice ma un poligono multiplo. È pertanto possibile specificare elenchi indipendenti contenenti punti angolari e combinarli per formare un oggetto completo.

Come per le forme rettangolari, tutte le proprietà di formattazione degli oggetti di disegno vengono fornite anche per i polipoligoni:

Fill properties
com.sun.star.drawing.FillProperties
Line properties
com.sun.star.drawing.LineProperties
Text properties
com.sun.star.drawing.Text (con com.sun.star.style.CharacterProperties e com.sun.star.style.ParagraphProperties)
Shadow properties
com.sun.star.drawing.ShadowProperties

Il servizio PolyPolygonShape dispone anche di una proprietà che permette di definire le coordinate di un poligono:

  • PolyPolygon (Array): campo contenente le coordinate del poligono (doppia matrice con punti del tipocom.sun.star.awt.Point)

L'esempio seguente mostra come definire un triangolo con il servizio 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 must take place before the coordinates are set
 
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())

Dato che i punti di un poligono sono definiti come valori assoluti, non è necessario specificare le dimensioni o la posizione iniziale di un poligono. Al contrario, occorre creare una matrice dei punti, includere tale matrice in una seconda matrice (utilizzando la chiamata Array(Coordinates()), quindi assegnare tale matrice al poligono. Prima di effettuare la chiamata corrispondente, dovrete inserire il poligono nel documento.

La doppia matrice nella definizione permette di creare forme complesse mediante l'unione di diversi poligoni. Ad esempio, è possibile creare un rettangolo e quindi inserirne un altro al suo interno per creare un foro nel rettangolo originale:

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 must take place before the coordinates are set
 
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())

Per quanto riguarda quali aree sono riempite e quali sono vuote, Apache OpenOffice applica una regola semplice: il bordo della forma esterna corrisponde sempre al bordo esterno del polipoligono. La linea interna successiva costituisce il bordo interno della forma e marca la transizione al primo foro. Se è presente un'altra linea interna, quest'ultima contraddistingue la transizione a un'area riempita.

Immagini

Gli ultimi elementi di disegno qui presentati sono oggetti grafici basati sul servizio com.sun.star.drawing.GraphicObjectShape. Potrete utilizzarli con qualsiasi immagine in Apache OpenOffice e adattarne l'aspetto utilizzando un'intera gamma di proprietà.

Gli oggetti grafici supportano due delle proprietà generali di formattazione:

Text properties
com.sun.star.drawing.Text (con com.sun.star.style.CharacterProperties e com.sun.star.style.ParagraphProperties)
Shadow properties
com.sun.star.drawing.ShadowProperties

Le proprietà addizionali supportate dagli oggetti grafici sono le seguenti:

GraphicURL (String)
URL dell'immagine
AdjustLuminance (Short)
Luminanza dei colori, espressa come percentuale (sono ammessi anche i valori negativi)
AdjustContrast (Short)
Contrasto, espresso come percentuale (sono ammessi anche i valori negativi)
AdjustRed (Short)
Valore del rosso, espresso come percentuale (sono ammessi anche i valori negativi)
AdjustGreen (Short)
Valore del verde, espresso come percentuale (sono ammessi anche i valori negativi)
AdjustBlue (Short)
Valore del blu, espresso come percentuale (sono ammessi anche i valori negativi)
Gamma (Short)
Valore gamma di un'immagine
Transparency (Short)
Trasparenza di un'immagine, espressa come percentuale
GraphicColorMode (enum)
Modalità del colore, per esempio standard, scala di grigi, bianco e nero (valore predefinito conforme a com.sun.star.drawing.ColorMode )

L'esempio seguente mostra come inserire una pagina in un oggetto grafico 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         ' specifications, insignificant because latter
                       coordinates are binding
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)

Questo codice inserisce l'immagine test.jpg e ne adatta l'aspetto utilizzando le proprietà Adjust. In questo esempio, le immagini sono raffigurate come trasparenti al 40 percento senza altre conversioni di colore (GraphicColorMode = STANDARD).

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools