StarSuite 8 Basic プログラミングガイド
  Rechercher uniquement dans ce livre
Télécharger cet ouvrage au format PDF (1383 Ko)

第 8 章 図形描画とプレゼンテーション

本章では、マクロ制御による図形描画ドキュメントの作成と編集方法について説明します。最初の節では、図形描画ドキュメントの構造について、これらを構成する基本要素なども含めて説明します。次の節では、オブジェクトのグループ化、回転、サイズ変更など、より複雑な操作方法を説明します。

図形描画ドキュメントの作成、オープン、保存については、第 5 章「StarSuite ドキュメントの操作」を参照してください。

図形描画ドキュメントの構造

StarSuite の図形描画ドキュメントには、特にページ数の制限はありません。これらの各ページは、それぞれ個別に編集できます。またページごとに配置できる図形描画要素の数についても、特に制限はありません。

ただしレイヤーという概念があるため、これらの関係は多少複雑です。標準の図形描画ドキュメントには、レイアウトコントロール寸法線というレイヤーが用意されており、すべての図形描画要素はレイアウトレイヤーに配置します。これらの他にも、ユーザーが新規レイヤーを追加することも可能です。図形描画用のレイヤーの詳細については、StarSuite の 『開発ガイド』を参照してください。

ページ

図形描画ドキュメント内のページへのアクセスには、DrawPages リストを利用します。また個々のページに対しては、番号または名前により指定できます。ドキュメント内に Slide 1 という名前のページだけしかない場合、以下の 2 つのサンプルコードは同じ動作を示します。

例 1:

Dim Doc As Object
Dim Page As Object

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

例 2:

Dim Doc As Object
Dim Page As Object

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

上記の例 1 では、ページへのアクセスを番号指定で行なっています (開始値は 0)。 上記の例 2 では、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

上記の呼び出しを実行すると、com.sun.star.drawing.DrawPage サービスをサポートしたページオブジェクトが返されます。このサービスでは、以下の属性を使用できます。

  • BorderLeft (ロング整数) – 100 分の 1 ミリ単位で指定した、左側の外枠線。

  • BorderRight (ロング整数) – 100 分の 1 ミリ単位で指定した、右側の外枠線。

  • BorderTop (ロング整数) – 100 分の 1 ミリ単位で指定した、上側の外枠線。

  • BorderBottom (ロング整数) – 100 分の 1 ミリ単位で指定した、下側の外枠線。

  • Width (ロング整数) – 100 分の 1 ミリ単位で指定した、ページ幅。

  • Height (ロング整数) – 100 分の 1 ミリ単位で指定した、ページの高さ。

  • Number (整数) – ページ数 (開始値は 1)。読み取り専用。

  • Orientation (列挙型) – ページの方向 (com.sun.star.view.PaperOrientation に定められた値)。

これらの設定値の変更は、該当ドキュメント内の すべて のページに適用されます。

以下のサンプルコードは、新規に開いた図形描画ドキュメントに対して、ページサイズを 20 × 20 センチメートル、ページ余白を 0.5 センチメートルに設定します。

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

図形描画オブジェクトの基本属性

図形描画オブジェクトには、図形 (四角形や円など)、線、テキストなどのオブジェクトが該当します。これらのオブジェクトは com.sun.star.drawing.Shape サービスをサポートしており、多数の機能が共通しています。たとえば図形描画オブジェクトの SizePosition 属性は、このサービスに定義されています。

なお書式設定や塗りつぶしなど、位置やサイズ以外の属性の変更については、StarSuite Basic に用意されているその他の各種サービスを利用します。どのような書式設定オプションが利用できるかは、図形描画オブジェクトの種類によって異なります。

以下のサンプルコードでは、四角形を作成して、図形描画ドキュメント上に挿入します。

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)

このサンプルコードでは、オープンするドキュメントの指定に StarDesktop.CurrentComponent を使用しています。このようにして指定されたドキュメントオブジェクトに対しては、drawPages(0) を実行することで、その最初のページを取得できます。

次に Point および Size という構造体を使って、図形描画オブジェクトの原点 (左隅) とサイズを指定しています。これらの値は、100 分の 1 ミリ単位で指定します。

その次にくる Doc.createInstance のコード行では、com.sun.star.drawing.RectangleShape サービスを指定することで、四角形の図形描画オブジェクトを作成しています。最後に実行する Page.add のコード行では、作成した図形描画オブジェクトをページ上に挿入しています。

塗りつぶし属性

この節では 4 つのサービスに付いて説明し、四角形オブジェクトに対して各種の書式設定を行うサンプルコードを紹介します。塗りつぶし関係の属性は、com.sun.star.drawing.FillProperties サービスで扱われます。

StarSuite で行う塗りつぶしに関しては、大きく分けて 4 種類の書式設定が存在します。最も単純なものは、単一色による塗りつぶしです。その他に、複数の色を組み合わせたグラデーションおよびハッチングのオプションもあります。そして第 4 のタイプとして、既存の画像を塗りつぶし領域にはめ込むというオプションも使用できます。

図形描画オブジェクトの塗りつぶしモードは、FillStyle 属性で指定します。指定可能な値は、com.sun.star.drawing.FillStyle に定義されています。

単一色による塗りつぶし

単一色による塗りつぶしを行う場合、主として以下の属性を使用します。

  • FillColor (ロング整数) – 領域の塗りつぶし色。

この塗りつぶしモードを使用するには、FillStyle 属性を SOLID に設定しておく必要があります。

以下のサンプルコードでは、四角形オブジェクトを作成して、赤の単一色 (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)

色のグラデーション

FillStyle 属性に GRADIENT を設定すると、StarSuite ドキュメント上の塗りつぶし領域に対して、色のグラデーションを施すことができます。

事前定義されたグラデーションを適用する場合は、FillTransparenceGradientName 属性に該当するグラデーション名を指定します。グラデーションを定義する場合は、com.sun.star.awt.Gradient 構造体の形で必要な設定を指定して、FillGradient 属性に渡します。この属性には、以下のオプションを使用できます。

  • Style (列挙型) - 線形や放射線状などのグラデーションの種類の指定 (com.sun.star.awt.GradientStyle に定められた値)。

  • StartColor (ロング整数) - グラデーションの開始色。

  • EndColor (ロング整数) - グラデーションの終了色。

  • Angle (整数) - 10 分の 1 度単位で指定したグラデーションの角度。

  • XOffset (整数) - 100 分の 1 ミリ単位で指定した、グラデーション開始点の X 座標。

  • YOffset (整数) - 100 分の 1 ミリ単位で指定した、グラデーション開始点の Y 座標。

  • StartIntensity (整数) - パーセント単位で指定した StartColor の強度 (StarSuite Basic では 100 パーセント以上の値も指定可能)。

  • EndIntensity (整数) - パーセント単位で指定した EndColor の強度 (StarSuite Basic では 100 パーセント以上の値も指定可能)。

  • StepCount (整数) - StarSuite に計算させるグラデーションのステップ数。

以下のサンプルコードでは、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)

このサンプルコードでは、線形のグラデーションを施しています (Style = LINEAR)。グラデーションは左上隅の開始色 (StartColor) を赤、右下隅の終了色 (EndColor) を緑として、角度 (Angle) を 45 度にしています。開始色と終了色の強度 (StartIntensity および EndIntensity) はともに 150 パーセントとしてあるので、StartColorEndColor 属性の指定色よりも明るく表示されます。グラデーションする色のステップ数は 100 段階としてあります (StepCount)。

ハッチング

塗りつぶしにハッチングを施す場合は、FillStyle 属性を HATCH に設定しておく必要があります。ハッチング用のプログラムコードは、グラデーションの場合とよく似た手順を取ります。ここでは、ハッチングの模様を指定するのに com.sun.star.drawing.Hatch 構造体を使用します。こうしたハッチング用の構造体には、以下の属性を指定できます。

  • Style (列挙型) - 横線、横縦線、横縦斜線などのハッチングの種類の指定 (com.sun.star.awt.HatchStyle に定められた値)。

  • Color (ロング整数) - 線の表示色。

  • Distance (ロング整数) - 100 分の 1 ミリ単位で指定した、線の間隔。

  • Angle (整数) - 10 分の 1 度単位で指定したハッチングの角度。

以下のサンプルコードは、ハッチング指定用の構造体の使用法を示します。

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)

このサンプルコードでは、線の種類を横線 (HatchStyle = SINGLE) にして、ハッチングの角度 (Angle) を 45 度にしています。また線の表示色 (Color) は灰色、線の間隔 (Distance) は 0.2 ミリメートルとしています。

ビットマップ

ビットマップによる塗りつぶしを行うには、FillStyle 属性に BITMAP を指定する必要があります。必要なビットマップが StarSuite 上にすでに配置されているのであれば、FillBitMapName 属性にその名前を指定し、FillBitmapMode 属性に表示スタイル (シンプル、繰り返し、拡大) を指定します (com.sun.star.drawing.BitmapMode に定められた値)。

外部のビットマップファイルを使用する場合は、その URL を FillBitmapURL 属性に指定します。

以下のサンプルコードでは、四角形を描画して、StarSuite に用意されている Sky というビットマップで、その中を埋めています。

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)

透過性

塗りつぶしをする際には、その透過性を指定できます。最も簡単な指定法は、FillTransparence 属性を利用することです。

以下のサンプルコードでは、赤色の四角形を描画し、その透過性を 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)

FillTransparence 属性の値を 100 とすると、塗りつぶしは完全な透明になります。

com.sun.star.drawing.FillProperties サービスには、FillTransparence 属性以外にも FillTransparenceGradient という属性が用意されています。この属性は、塗りつぶし領域のグラデーション指定に使用します。

線の属性

外枠の線を表示可能なすべてのオブジェクトは、com.sun.star.drawing.LineStyle サービスをサポートしています。このサービスに用意されている代表的な属性としては、以下のものがあります。

  • LineStyle (列挙型) - 線の種類 (com.sun.star.drawing.LineStyle に定められた値)。

  • LineColor (ロング整数) - 線の色。

  • LineTransparence (整数) - 線の透過性。

  • LineWidth (ロング整数) - 100 分の 1 ミリ単位で指定した線の幅。

  • LineJoint (列挙型) - 線の接続する点の形状 (com.sun.star.drawing.LineJoint に定められた値)

以下のサンプルコードは外枠付きの四角形を描画するもので、線の種類を実線 (LineStyle = SOLID)、線の幅 (LineWidth) を 5 ミリメートルとし、線の透過性を 50 パーセントとしています。外枠線の頂点の形状は、直角にするように指定しています (LineJoint = MITER)。

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)

com.sun.star.drawing.LineStyle サービスには、上記に一覧した属性以外にも、点線や破線を描画するためのオプションが用意されています。詳細情報については、StarSuite の『API reference』を参照してください。

テキスト属性 (図形描画オブジェクト)

図形描画オブジェクト内のテキストの書式設定を行うには、com.sun.star.style.CharacterProperties および com.sun.star.style.ParagraphProperties サービスを使用します。これらのサービスは、個々の文字や段落に関する指定を行うものですが、詳細については第 6 章「文書ドキュメント」で説明してあります。

以下のサンプルコードでは、描画した四角形にテキストを挿入し、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"

上記のサンプルコードでは、四角形オブジェクトの String 属性 を用いて表示テキストを指定してから、このテキストの書式設定を com.sun.star.style.CharacterProperties サービスの CharWeight および CharFontName 属性を利用して行なっています。

オブジェクト中へテキストを挿入するには、図形描画ページ上に該当するオブジェクトを事前に追加しておく必要があります。図形描画オブジェクト内でのテキストの表示位置と書式に関しては、com.sun.star.drawing.Text サービスも利用できます。このサービスに用意されている代表的な属性としては、以下のものがあります。

  • TextAutoGrowHeight (ブール値) – 図形描画要素の高さを、その中の表示テキストに合わせる指定。

  • TextAutoGrowWidth (ブール値) - 図形描画要素の幅を、その中の表示テキストに合わせる指定。

  • TextHorizontalAdjust (列挙型) - 図形描画要素内のテキストの水平方向の表示位置 (com.sun.star.drawing.TextHorizontalAdjust に定められた値)

  • TextVerticalAdjust (列挙型) - 図形描画要素内のテキストの垂直方向の表示位置 (com.sun.star.drawing.TextVerticalAdjust に定められた値)

  • TextLeftDistance (ロング整数) - 100 分の 1 ミリ単位で指定した、図形描画要素の左端からテキストまでの間隔。

  • TextRightDistance (ロング整数) - 100 分の 1 ミリ単位で指定した、図形描画要素の右端からテキストまでの間隔。

  • TextUpperDistance (ロング整数) - 100 分の 1 ミリ単位で指定した、図形描画要素の上端からテキストまでの間隔。

  • TextLowerDistance (ロング整数) - 100 分の 1 ミリ単位で指定した、図形描画要素の下端からテキストまでの間隔。

以下のサンプルコードは、これらの属性の使用例です。

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

このサンプルコードでは、ページ上に図形描画要素を挿入してからテキストを挿入し、このテキストの配置位置を TextVerticalAdjust および TextHorizontalAdjust 属性を用いて、図形描画オブジェクトの左上隅に設定しています。また図形描画要素の外形線からテキストまでの最小間隔は、3 ミリメートルとしています。

影の属性

図形描画オブジェクトの多くには、com.sun.star.drawing.ShadowProperties サービスを用いて、影を表示することができます。このサービスでは、以下の属性を利用できます。

  • Shadow (ブール値) – 影を表示させる指定。

  • ShadowColor (ロング整数) – 影の色の指定。

  • ShadowTransparence (整数) – 影の透過性の指定。

  • ShadowXDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、影と図形描画オブジェクトの垂直方向の間隔。

  • ShadowYDistance (ロング整数) – 100 分の 1 ミリ単位で指定した、影と図形描画オブジェクトの水平方向の間隔。

以下のサンプルコードでは、四角形のオブジェクトを作成し、水平および垂直方向のオフセットを 2 ミリメートルとした影を表示します。影の色は灰色、透過性は 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)

各種の図形描画オブジェクトの概要

四角形オブジェクト

四角形オブジェクト (com.sun.star.drawing.RectangleShape) は、以下の表示設定用サービスをサポートしています。

  • 塗りつぶし関係の属性com.sun.star.drawing.FillProperties

  • 線関係の属性com.sun.star.drawing.LineProperties

  • テキスト関係の属性com.sun.star.drawing.Text (com.sun.star.style.CharacterProperties および com.sun.star.style.ParagraphProperties と併用)

  • 影関係の属性com.sun.star.drawing.ShadowProperties

  • CornerRadius (ロング整数) – 100 分の 1 ミリ単位で指定した、角の丸みの半径

円および楕円オブジェクト

com.sun.star.drawing.EllipseShape サービスは、円および楕円の表示関係の処理を行うもので、以下のサービスをサポートしています。

  • 塗りつぶし関係の属性com.sun.star.drawing.FillProperties

  • 線関係の属性com.sun.star.drawing.LineProperties

  • テキスト関係の属性com.sun.star.drawing.Text (com.sun.star.style.CharacterProperties および com.sun.star.style.ParagraphProperties と併用)

  • 影関係の属性com.sun.star.drawing.ShadowProperties

円と楕円オブジェクトには、これらの他に以下の 3 つの属性が用意されています。

  • CircleKind (列挙型) – 円および楕円の種類 (com.sun.star.drawing.CircleKind に定められた値)。

  • CircleStartAngle (ロング整数) – 10 分の 1 度単位で指定した、切片の開始角 (円および楕円形の切片の描画のみで有効)。

  • CircleEndAngle (ロング整数) – 10 分の 1 度単位で指定した、切片の終了角 (円および楕円形の切片の描画のみで有効)。

CircleKind 属性は、円全体を描画するか、あるいは切片や円弧として描画するかを指定します。指定可能な値は以下のものです。

  • com.sun.star.drawing.CircleKind.FULL – 円または楕円の全体

  • com.sun.star.drawing.CircleKind.CUT – 円の切片 (円弧の両端を直線で結んだ図形)

  • com.sun.star.drawing.CircleKind.SECTION – 扇型

  • com.sun.star.drawing.CircleKind.ARC – 円弧 (円の外周線の部分のみ)

以下のサンプルコードは、中心角 70 度の扇型を描画します (開始角を 20 度、終了角 90 度に設定)。

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)

線オブジェクト

StarSuite には線オブジェクトの表示設定用に、com.sun.star.drawing.LineShape サービスが用意されています。線オブジェクトは、表面関係の指定を除いた、基本的な表示指定サービスをすべてサポートしています。LineShape サービスで利用する属性は以下のものです。

  • 線関係の属性com.sun.star.drawing.LineProperties

  • テキスト関係の属性com.sun.star.drawing.Text (com.sun.star.style.CharacterProperties および com.sun.star.style.ParagraphProperties と併用)

  • 影関係の属性com.sun.star.drawing.ShadowProperties

以下のサンプルコードでは、線オブジェクトを作成し、上記の属性を用いて各種の表示を設定します。なお線の始点は Location 属性で指定しますが、終点は Size 属性の座標による間接的に指定します。

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)

多角形オブジェクト

StarSuite には、複雑な多角形を描画するための com.sun.star.drawing.PolyPolygonShape サービスも用意されています。ただし正確には、ここでの PolyPolygon は単純な多角形ではなく、複合多角形を意味します。そのため、1 つのオブジェクト全体は、個々の頂点を指定する各種のリストから構成されます。

多角形オブジェクトに対しても、四角形同様の表示設定属性が各種用意されています。

  • 塗りつぶし関係の属性com.sun.star.drawing.FillProperties

  • 線関係の属性com.sun.star.drawing.LineProperties

  • テキスト関係の属性com.sun.star.drawing.Text (com.sun.star.style.CharacterProperties および com.sun.star.style.ParagraphProperties と併用)

  • 影関係の属性com.sun.star.drawing.ShadowProperties

また PolyPolygonShape サービスには、多角形の座標指定用に、以下の属性も用意されています。

  • PolyPolygon (配列) – 多角形の座標を指定するフィールド (com.sun.star.awt.Point タイプのデータを格納する配列)

以下のサンプルコードは、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())

ここでの多角形は、個々の頂点を絶対座標により指定するため、多角形のサイズや表示位置などの指定は不要です。その代わりここでは、頂点の座標データを収めた配列を用意して、これを第 2 の配列に変換 (Array(Coordinates() による処理) してから、多角形の頂点指定用属性に代入しています。なお多角形への頂点指定を行う前には、多角形オブジェクトをドキュメント上に挿入しておく必要があります。

頂点指定用の配列を利用することで、複数の多角形を組み合わせた図形を構築できます。たとえば、四角形の中に別の四角形を挿入することで、穴の空いた四角形を描画できます。

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 の実行が必要
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())

このような操作を行う場合、どの領域が残り、どの領域が消去されるかが問題となりますが、StarSuite では「外部のオブジェクトの縁が多角形の外周部となる」という規則に従って処理されます。同様に、内側の縁は多角形の内周部となるので、こうした部分に穴が空くことになります。更に内側にくる縁がある場合は、そこから塗りつぶされた領域の描画が再開されます。

図オブジェクト

最後に説明する図形描画要素は図オブジェクトです。これは com.sun.star.drawing.GraphicObjectShape サービスを利用します。このサービスは、StarSuite のすべての画像に対して利用可能で、各種の属性を通じて画像の表示に関する設定を行います。

図オブジェクトは、以下の 2 つの表示設定用属性をサポートしています。

  • テキスト関係の属性com.sun.star.drawing.Text (com.sun.star.style.CharacterProperties および com.sun.star.style.ParagraphProperties と併用)

  • 影関係の属性com.sun.star.drawing.ShadowProperties

図オブジェクトのサポートするその他の属性には、以下のものがあります。

  • GraphicURL (文字列) – 画像の URL

  • AdjustLuminance (整数) – パーセント単位で指定した、色の輝度 (負の値も指定可能)

  • AdjustContrast (整数) – パーセント単位で指定した、色のコントラスト (負の値も指定可能)

  • AdjustRed (整数) – パーセント単位で指定した、色の赤成分 (負の値も指定可能)

  • AdjustGreen (整数) – パーセント単位で指定した、色の緑成分 (負の値も指定可能)

  • AdjustBlue (整数) – パーセント単位で指定した、色の青成分 (負の値も指定可能)

  • Gamma (整数) – 画像のガンマ値

  • Transparency (整数) – パーセント単位で指定した、画像の透過性

  • GraphicColorMode (列挙型) – 標準、グレースケール、白黒などのカラーモード (com.sun.star.drawing.ColorMode に定められた値)

以下のサンプルコードは、ページへの図オブジェクトの挿入法の例です。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)

上記のサンプルコードでは、test.jpg というファイル名の画像を挿入して、その表示設定を Adjust 関係の属性により行なっています。またここでは、画像の透過性を 40 パーセントとし、カラーモードは標準のままとしています (GraphicColorMode = STANDARD)。

図形描画オブジェクトの編集

オブジェクトのグループ化

複数の図形描画オブジェクトをグループ化して、1 つのオブジェクトとして扱えると便利な場合があります。

以下のサンプルコードは、2 つのオブジェクトをグループ化します。

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

上記のサンプルコードでは、まず四角形および円形のオブジェクトを作成し、ページへ挿入しています。そして次に、com.sun.star.drawing.ShapeCollection というサービスをサポートしたオブジェクトを新規に作成し、先に作成しておいた四角形と円形のオブジェクトを Add メソッドを用いてこの新規オブジェクトに追加しています。そして Group というメソッドを使用し、この ShapeCollection のサポートオブジェクトをページに挿入することにより、実際の Group オブジェクトを作成しています。このグループ化オブジェクトは、1 つの独立した図形描画オブジェクトと同様な操作が行えます。

グループ化する各オブジェクトに対する表示設定は、グループ化を行う前に実行しておく必要があります。いったんグループ化すると、このようなオブジェクトに変更を加えることはできません。

図形描画オブジェクトの回転と傾斜

これまでの節で説明した図形描画オブジェクトに対しては、com.sun.star.drawing.RotationDescriptor サービスを用いて回転させたり傾斜させたりすることができます。

このサービスには、以下の属性が用意されています。

  • RotateAngle (ロング整数) – 100 分の 1 度単位で指定した回転角

  • ShearAngle (ロング整数) – 100 分の 1 度単位で指定した傾斜角

以下のサンプルコードでは、四角形を作成して、RotateAngle 属性による 30 度回転させます。

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)

以下のサンプルコードでも上記と同様の四角形を作成していますが、ここでは ShearAngle 属性による 30 度の傾斜を与えています。

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)

検索と置換

図形描画ドキュメントにも、文書ドキュメント同様の検索および置換用の機能が用意されています。実際このような検索と置換は、第 6 章「文書ドキュメント」で説明した、文書ドキュメントの該当する機能とよく似ています。ただし図形描画ドキュメントの場合、検索と置換を表すオブジェクトはドキュメントオブジェクトから直接作成されるのではなく、文字が関連付けられているページから作成されます。以下のサンプルコードは、このような検索と置換の手順を説明するために用意した例です。

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

上記のサンプルコードでは、図形描画ドキュメント上の最初の DrawPage を対象として ReplaceDescriptor を作成してからループに入り、該当ドキュメントのすべてのページを対象とする処理を行なっています。

プレゼンテーション

StarSuite のプレゼンテーションドキュメントは、図形描画ドキュメントをベースに構成されています。プレゼンテーションを構成する各ページは、スライドとも呼びます。図形描画ドキュメント内のページへのアクセスには、DrawPages リストが利用できましたが、このようなプレゼンテーション内のページへのアクセスも同様の手順で行えます。プレゼンテーションドキュメントの処理に利用するのは com.sun.star.presentation.PresentationDocument サービスと呼ばれるものですが、これは com.sun.star.drawing.DrawingDocument サービスのすべても提供しています。

プレゼンテーションの操作

プレゼンテーションドキュメントには、Presentation 属性による図形描画機能の他に、プレゼンテーションオブジェクトというものが存在し、プレゼンテーションで利用する主要な属性やコントロールへのアクセスには、このオブジェクトを利用します。たとえば、プレゼンテーションを開始する際の start メソッドは、このオブジェクトを利用して実行します。

Dim Doc As Object
Dim Presentation As Object
   
Doc = StarDesktop.CurrentComponent
Presentation = Doc.Presentation
Presentation.start()

上記のサンプルコードでは、現在のプレゼンテーションドキュメントを参照する Doc オブジェクトを作成し、このオブジェクトを通じて、該当するプレゼンテーションオブジェクトを取得しています。そしてこのオブジェクトに対して start() メソッドを実行することで、プレゼンテーションの連続実行を開始させています。

プレゼンテーションオブジェクトには、以下のメソッドが用意されています。

  • start - プレゼンテーションを開始します。

  • end - プレゼンテーションを終了します。

  • rehearseTimings - 先頭ページからプレゼンテーションを開始し、ページ切り替えのタイミング設定を行います。

また以下の属性を指定することもできます。

  • AllowAnimations (ブール値) – プレゼンテーション内のアニメーションを実行する指定。

  • CustomShow (文字列) – 目的別スライドショーで実行するプレゼンテーション名の指定。

  • FirstPage (文字列) – プレゼンテーションを開始するページ名の指定。

  • IsAlwaysOnTop (ブール値) – プレゼンテーションウィンドウを画面の一番手前のウィンドウとする指定。

  • IsAutomatic (ブール値) – プレゼンテーションを自動的に実行する指定。

  • IsEndless (ブール値) – プレゼンテーション終了時に、最初から再実行する指定。

  • IsFullScreen (ブール値) – フルスクリーンでプレゼンテーションを自動的に実行する指定。

  • IsMouseVisible (ブール値) – プレゼンテーション実行中にマウスポインタを表示する指定。

  • Pause (ロング整数) – プレゼンテーション終了時に使用するブラック画面の表示時間の指定。

  • StartWithNavigator (ブール値) – プレゼンテーション開始時にナビゲータウィンドウを表示する指定。

  • UsePn (ブール値) – プレゼンテーション実行中に、書き込み用のペンポインタを表示する指定。