Top > OOoBasic > Calc > drawings

図形描写 Edit

Calc で図形描写を使用してみます。図形描写のそれぞれのオブジェクトはドローページに配置されているので,ドローページへアクセスする必要があります。

ドローページへのアクセスについてはドローページを見てください。

図形描写ではさまざまなオブジェクトを描くことができます。

図形描写でドローページへ新しいシェープを追加するときには,次のようにします。

  1. ドローページオブジェクトを取得する。
  2. ドキュメントオブジェクトの AvailableServiceNames プロパティーで利用できるシェープサービス名のサービスを createInstance メソッドでインスタンス化する。
  3. インスタンス化したシェープオブジェクトのプロパティーを変更する。サイズや位置など。
  4. ドローページオブジェクトの add メソッドを使用してシェープを追加する。

シェープは同じ種類のプロパティーを持っているので,まとめて取り上げます。

様々な図形に関しては Draw も参照してください。

テキストシェープ Edit

テキストシェープのサービス名は com.sun.star.drawing.TextShape です。

位置やサイズ,テキスト以外のプロパティーを設定せずにインスタンスを作成してドローページへ追加すると,普通のテキストが描かれるテキストシェープになります。

でも,サイズや位置を指定して挿入するのが普通です。

次のコードでは Calc ドキュメントの一番目のシートにテキストシェープを挿入して "text shape" の文字を入力します。

Sub textshape_1
Dim oDoc As Object, oSheet As Object
Dim oTextShape As Object, oDrawpage As Object
Dim oText As Object
Dim aPos As New com.sun.star.awt.Point
Dim aSize As New com.sun.star.awt.Size

  oDoc = ThisComponent
  oSheet = oDoc.getSheets().getByIndex(0)
  oDrawPage = oSheet.DrawPage

  oTextShape = oDoc.createInstance("com.sun.star.drawing.TextShape")
  oText = oTextShape.getText()

  aPos.X = 1500
  aPos.Y = 2000

  aSize.Width = 10000
  aSize.Height = 1000

  oTextShape.setPosition(aPos)
  oTextShape.setSize(aSize)

  oDrawPage.add(oTextShape)

  oText.String = "text shape" 
End Sub

シェープを作成する際の手順はいつも大体次のようになります。

  1. ドローページへアクセスできるようにしておく
  2. シェープのインスタンスを作成する
  3. サイズと位置を設定する
  4. ドローページへ挿入する
  5. シェープのプロパティーを設定する

縦書きテキストにするには,TextWritingMode プロパティーを設定します。このプロパティーは com.sun.star.text.WritingMode2 の定数を使用して設定します。

oTextShape.TextWritingMode = com.sun.star.text.WritingMode2.TB_RL

を指定します。

ラインシェープ Edit

ラインシェープは com.sun.star.drawing.LineShape サービスによるものです。

位置やサイズを設定してドローページに追加します。

Sub lineshape
Dim oDoc As Object, oSheet As Object
Dim oDrawpage As Object
Dim oLineShape As Object
Dim aPos As New com.sun.star.awt.Point
Dim aSize As New com.sun.star.awt.Size
  oDoc = ThisComponent
  oSheet = oDoc.getSheets().getByIndex(0)
  oDrawPage = oSheet.DrawPage
  oLineShape = oDoc.createInstance("com.sun.star.drawing.LineShape")
  
  aPos.X = 400
  aPos.Y = 500

  aSize.Width = 1000
  aSize.Height = 500
  
  oLineShape.setPosition(aPos)
  oLineShape.setSize(aSize)

  oDrawPage.add(oLineShape)
End Sub

まず,createnInstance メソッドを利用してラインシェープのための .drawing.LineShape サービスをインスタンス化します。

位置の設定には aPos 変数に com.sun.star.awt.Point struct を使用し,サイズの設定には com.sun.star.awt.Size struct を使用します。順に,setPosition メソッドで位置を,setSize メソッドでサイズを設定します。

サイズおよび位置はすべて mm 単位の 1/100 で指定します。そのため,上のコードで追加したラインシェープの位置はシートの左上から (x, y) = (4 mm, 5 mm) の位置になります。

シェープの二点目の位置は座標で指定するのではなくて一点目からの幅と高さで指定します。

ドローページへのシェープの追加には add メソッドを利用します。

四角形シェープ Edit

長方形を描く四角形シェープは com.sun.star.drawing.RectangleShape です。

やはり,位置やサイズを指定してドローページへ追加します。

Sub rectangleshape
Dim oDoc As Object, oSheet As Object
Dim oRectangleShape As Object, oDrawpage As Object
Dim aPos As New com.sun.star.awt.Point
Dim aSize As New com.sun.star.awt.Size
  oDoc = ThisComponent
  oSheet = oDoc.getSheets().getByIndex(0)
  oDrawPage = oSheet.DrawPage
  oRectangleShape = oDoc.createInstance("com.sun.star.drawing.RectangleShape")
  
  aPos.X = 400
  aPos.Y = 500
  aSize.Width = 1000
  aSize.Height = 500
  
  oRectangleShape.setPosition(aPos)
  oRectangleShape.setSize(aSize)

  oDrawPage.add(oRectangleShape)
End Sub

位置とサイズしか指定せずに追加すると,アプリケーション上で描いた四角形シェープとおなじようなシェープになります。必要なプロパティーを設定してゆく必要があります。

円シェープ Edit

円シェープは com.sun.star.drawing.EllipseShape サービスを利用します。

このサービスをインスタンス化して使用します。

oDoc.createInstance("com.sun.star.drawing.EllipseShape")

シェープのプロパティー Edit

シェープの持つプロパティーは同じなので,一度にまとめて取り上げます。

位置 Edit

位置のプロパティーは Position です。このプロパティーは com.sun.star.awt.Point struct を利用して設定します。

この struct のプロパティーは XY です。1/100 mm 単位で指定します。ドローページの右上から,右方向が X,下方向が Y になります。

サイズ Edit

サイズのプロパティーは Size です。com.sun.star.awt.Size struct を使用して設定します。

この struct のプロパティーは Width および Height です。ともに,1/100 mm 単位で指定します。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes