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

ドローページへのアクセスについては[[ドローページ>../drawpage]]を見てください。

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

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

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

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

様々な図形に関しては [[Draw>OOoBasic/Draw]] も参照してください。

#contents
**テキストシェープ [#hc694f2c]
テキストシェープのサービス名は 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

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

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


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

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

を指定します。

**ラインシェープ [#u919da0f]
ラインシェープは 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'' メソッドを利用します。

**四角形シェープ [#lf2d3cda]
長方形を描く四角形シェープは 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

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

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

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

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


**シェープのプロパティー [#d6f49bcd]

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

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

この struct のプロパティーは ''X'' と ''Y'' です。1/100 mm 単位で指定します。ドローページの右上から,右方向が X,下方向が Y になります。
***サイズ [#e45bfe90]
サイズのプロパティーは ''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