15.3.2 グラフィックスオブジェクト
グラフィックス オブジェクトの階層については上で説明しました。グラフィックス構造の概要を参照してください。ここでは、特定のオブジェクトについて説明し、これらのオブジェクトに含まれるプロパティについて説明します。グラフィックス オブジェクトは常にハンドルによって参照されることに注意してください。
root 階層の最上位レベルであり、すべての図オブジェクトの親です。grootルート グラフィック オブジェクトのハンドルを取得するために使用します。
figure フィギュアウィンドウ
axes 軸のセット。このオブジェクトは図形オブジェクトの子であり、線、テキスト、画像、パッチ、サーフェス、またはライト オブジェクトの親になることができます
line 2次元または3次元の線.
text テキスト注釈.
image ビットマップ画像
patch 塗りつぶされたポリゴン。現在は 2 次元に制限されています
surface 3次元の表面
light パッチやサーフェスの照明効果に使用されるライト オブジェクト
Creating Graphics Objects
Handle Functions
15.3.2.1 グラフィックスオブジェクトの作成
オブジェクトと同じ名前の関数を呼び出すことで、任意のグラフィックス オブジェクト プリミティブを作成できます。つまりfigure、、、、、、、、、および 関数です。これらの基本的なグラフィックス オブジェクトはaxes、 が配置されているかのように、自動的に現在の axes オブジェクトの子になります。また、axes は自動的に現在の figure オブジェクトのline子textになり、figure はルート オブジェクトの子になります。 imagepatchsurfacelighthold on
この自動結合機能が不要な場合は、 newplotまず を呼び出して、プロット用の新しい図と軸を準備することが重要です。または、より簡単な方法は、プロットを作成してから低レベルのグラフィックス オブジェクトでプロットを設定する高レベルのグラフィックス ルーチンを呼び出すことです。 を呼び出す代わりにline、 を使用しますplot。または、surfの代わりに を使用しますsurface。または、の代わりにfillまたは を使用します。 fill3patch
: axes ()
: axes (property, value, …)
: axes (hpar, property, value, …)
: axes (hax)
: h = axes (…)
直交座標軸オブジェクトを作成し、そのハンドルを返すか、現在の座標軸をhaxに設定します。
引数なしで、またはプロパティ/値のペアで呼び出され、新しい軸を構築します。オプションの引数hparは、新しい軸の親を指定するグラフィック ハンドルであり、figure、uipanel、または uitab になります。
単一の軸ハンドル引数haxで呼び出されるこの関数は、 hax を現在の軸にします ( によって返されるとおり)。また、 haxgcaを含む図を現在の図にします ( によって返されるとおり )。最後に、 軸hax がリスト内の他のすべての軸ハンドルの前に表示されるように、親オブジェクトのプロパティを再スタックします。これにより、 hax は他のすべての軸オブジェクトの上に表示されます (Z オーダー スタッキング)。さらに、haxに関連付けられた凡例またはカラーバー オブジェクトも再スタックして表示されるようにします。 gcfchildren
プログラミング ノート: プロパティの完全なリストは、 Axes Propertiesに記載されています。
See also: gca, set, get.
: line ()
: line (x, y)
: line (x, y, z)
: line ("xdata", x, "ydata", y)
: line ("xdata", x, "ydata", y, "zdata", z)
: line (…, property, value)
: line (hax, …)
: h = line (…)
xとy (および場合によってはz )から線オブジェクトを作成し、現在の軸に挿入します。
標準の呼び出し形式では、データx、y、z はスカラー、ベクトル、または行列になります。行列入力の場合、line は結果をプロットできるようにスカラーとベクトルの方向を調整します。これには、ベクトルの次元の 1 つが行列の行数または列数と一致する必要があります。
データが名前で指定される低レベルの呼び出し形式(50% 高いパフォーマンス)では()、データはベクトルである必要があります。データが指定されていない場合()、 となります 。 line ("xdata", x, …)line ()x == y = [0, 1]
ライン オブジェクトには複数のプロパティと値のペアを指定できますが、ペアで指定する必要があります。
プロパティ/値のペアのみで呼び出された場合、指定されていないプロパティはルート オブジェクトで指定されたデフォルト値を使用します。
最初の引数hax が軸ハンドルである場合、 によって返される現在の軸ではなく、この軸にプロットしますgca。
オプションの戻り値hは、作成された線オブジェクトへのグラフィックス ハンドル (またはハンドルのベクトル) です。
プログラミング ノート: プロパティの完全なリストは、 Line Propertiesに記載されています。
この関数は、最初にプロットをクリアせずに、現在の軸に線オブジ
See also: image, patch, rectangle, surface, text.
: patch ()
: patch (x, y, c)
: patch (x, y, z, c)
: patch ("Faces", faces, "Vertices", verts, …)
: patch (…, "prop", val, …)
: patch (…, propstruct, …)
: patch (hax, …)
: h = patch (…)
現在の軸に、位置 ( x、y ) に頂点を持ち、色cのパッチ オブジェクトを作成します。
頂点が MxN サイズの行列である場合、各ポリゴン パッチには M 個の頂点があり、合計 N 個のポリゴンが作成されます。一部のポリゴンに M 個の頂点がない場合は、NaN を使用して「頂点なし」を表します。z 入力が存在する場合は、 3D パッチが作成されます。
色引数c はさまざまな形式を取ることができます。すべて同じ色を共有するポリゴンを作成するには、文字列値 (例:"r"赤)、caxis現在のカラーマップでスケールされインデックス付けされたスカラー値、または正確な TrueColor を持つ 3 要素の RGB ベクトルを使用します。
cが長さ N のベクトルである場合、i 番目のポリゴンの色は、エントリc (i)をスケーリングしcaxisて現在のカラーマップにインデックス付けすることによって決定されます。より複雑な色付けの状況では、パッチのプロパティ/値のペアを直接操作する必要があります。
マトリックスxとyでポリゴンを指定する代わりに、一意の頂点リストと、それらの頂点から作成されたポリゴン面のリストを提示することができます。この場合、 "Vertices"マトリックスは Nx2 (2-D パッチ) または Nx3 (3-D パッチ) になります。MxN"Faces"マトリックスは、N 個の頂点を持つ M 個のポリゴンを表します。各行は 1 つのポリゴンを表し、各列エントリはマトリックス内で頂点を識別するためのインデックスです 。パッチ オブジェクトは、プロパティ/値のペア/ verts、/ faces を"Vertices"入力として直接渡すことで作成できます 。 "Vertices""Faces"
プロパティ/値のペアを使用する代わりに、それぞれのフィールド名を持つ構造体propstruct を渡すことによって、任意のプロパティを設定できます。
最初の引数hax が軸ハンドルである場合、 によって返される現在の軸ではなく、この軸にプロットしますgca。
オプションの戻り値hは、作成されたパッチ オブジェクトへのグラフィックス ハンドルです。
プログラミングノート:
プロパティの完全なリストは、パッチ プロパティに記載されています。 有用なパッチ プロパティには"edgecolor"、、、、、などがあります。 "facecolor""faces""vertices""facevertexcdata"
ジオメトリを定義する xyz 形式と面頂点形式を混在させると、予期しないジオメトリ結果が発生する可能性があります。
"cdata"面頂点定義ジオメトリでカラー定義を使用したり、"facevertexcdata" xyz 定義ジオメトリでカラー定義を 使用すると、予期しないパッチ カラー結果が発生する可能性があります。
: surface (x, y, z, c)
: surface (x, y, z)
: surface (z, c)
: surface (z)
: surface (…, prop, val, …)
: surface (hax, …)
: h = surface (…)
行列xとyと 、表面の x座標とy座標に対応する 値zmeshgridの行列を指定して、表面グラフィック オブジェクトを作成します。
xとyがベクトルの場合、典型的な頂点は ( x (j), y (i), z (i,j)) です。したがって、 zの列は異なるx値に対応し、zの行は異なる y値に対応します。入力zが1 つだけ与えられた場合、 x は、 yは とみなされます。 1:columns (z)1:rows (z)
任意のプロパティ/値入力ペアがサーフェス オブジェクトに割り当てられます。
最初の引数hax が軸ハンドルである場合、 によって返される現在の軸ではなく、この軸にプロットしますgca。
オプションの戻り値hは、作成されたサーフェス オブジェクトへのグラフィックス ハンドルです。
プログラミング ノート: プロパティの完全なリストは、 Surface Propertiesに記載されています。
See also: surf, mesh, patch, line.
: light ()
: light (…, "prop", val, …)
: light (hax, …)
: h = light (…)
現在の軸または軸haxにライト オブジェクトを作成します。
軸オブジェクトにライト オブジェクトが存在し、 または オブジェクトの プロパティまたは が 以外の値に設定されている場合 、 これら"EdgeLighting"のオブジェクトは照明効果を使用して描画されます。照明プロパティでサポートされている値は、 (照明効果なし)、(オブジェクトのファセット ルック)、および(頂点間の照明効果の線形補間) です。照明モードが に設定されている場合 、プロパティが照明に使用されます。 の場合、プロパティが使用されます。 "FaceLighting"patchsurface"none""none""flat""gouraud""flat""FaceNormals""gouraud""VertexNormals"
軸ごとに最大 8 つのライト オブジェクトがサポートされます。(実装に依存)
"fltk" ライティングは OpenGL グラフィック ツールキット (つまり、および"qt") でのみサポートされます。
ライト オブジェクトには、プロットの外観を変更する次のプロパティがあります。
ライト オブジェクトには、プロットの外観を変更する次のプロパティがあります。
"Color":RGB ベクトル (例:[1 0 0]赤) または文字列 (例:"r" 赤)。デフォルトの色は白 ( [1 1 1]) です。
"Position":光が放射される方向は
1x3 ベクトル。デフォルトの方向は です[1 0 1]。
"Style":この文字列は、光がどこから発せられるかを定義します。
無限遠の光源("infinite")または局所的な点光源("local")からの光源。デフォルトは です"infinite"。
最初の引数hax が軸ハンドルである場合は、 によって返される現在の軸ではなく、この軸にライト オブジェクトを追加しますgca。
オプションの戻り値hは、作成されたライト オブジェクトへのグラフィックス ハンドルです。
プログラミング ノート: プロパティの完全なリストは、 Light Propertiesに記載されています。
See also: lighting, material, patch, surface.
15.3.2.2 ハンドル関数
変数がグラフィックス オブジェクトのインデックスであるか、軸や図のインデックスであるかを判断するにはishghandle、関数isgraphics、、、 isaxesおよびを使用しますisfigure。
: tf = ishghandle (h)
hがグラフィックス ハンドルの 場合は true を返し、それ以外の場合は false を返します。
h はハンドルの行列である可能性があり、その場合、hの要素がグラフィックス ハンドルである場合は true、そうでない場合は false となる論理配列が返されます。
See also: isgraphics, isaxes, isfigure, ishandle.
: tf = isgraphics (h)
: tf = isgraphics (h, type)
hがグラフィックス ハンドル (型type ) の場合は true を返し、それ以外の場合は false を返します。
型が指定されていない場合、ishghandle関数は と同等になります 。
See also: ishghandle, ishandle, isaxes, isfigure.
: tf = ishandle (h)
hがグラフィックスまたは Java オブジェクトへのハンドルである 場合は true を返し、それ以外の場合は false を返します。
h はハンドルの行列である可能性もあります。その場合、論理配列が返されます。h の要素がグラフィックスまたは Java オブジェクトへのハンドルである場合は true 、そうでない場合は false になります。
プログラミング ノート: 多くの場合、特定のオブジェクト タイプをテストする方が便利です。ハンドルがグラフィックス オブジェクトに属しているかどうかを判断するには、 ishghandleまたはisgraphicsを使用します。ハンドルが Java オブジェクトに属しているかどうかを判断するには、を使用しますisjava。
See also: ishghandle, isgraphics, isjava.
: tf = isaxes (h)
hが軸グラフィックス ハンドルの 場合は true を返し、それ以外の場合は false を返します。
hが行列の場合、 hの要素が軸グラフィックス ハンドルである場合は true、そうでない場合は false となる論理配列を返します。
See also: isfigure, ishghandle, isgraphics.
: tf = isfigure (h)
hが図のグラフィック ハンドルの 場合は true を返し、それ以外の場合は false を返します。
hが行列の場合、 hの要素が図のグラフィックス ハンドルである場合は true、そうでない場合は false となる論理配列を返します。
See also: isaxes, ishghandle, isgraphics.
この関数はgcf、現在の図オブジェクトへのインデックスを返すか、存在しない場合は作成します。同様に、gca現在の軸オブジェクトを返すか、存在しない場合は軸オブジェクト (およびその親図オブジェクト) を作成します。
: h = groot ()
ルート グラフィックス オブジェクトへのハンドルを返します。
ルート グラフィック オブジェクトは、すべてのグラフィック オブジェクトの最終的な親です。
さらに、ルート オブジェクトには、 などのグラフィックス システム全体に関する情報が含まれていますScreenSize。 を使用して get (groot) 、使用可能な情報を確認します。
グラフィックシステム全体のデフォルトは、 で始まるルートグラフィックオブジェクトのプロパティを設定することによって指定されます"Default"。たとえば、すべてのテキストオブジェクトのデフォルトフォントをFreeSansに設定するには、 次のようにします。
set (groot, "DefaultTextFontName", "FreeSans")
setデフォルトのプロパティは、の特別なプロパティ値を使用して削除できます"remove"。上記のデフォルトのフォント割り当てを元に戻すには、
set (groot, "DefaultTextFontName", "remove")
プログラミング ノート: ルート グラフィックス オブジェクトは、特別なハンドル値 0 によって識別されます。この一意の値は、ある時点で変更される可能性がありますが、groot常にルート グラフィックス オブジェクトを返すことを保証する を使用することで、将来の変更に対してコードが耐性を持つようにすることができます。
See also: gcf, gca, get, set.
: h = gcf ()
現在の図形へのハンドルを返します。
現在の図は、グラフィックス出力のデフォルトのターゲットです。複数の図が存在する場合は、gcf最後に作成された図、またはマウスで最後にクリックされた図を返します。
現在の図が存在しない場合は、図を作成してそのハンドルを返します。ハンドルは、図のプロパティを調べたり設定したりするために使用できます。たとえば、
fplot (@sin, [-10, 10]); fig = gcf (); set (fig, "numbertitle", "off", "name", "sin plot")
正弦波をプロットし、現在の図のハンドルを見つけて、その内容を説明するために図ウィンドウの名前を変更します。
注: 現在の図が存在しない場合に、新しい図を作成せずに現在の図を検索するには、"CurrentFigure"ルート グラフィックス オブジェクトのプロパティを照会します。
get (groot, "currentfigure");
See also: gca, gco, gcbf, gcbo, get, set.
: h = gca ()
現在の軸オブジェクトへのハンドルを返します。
現在の軸は、グラフィックス出力のデフォルトのターゲットです。複数の軸を持つ図の場合は、gca最後に作成された軸、またはマウスで最後にクリックされた軸を返します。
現在の軸オブジェクトが存在しない場合は、作成してそのハンドルを返します。ハンドルは軸のプロパティを調べたり設定したりするために使用できます。たとえば、
ax = gca (); set (ax, "position", [0.5, 0.5, 0.5, 0.5]);
空の軸オブジェクトを作成し、図ウィンドウ内でその位置とサイズを変更します。
注: 新しい軸オブジェクトが存在しない場合にそれを作成せずに現在の軸を見つけるには、"CurrentAxes"図のプロパティを照会します。
get (gcf, "currentaxes");
See also: gcf, gco, gcbf, gcbo, get, set.
: h = gco ()
: h = gco (hfig)
現在の図の現在のオブジェクトへのハンドル、またはハンドルhfigを持つ図の現在のオブジェクトへのハンドルを返します。
図形の現在のオブジェクトは、最後にクリックされたオブジェクトです。これは、"CurrentObject"対象の図形のプロパティに保存されます。
最後のマウス クリックが図の子オブジェクト上で行われなかった場合、現在のオブジェクトは図自体になります。
対象の図でマウス クリックが発生しなかった場合、この関数は空のマトリックスを返します。
プログラミング ノート: この関数によって返される値は、コールバック実行中に返される値と必ずしも同じではありませんgcbo。実行中のコールバックは別のコールバックによって中断され、現在のオブジェクトが変更される可能性があります。
See also: gcbo, gca, gcf, gcbf, get, set.
関数getとset関数は、グラフィックスオブジェクトのプロパティを調べたり設定したりするために使用できます。たとえば、
get (groot)
⇒ ans =
{
type = root
currentfigure = [](0x0)
children = [](0x0)
visible = on
...
}
ルート グラフィックス オブジェクトのすべてのプロパティを含む構造体を返します。Octave のすべての関数と同様に、構造体は値で返されるため、構造体を変更しても内部のルート オブジェクトは変更されません。変更するには、set関数を使用する必要があります。また、この場合、 currentfigureプロパティは空であり、現在の図ウィンドウが存在しないことを示しています。
このget関数は、単一のプロパティの値を見つけるためにも使用できます。たとえば、
get (gca (), "xlim") ⇒ [ 0 1 ]
現在の図の現在の軸オブジェクトの x 軸の範囲を返します。
グラフィックスオブジェクトのプロパティを設定するには、set関数を使用します。たとえば、
set (gca (), "xlim", [-10, 10]);
現在の図の現在の軸オブジェクトのx軸の範囲を「[-10, 10]'。
関数が値引数なしで呼び出された場合、デフォルトのプロパティ値を照会することもできますset。引数が 1 つだけ (グラフィック ハンドル) 指定されている場合は、指定されたオブジェクト タイプのすべてのプロパティのデフォルト値を含む構造体が返されます。たとえば、
set (gca ())
軸オブジェクトのデフォルトのプロパティ値を含む構造体を返します。 がset2 つの引数 (グラフィック ハンドルとプロパティ名) で呼び出された場合は、要求されたプロパティのデフォルトのみが返されます。
: val = get (h)
: val = get (h, p)
グラフィックス ハンドル hから名前付きプロパティpの値を返します。
pが省略された場合は、 hの完全なプロパティ リストを返します。
hがベクトルの 場合、それぞれプロパティ値またはリストを含むセル配列を返します。
See also: set.
: set (h, property, value, …)
: set (h, {properties}, {values})
: set (h, pv)
: value_list = set (h, property)
: all_value_list = set (h)
: set (h, property, value, …)
グラフィックス ハンドル (またはグラフィックス ハンドルのベクトル) hの名前付きプロパティ値を設定します。
プロパティ名と値を指定するには、次の 3 つの方法があります。
プロパティと値のペア のコンマ区切りのリストとして
各プロパティはプロパティ名を含む文字列で、各値 はプロパティに適切な型の値です。hに複数のハンドルがある場合、それぞれに同じ値が割り当てられます。例:
h = plot ([0, 1]); set (h, 'color', 'green');
プロパティ名を含む文字列プロパティのセル配列と、プロパティ値を含む セル配列値として。
この場合、値の列数はproperties内の要素数と一致する必要があります。値の最初の列には、 propertiesの最初のエントリの値などが含まれます。値の行数は 1 であるか、 hの要素数と一致する必要があります。最初のケースでは、 hの各ハンドルに同じ値が割り当てられます。2 番目のケースでは、 hの最初のハンドルに最初の行の値が割り当てられ、以下同様に続きます。例:
h = plot ([0, 1; 1, 0]);
set (h, {'color'}, {'green'; 'red'});
構造としてpv
これは、 pvのフィールド名がプロパティ名を表し、フィールド値がプロパティ値を示す最初のケースと同じです。最初のケースと同様に、 h内のすべてのハンドルに適用されるプロパティには 1 つの値のみを設定できます。例:
h = plot ([0, 1]); props.color = 'green'; set (h, props);
プロパティを設定するための 3 つの構文は、任意の組み合わせで使用できます。
setは、名前付きプロパティが取る値のリストを照会するためにも使用されます。 セル リストclist内の可能な値のリストを返します。出力変数が使用されていない場合は、リストがフォーマットされて画面に出力されます。 clist = set (h, "property")"property"
プロパティが指定されていない場合 ( )、構造体slistが返されます。ここで、フィールド名はオブジェクトhのプロパティであり、フィールドは各プロパティの可能な値のリストです。出力変数が使用されていない場合、リストはフォーマットされて画面に出力されます。 slist = set (h)
プロパティを照会する場合、単一のグラフィックスオブジェクトに対して単一のグラフィック ス ハンドルhのみが許可されます。
クエリ例
hf = figure ();
set (hf, "paperorientation")
⇒ [ landscape | {portrait} ]
paperorientation プロパティは 2 つの値を取ることができ、デフォルトは であることを示しています"portrait"。
See also: get.
: parent = ancestor (h, type)
: parent = ancestor (h, type, "toplevel")
型が type に一致するハンドル オブジェクトhの最初の祖先を返します。ここで、typeは文字列です。
typeが文字列のセル配列の 場合、指定された type 文字列のいずれかと一致する最初の親を返します。
ハンドル オブジェクトh自体が type型の場合、hを返します。
が 3 番目の引数として指定されている場合は"toplevel"、最初の (最も近い) 親ではなく、条件に一致するオブジェクト階層の最上位の親を返します。
See also: findobj, findall, allchild.
: h = allchild (handles)
グラフィック オブジェクトのすべての子 (非表示の子を含む) を検索します。
この関数は に似ていますget (h, "children")が、非表示のオブジェクトも返します (HandleVisibility = "off")。
ハンドルがスカラーの場合、 h はベクトルになります。それ以外の場合、 h はハンドルと同じサイズのセルの行列になり、各セルにはハンドルのベクトルが含まれます。
See also: findall, findobj, get, set.
: findfigs ()
現在画面外にあるすべての可視図形を見つけて、画面上に移動します。
See also: allchild, figure, get, set.
print図は、および を使用して、さまざまなグラフィック形式で印刷または保存できますsaveas。ただし、場合によっては、タイトルや凡例の変更などのさらなる変更が行えるように、元の Octave ハンドル グラフィックを直接保存すると便利なことがあります。
これは次の関数で実現できます。
fig_struct = hdl2struct (gcf);
save myplot.fig -struct fig_struct;
...
fig_struct = load ("myplot.fig");
struct2hdl (fig_struct);
: s = hdl2struct (h)
ハンドルhに関連付けられたオブジェクトとその子のプロパティをフィールドが記述する構造体sを返します。
構造 体sのフィールドは"type"、、、、、およびです"handle"。
See also: struct2hdl, hgsave, findobj.
: h = struct2hdl (s)
: h = struct2hdl (s, p)
: h = struct2hdl (s, p, hilev)
構造体sからグラフィックス ハンドル オブジェクトhを構築します。
構造には"handle"、、、、およびフィールド が含まれている必要があります"type"。 "children""properties""special"
既存の図または軸のハンドルpが指定されている場合、新しいオブジェクトはそのオブジェクトの子として作成されます。親ハンドルが指定されていない場合は、ルート オブジェクトの既定値を使用して、新しい図と必要な子が構築されます。
3 番目のブール引数hilevを渡して、関数が凡例や hggroups などのリスナー/コールバックを保持するかどうかを指定できます。デフォルトは false です。
See also: hdl2struct, hgload, findobj.
: hnew = copyobj (horig)
: hnew = copyobj (horig, hparent)
ハンドルhorigに関連付けられたグラフィック オブジェクトのコピーを作成し 、新しいオブジェクトに 新しいハンドルhnewを返します。
親ハンドルhparent (ルート、図、軸、または hggroup) が指定されている場合、コピーされたオブジェクトはhparentの子として作成されます。
horigがハンドルのベクトルで、hparentがスカラーの場合、ベクトルhnew内の各ハンドルのプロパティはhparent"Parent"に設定されます。逆に、horigがスカラーで hparentがベクトルの場合、各親オブジェクトはhorigのコピーを受け取ります 。horigとhparent の両方が同じ要素数のベクトルである場合、parent が設定されます 。 hnew(i)hparent(i)
See also: struct2hdl, hdl2struct, findobj.