These search terms have been highlighted:ConnectorShape
図形 
図形、シェープの種類と描写方法について説明します。
図形の種類 
図形の種類と一般的なプロパティ一覧です。
サービス名 | 図形名 | シェープ | 塗り | 線 | 影 | テキスト | 回転 | ポリポリゴン |
com.sun.star.drawing.AppletShape | Java アプレット | X | | | | | | |
com.sun.star.drawing.CaptionShape | キャプション | X | X | X | X | X | X | |
com.sun.star.drawing.ClosedBezierShape | 閉じたベジェ | X | X | X | X | X | X | |
com.sun.star.drawing.ClosedFreeHandShape | 閉じたフリーハンド | | | | | | | |
com.sun.star.drawing.ConnectorShape | コネクタ | X | | X | X | X | X | |
com.sun.star.drawing.ControlShape | コントロール | X | | | | | | |
com.sun.star.drawing.CustomShape | カスタム | X | X | X | X | X | X | |
com.sun.star.drawing.EllipseShape | 楕円形 | X | X | X | X | X | X | |
com.sun.star.drawing.FrameShape | フレーム | X | | | | | | |
com.sun.star.drawing.GraphicObjectShape | 画像 | X | | | X | X | X | |
com.sun.star.drawing.LineShape | 直線 | X | | | X | X | X | X |
com.sun.star.drawing.MeasureShape | 尺 | X | | X | X | X | X | |
com.sun.star.drawing.MediaShape | 音楽と動画 | X | | | | | | |
com.sun.star.drawing.OLE2Shape | 埋め込み型オブジェクト | X | | | | | | |
com.sun.star.drawing.OpenBezierShape | 開いたベジェ | X | | X | X | X | X | X |
com.sun.star.drawing.OpenFreeHandShape | 開いたフリーハンド | | | | | | | |
com.sun.star.drawing.PageShape | ページ | X | | | | | | |
com.sun.star.drawing.PluginShape | プラグイン | X | | | | | | |
com.sun.star.drawing.PolyLinePathShape | ポリラインパス | | | | | | | |
com.sun.star.drawing.PolyLineShape | ポリライン | X | | X | X | X | X | X |
com.sun.star.drawing.PolyPolygonPathShape | | | | | | | | |
com.sun.star.drawing.PolyPolygonShape | ポリポリゴン | X | X | X | X | X | X | X |
com.sun.star.drawing.RectangleShape | 四角形 | X | X | X | X | X | X | |
com.sun.star.drawing.TextShape | テキスト | X | X | X | X | X | X | |
図形の描写 
シェープの描写は次のような手順で行います。
- シェープをインスタンス化する
- シェープの位置とサイズを設定する
- (必要なプロパティを設定する)
- ページに追加する
- プロパティを設定する
多くの図形ではページに図形を追加する前にプロパティを変更できません。ほとんどのプロパティの設定はページに図形を追加した後で行います。
直線 
直線は com.sun.star.drawing.LineShape サービスを利用します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| | Sub shapes_line
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oLineShape = oDoc.createInstance("com.sun.star.drawing.LineShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 5000
aSize.Height = 5000
oLineShape.setPosition(aPoint)
oLineShape.setSize(aSize)
oDrawPage.add(oLineShape)
End Sub
|
ベジェ曲線 
開いたベジェ曲線は com.sun.star.drawing.OpenBezierShape サービス、閉じたベジェ曲線は com.sun.star.drawing.ClosedBezierShape サービスを利用します。閉じたベジェ曲線は始点と終点が結ばれます。
うまくベジェ曲線を書くのは座標の指定が大変です。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| | Sub shapes_openbezier
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oOpenBezierShape = oDoc.createInstance("com.sun.star.drawing.OpenBezierShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
' aPoint.X = 5000
' aPoint.Y = 1000
' aSize.Width = 5000
' aSize.Height = 5000
oOpenBezierShape.setPosition(aPoint)
'oOpenBezierShape.setSize(aSize)
Dim aPoints(6) As New com.sun.star.awt.Point
aPoints(0).X = 1000 ' first point
aPoints(0).Y = 3500
aPoints(1).X = 2500 ' control of the first point
aPoints(1).Y = 0
aPoints(2).X = 6000 ' control of the second point
aPoints(2).Y = 0
aPoints(3).X = 10500 ' second point
aPoints(3).Y = 4000
aPoints(4).X = 8000 ' control of the second point
aPoints(4).Y = 6600
aPoints(5).X = 12000 ' control of the third point
aPoints(5).Y = 7600
aPoints(6).X = 13000 ' third point
aPoints(6).Y = 3500
ePolygonFlags = com.sun.star.drawing.PolygonFlags
aFlags() = Array( _
ePolygonFlags.NORMAL,ePolygonFlags.CONTROL,_
ePolygonFlags.CONTROL,ePolygonFlags.SYMMETRIC,ePolygonFlags.CONTROL, _
ePolygonFlags.CONTROL,ePolygonFlags.NORMAL)
aPolyPolygonBezierCoords = CreateUnoStruct("com.sun.star.drawing.PolyPolygonBezierCoords")
aPolyPolygonBezierCoords.Coordinates = Array(aPoints)
aPolyPolygonBezierCoords.Flags = Array(aFlags)
oDrawPage.add(oOpenBezierShape)
oOpenBezierShape.PolyPolygonBezier = aPolyPolygonBezierCoords
End Sub
|
ベジェ曲線の各点の指定は複雑ですが、線の始点と終点の二点のみが制御点を一つだけもち、中間点は制御点を二つ持ちます。そして、点の指定順は「始点」-「始点の制御点」-「中間点の制御点1」-「中間点」-「中間点の制御点2」-「終点の制御点」-「終点」の順になります。

テキスト 
テキストは com.sun.star.drawing.TextShape サービスで描きます。テキストは図形挿入後に設定します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| | Sub shapes_text
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oTextShape = oDoc.createInstance("com.sun.star.drawing.TextShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 5000
aSize.Height = 5000
oTextShape.setPosition(aPoint)
oTextShape.setSize(aSize)
oDrawPage.add(oTextShape)
oTextShape.setString("TEXT IN THE TEXT SHAPE")
End Sub
|
テキストシェープは他の図形と同じように背景などの設定利用できます。また、CornerRadius プロパティを設定すれば四角形のように枠線の角を丸められます。四角形の描写を参照してください。
四角形 
四角形は com.sun.star.drawing.RectangleShape サービスで作成します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| | Sub shapes_rect
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oRectShape = oDoc.createInstance("com.sun.star.drawing.RectangleShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 5000
aSize.Height = 5000
oRectShape.setPosition(aPoint)
oRectShape.setSize(aSize)
oDrawPage.add(oRectShape)
End Sub
|
CornerRadius プロパティを設定すると角の丸まった四角形になります。long 型で指定します。角の丸みは図形の半分の長さまでしか有効になりません。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| | Sub shapes_rect_corner
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oRectShape = oDoc.createInstance("com.sun.star.drawing.RectangleShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 7000
aSize.Height = 5000
oRectShape.setPosition(aPoint)
oRectShape.setSize(aSize)
oRectShape.CornerRadius = 500
oDrawPage.add(oRectShape)
End Sub
|

楕円 
楕円は com.sun.star.drawing.EllipseShape サービスを利用します。
円の描写は、円の半径を指定するのではなく円の幅 Width と高さ Height を指定します。サイズの幅 Width と高さ Height が等しいとき楕円は円になります。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| | Sub shapes_ellipse
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oEllipseShape = oDoc.createInstance("com.sun.star.drawing.EllipseShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 5000
aSize.Height = 5000
oEllipseShape.setPosition(aPoint)
oEllipseShape.setSize(aSize)
oDrawPage.add(oEllipseShape)
End Sub
|
この図形で円の一部分を切り取ったパイ型や、円弧も描けます。円の一部の開始位置を CircleStartAngle に、終了位置を CircleEndAngle に角度の 100 倍の値で指定します。そして、描く種類を CircleKind プロパティに com.sun.star.drawing.CircleKind enu で指定します。
- FULL: 全円
- SECTION: パイ型
- CUT: 切り取り
- ARC: 円弧

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| | Sub shapes_ellipse_kind
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oEllipse = oDoc.createInstance("com.sun.star.drawing.EllipseShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 5000
aSize.Height = 5000
oEllipse.setPosition(aPoint)
oEllipse.setSize(aSize)
oEllipse.CircleKind = com.sun.star.drawing.CircleKind.CUT
oEllipse.CircleStartAngle = 0
oEllipse.CircleEndAngle = 7000 ' 70 degree
oDrawPage.add(oEllipse)
End Sub
|

画像 
画像は com.sun.star.drawing.GraphicObjectShape サービスを利用します。
画像の挿入時に URL を指定するとリンクとして挿入されます。ドキュメントに埋め込まれるように画像を挿入するには後半を参照してください。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| | Sub shapes_graphic_link
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oGraphicShape = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 5000
aSize.Height = 5000
oGraphicShape.setPosition(aPoint)
oGraphicShape.setSize(aSize)
oGraphicShape.GraphicURL = "file:///C:/usr/current_16.png"
oDrawPage.add(oGraphicShape)
End Sub
|
画像がドキュメントに埋め込まれるように挿入します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| | Sub shapes_graphic_embed
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oGraphicShape = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 5000
aSize.Height = 5000
oGraphicShape.setPosition(aPoint)
oGraphicShape.setSize(aSize)
oGP = CreateUnoService("com.sun.star.graphic.GraphicProvider")
Dim aArgs(0) As New com.sun.star.beans.PropertyValue
aArgs(0).Name = "URL"
aArgs(0).Value = "file:///C:/usr/current_16.png"
oGraphic = oGP.queryGraphic(aArgs)
oGraphicShape.Graphic = oGraphic
oDrawPage.add(oGraphicShape)
End Sub
|
コントロール 
コントロールシェープは com.sun.star.drawing.ControlShape サービスに使用したいコントロールモデルを設定して利用します。コントロールのモデルは com.sun.star.frame.component モジュールのサービスを利用します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| | Sub shapes_control
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oControlShape = oDoc.createInstance("com.sun.star.drawing.ControlShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 3000
aSize.Height = 1000
oControlShape.setPosition(aPoint)
oControlShape.setSize(aSize)
oButtonModel = CreateUnoService("com.sun.star.form.component.CommandButton")
oControlShape.setControl(oButtonModel)
oDrawPage.add(oControlShape)
End Sub
|
コネクタ 
線で結ぶコネクタシェープは com.sun.star.drawing.ConnectorShape を利用します。StartShape に開始シェープを、EndShape に接続するシェープを指定します。接続する位置は StartGluePointIndex および EndGluePointIndex に指定します。シェープの接続点は上から時計回りに 0 - 3 で指定します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| | Sub shapes_connector
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oRectShape1 = oDoc.createInstance("com.sun.star.drawing.RectangleShape")
oRectShape2 = oDoc.createInstance("com.sun.star.drawing.RectangleShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 5000
aSize.Height = 5000
oRectShape1.setPosition(aPoint)
oRectShape1.setSize(aSize)
aPoint.X = 9000
aPoint.Y = 1000
oRectShape2.setPosition(aPoint)
oRectShape2.setSize(aSize)
oDrawPage.add(oRectShape1)
oDrawPage.add(oRectShape2)
oConnectorShape = oDoc.createInstance("com.sun.star.drawing.ConnectorShape")
oDrawPage.add(oConnectorShape)
oConnectorShape.StartShape = oRectShape1
oConnectorShape.StartGluePointIndex = 0
oConnectorShape.EndShape = oRectShape2
oConnectorShape.EndGluePointIndex = 3
End Sub
|
コネクタの両端の矢印は直線などの矢印の設定と同じです。
ポリライン 
直線の連続ポリラインは com.sun.star.drawing.PolyLineShape を利用します。PolyPolygon プロパティに各点を指定します。ポリラインは閉じていないため塗りはありません。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| | Sub shapes_polyline
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oPolyLineShape = oDoc.createInstance("com.sun.star.drawing.PolyLineShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
oPolyLineShape.setPosition(aPoint)
Dim aPoints(3) As New com.sun.star.awt.Point
aPoints(0).X = 1000
aPoints(0).Y = 3500
aPoints(1).X = 2500
aPoints(1).Y = 0
aPoints(2).X = 6000
aPoints(2).Y = 0
aPoints(3).X = 10500
aPoints(3).Y = 4000
oDrawPage.add(oPolyLineShape)
oPolyLineShape.PolyPolygon = Array(aPoints)
End Sub
|
ポリポリゴン 
ポリラインとは違いポリポリゴンは直線の連続が閉じたものです。com.sun.star.drawing.PolyPolygonShape サービスを利用します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| | Sub shapes_polypolygon
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oPolyPolygonShape = oDoc.createInstance("com.sun.star.drawing.PolyPolygonShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
oPolyPolygonShape.setPosition(aPoint)
Dim aPoints(3) As New com.sun.star.awt.Point
aPoints(0).X = 1000
aPoints(0).Y = 3500
aPoints(1).X = 2500
aPoints(1).Y = 0
aPoints(2).X = 6000
aPoints(2).Y = 0
aPoints(3).X = 10500
aPoints(3).Y = 4000
oDrawPage.add(oPolyPolygonShape)
oPolyPolygonShape.PolyPolygon = Array(aPoints)
End Sub
|
音楽と動画 
音楽と動画は com.sun.star.drawing.MediaShape サービスを利用します。
MediaURL プロパティに表示再生する音声または画像ファイルを指定します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| | Sub shapes_sound
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oMediaShape = oDoc.createInstance("com.sun.star.drawing.MediaShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 5000
aSize.Height = 5000
oMediaShape.setPosition(aPoint)
oMediaShape.setSize(aSize)
oDrawPage.add(oMediaShape)
oMediaShape.MediaURL = "file:///C:/usr/a/1.wav"
End Sub
|
ページ 
ページシェープはサイドビューのように指定したページのサムネイルを表示します。サービスは com.sun.star.drawing.PageShape です。PageNumber プロパティに表示したいページ番号を指定します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| | Sub shapes_page
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oPageShape = oDoc.createInstance("com.sun.star.drawing.PageShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 7000
aSize.Height = 7000
oPageShape.setPosition(aPoint)
oPageShape.setSize(aSize)
oDrawPage.add(oPageShape)
oPageShape.PageNumber = 2
End Sub
|
ファイルを保存したとき PageNumber プロパティが保存されないようです。
フレーム 
別のドキュメントを表示するフレームは com.sun.star.drawing.FrameShape サービスで作成できます。しかし、挿入すると OLE2Shape になってしまいます。
FrameURL プロパティに表示したいファイル URL を指定します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| | Sub shapes_frame
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oFrameShape = oDoc.createInstance("com.sun.star.drawing.FrameShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 5000
aSize.Height = 5000
oDrawPage.add(oFrameShape)
oFrameShape.FrameURL = "file:///C:/usr/1.odt"
End Sub
|
プラグイン 
プラグインシェープは com.sun.star.drawing.PluginShape サービスを利用します。
pdf ファイルを表示するプラグインシェープを作成します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| | Sub shapes_plugin
oDoc = ThisComponent
oDrawPage = oDoc.getDrawPages().getByIndex(0)
oPluginShape = oDoc.createInstance("com.sun.star.drawing.PluginShape")
aPoint = CreateUnoStruct("com.sun.star.awt.Point")
aSize = CreateUnoStruct("com.sun.star.awt.Size")
aPoint.X = 1000
aPoint.Y = 1000
aSize.Width = 15000
aSize.Height = 15000
oPluginShape.setPosition(aPoint)
oPluginShape.setSize(aSize)
oDrawPage.add(oPluginShape)
oPluginShape.PluginMimeType = "application/pdf"
oPluginShape.PluginURL = "file:///C:/usr/doc/DevelopersGuide_2.3.pdf"
End Sub
|
PluginMimeType にタイプを、PluginURL にファイルの URL を指定します。また、オプションを PluginCommands に []com.sun.star.beans.PropertyValue で指定します。設定は図形を挿入後に行います。